-
آموزش ساخت سيستم كاربري - ورود/عضويت
آموزش ساخت سيستم كاربري
اين مطلب رو در راستاي آموزش ساخت سيستم وبلاگ دهي مي نويسم و بعلاوه گفتم تو يك آموزش جدا باشه تا اگه كسي فقط دنبال همين بود هم راحت بهش برسه
خيلي خلاصه مي گم
كاربر وارد سايت ميشه
بررسي مي كنيم آيا قبلا كاربر وارد سايت شده يا نه
اگر وارد شده بود يعني login كرده بود كه مشخصات مربوط به خودش رو.نشونش مي ديم و گرنه فرم ثبت نام
آموزش رو خيلي ساده و بدور از رعايت هر گونه نكات امنيتي بيان مي كنم
انشالله فرصت كنم يك تاپيك امنيت هم تو انجمن ميذارم
تعاريف رو از زبان خودم ميگم بنابراين ممكنه دقيقا برابر تعارف كتابي نباشه!
سشن در لغت يعني جلسه. وقتي ما به يك سايت مي ريم مرورگر تمام كوكي هاي ذخيره شده در اون سايت رو به برنامه تحت وب ارسال مي كنه
همين الان اگر به تنظيمات مرورگر بريد و كوكي هاي مرتبط با انجمن رو ببينيد ، مي بينيد كه يك كوكي به نام session id
داريم.البته ممكنه در برنامه نام اين كوكي رو عوض كرده باشيم پس لزوما به همين نام نيست
در واقع وقتي كه ما وارد يك سايت مي شيم ، اگر در برنامه تحت وب از سشن ها استفاده شده باشه يك جلسه جديد براي ما ايجاد ميشه و عموما در يك فولدر tmp كه در php.ini مشخص شده يك فايل براي هر كاربر ايجاد ميشه كه ما توسط شناسه سشن يا همون session id مي تونيم به اون سشن دسترسي داشته باشيم
اما فرق كوكي با سشن چيه؟
در كوكي ها تمام اطلاعات در كامپيوتر كاربر ذخيره ميشه و به راحتي قابل رويت هست و به همين خاطر اعتبار سنجي كاربر توسط كوكي ها تقريبا امري اشتباه هست
يكي از دلايلي كه وقتي وارد سايتي ميشيم و ازمون مي پرسه براي چه مدت لاگين نگه دارمتون همينه كه چون ميشه كوكي ها رو به صورت fake ايجاد كرد و دسترسي غير مجاز ايجاد كرد
البته طبيعتا اين مربوط به امنيت و ضعف در كد نويسي هست كه بحث ما نيست!
در سشن ها فقط يك شناسه كد شده در قالب يك كوكي در سمت مرورگر كاربر ذخيره ميشه و بقيه اطلاعات به صورت index در همون فايلي كه در پوشه tmp براي كاربر ايجاد شده ذخيره ميشوند
البته حتي اگر در سشن ها هم موارد امنيتي رو رعايت نكنيم با جعل شناسه جلسه ميشه امنيت سايت رو تهديد كرد ولي بررسي موارد امنيتي رو به تاپيك امنيت مي سپارم و روش هاي مقابل با اين تهديد هاي امنيتي رو در اونجا بررسي مي كنم و آموزش رو از اين كه هست پيچيده تر نمي كنم :)
حالا كه با مفاهيم سشن و كوكي از زبان من(!) آشنا شديد بريم سمت كد نويسي
تابع session_start
sesison_start از جمله توابعي هست كه بايد قبل از هر خروجي ايي در برنامه استفاده بشه
يعني اگر قبل از اين تابع در برنامه خروجي داشته باشيم ، تابع خطا ميده و درست اجرا نميشه
دستورات و توابع header از اين قبيل هستند.
با اينكه بحث ما نيست اما اين رو هم بد نيست كه بگم يكي از دلايل توصيه به استفاده از اديتور هاي استاندارد پي اچ پي همين هست كه اديتور هايي مثل notepad ويندوز قبل از كد php به خصوص در حال utf
معمولا يك كاراكتر اضافي و غير قابل رويت در همون اديتور ايجاد مي كنند كه وقتي برنامه رو اجزا مي كنيم و خطاهايي مانند
header already sent at line...
يا اين قبلي مواجه ميشيم
پس درست بعد از تگ php اينجوري برنامه رو آغاز مي كنيم
کد PHP:
<?php
session_start();
//ادامه
?>
حالا كه اين تابع رو زديم پي اچ پي مي گرده ببينه آيا اين كاربر براش سشن آي دي تعريف شده؟اگه شده آيا معتبر هست يا نه.
اگر درست بود كه اطلاعات فايل ذخيره شده در پوشه tmp مطابق با اين شناسه در قالب يك آرايه پيش فرض به نام $_SESSION در برنامه قابل استفاده خواهند بود.
و در غير اين صورت يك شناسه معتبر به كاربر تعلق مي گيره و يك جلسه جديد براي كاربر ايجاد ميشه
تابع isset
اين تابع ربطي به سشن ها نداره! با اين تابع مي تونيم بفهمين آيا يك متغير تعريف شده يا نه
برنامه زير رو ببنيد:
index.php
کد PHP:
<?php
session_start();
if(isset($_SESSION['username']))
echo "welcome, ".$_SESSION['username'];
else
echo "Please Login/register";
?>
در خط سوم گفتم اگر در آرايه $_SESSION ايندكسي به اسم username كه يك اسم دلخواه و انتخابي توسط خودم هست؛وجود داشت يعني كاربر وارد شده و در غير اينصوت به كاربر اطلاعات ورود/عضويت رو نشون بده
حالا يك فرم html ساده مي سازم
login.html
کد HTML:
<form action="login.php" method=post>
<input name=username value="" size="20">
<input name=password value="" size="20" type="password">
<input type=submit name=submit value="Login">
</from>
فرو html رو توضيح نمي دم
فقط در خط اول به action دقت كنيد
و method كه post هست و نه get
نام كاربري و پسورد هم كه در فرم با نام هاي username و password مشخص شده اند
فايل login.php
کد PHP:
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
if($_POST['username'] == 'reza' && $_POST['password'] == 'test')
{
$_SESSION['username'] = 'reza';
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>
در خط 3 بررسي كردم كه اين دو مقدار توسط فرم ارسال شده باشند
بعد در خط 4 به بعد بررسي كردم اگه نام كاربر و پسورد دررست بود سشن يوزر نيم ايجاد بشه و كاربر به صفحه اصلي بازگشت داده بشه در غير اينصورت خطا بگيره
چون خواستم ساده باشه براي يوزر نيم و پسورد فعلا از ديتابيس استفاده نكردم و ساده ترين حال ممكن رو پيش بردم!
تا اينجا ما در فايل اصلي چك كرديم كاربر وارد شده يا نه
در فايل login.html
فرم ورود رو داشتيم
و در فايل login.php اعتبار سنجي و تاييد هويت رو داشتيم
در مرحله آخر اين آموزش هم logout رو بررسي مي كنيم
براي logout كافيه سشن يوزر نيم رو حذف كنيم
در اينجا تمام سشن هاي كاربر رو مي تونيم با تابع
session_destroy();
نابود كنيم!
پس logout.php
کد PHP:
<?php
session_destroy();
HEADER('LOCATION: index.php');
?>
انشالله در ادامه مبحث عضو گيري رو هم ميگم و و استفاده از كدها رو با ديتابيس پيش م بريم تا كمي به واقعيت نزديك تر بشيم:)
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
با تشکر فراوان ،
خیلی وقت بود دنبال همچین چیزی می گشتم ، فقط ای کاش میشد ، یک سیستم خودتون مینوشتید و قرار میدادید ، یک سیستم ساده که یوزرنیم و پسوورد بخواد و وقتی درست بود وارد بشه و نبود همونجوری بمونه . اینجوری ما دانلود میکردیم و تک تک کد ها رو آنالیز میکردیم بیشتر میتونستیم روش تمرکز بگیریم .
در کل دستتون دردنکنه .کارجالبی انجام دادید
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
خواهش مي كنم
اتفاقا قصد همين كار رو دارم ، فرصت كنم ادامه آموزش رو مي نويسم و در آخر فايل ها + ساختار جدول رو مي ذارم.
-
1 فایل پیوست
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
من این رو ساختم تست هم کردم چیز جالبی هست اما دیتابیس یه چیز دیگس/:)
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
Am!r
من این رو ساختم تست هم کردم چیز جالبی هست اما دیتابیس یه چیز دیگس/:)
خیلی خیلی خیلی ممنون ، زحمت کشیدید .
فقط یک سوال : چه جوری میشه داخل این کد تعداد زیادی یوزرنیم و پسوورد ذخیره کرد ؟
یک سوال دیگه : خوب اینجوری ، اگر کسی فایل Login.php رو از روی هاست برداره تمام یوزنیم و پسوورد ها رو میتونه مشاهده کنه که ! راهی نداره کاری کرد کسی نتونه اون فایل رو ببینه و نشه اون رو از رو هاست دانلود کرد ؟
با تشکر فراوان
---------- Post added at 03:29 PM ---------- Previous post was at 03:23 PM ----------
میشه به روش دیتابیس هم توضیح بدید ؟
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
نقل قول:
انشالله در ادامه مبحث عضو گيري رو هم ميگم و و استفاده از كدها رو با ديتابيس پيش م بريم تا كمي به واقعيت نزديك تر بشيم :)
منظورم از اينكه به واقعيت نزديك بشيم همين ها بود كه گفتيد!
فقط مفاهيم اوليه رو توضيح دادم ، ان شالله فرصت كنم تو يك جلسه با ديتابيس ادامه ميدم و يكي هم براي تامين امنيتش ;)
---------- Post added at 03:36 PM ---------- Previous post was at 03:35 PM ----------
نقل قول:
فقط یک سوال : چه جوری میشه داخل این کد تعداد زیادی یوزرنیم و پسوورد ذخیره کرد ؟
تو شرطي كه نوشتم ميشه دستي اضافه كرد،ولي اينو گذاشتم باري register.php كه با ديتابيس توضيحش مي دم
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
hello
سلام
منظورم از اينكه به واقعيت نزديك بشيم همين ها بود كه گفتيد!
فقط مفاهيم اوليه رو توضيح دادم ، ان شالله فرصت كنم تو يك جلسه با ديتابيس ادامه ميدم و يكي هم براي تامين امنيتش ;)
---------- Post added at 03:36 PM ---------- Previous post was at 03:35 PM ----------
تو شرطي كه نوشتم ميشه دستي اضافه كرد،ولي اينو گذاشتم باري register.php كه با ديتابيس توضيحش مي دم
کجاش میشه اضافه کرد ؟
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
if($_POST['username'] == 'reza' && $_POST['password'] == 'test')
{
$_SESSION['username'] = 'reza';
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>
میشه خودتون دوتا کاربر اضافه کنید ، ببینیم کدوم کدها رو باید اضافه کرد ؟
با تشکر فراوان
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
alisc
کجاش میشه اضافه کرد ؟
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
if($_POST['username'] == 'reza' && $_POST['password'] == 'test')
{
$_SESSION['username'] = 'reza';
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>
میشه خودتون دوتا کاربر اضافه کنید ، ببینیم کدوم کدها رو باید اضافه کرد ؟
با تشکر فراوان
کمی صبر کنید آموزش با دیتابیس رو قرار میدن این فقط یه نمومه کوچک هست
اندکی صبر :104:
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
کد PHP:
<?php
session_start();
if(isset($_POST['username']) && isset($_POST['password']))
if(
($_POST['username'] == 'reza' && $_POST['password'] == 'test')
OR
($_POST['username'] == 'user2' && $_POST['password'] == 'pass2')
OR
($_POST['username'] == 'user3' && $_POST['password'] == 'pass3')
)
{
$_SESSION['username'] = 'reza';
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>
يا اگه به شكل بهتر و با آرايه ها و با استفاده از اين آموزش بخوايم بنويسيم اينطوري ميشه:
http://www.webhostingtalk.ir/f148/آر...ر-php-13562/
کد PHP:
<?php
$users = array(
'user1'=>'pass1',
'user2'=>'pass2',
'user3'=>'pass3',
'user4'=>'pass4',
'user5'=>'pass5',
);
$login = false;
if(isset($users[$_POST['username']))
if($users[$_POST['username']] == $_POST['password'])
$login = true;
if($login)
{
$_SESSION['username'] = $_POST['username'];
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
?>
البته اين روش ها در مقايسه با ديتابيس خيلي ضعيف تر هستند.
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
hello عزیز ، ممنون ، لطف کردی .
Am!r عزیز ، منتظر اموزش با دیتابیس هستیم .
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
hi . علیکم . سلام . hello . درود و ... ( نام کاربیتون به چند زبان زنده دنیا ! L-) )
خوبی عزیز ....
یه عالمه برنامه نویسی براتون دارم اگر می تونید حتما با چت : آی دی من : takhoster
پولش رو هم بهتون می دیم ، اگر هم اسرار کردی پول نمی گیری خوب ما هم پول نمی دیم
با تشکر فراوان
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
دوستان ممنون ، لطف داريد.
كاش تاپيك رو بي جهت شلوغ نمي كرديد تا ادامه آموزش رو وقتي نوشتم در ادامه مطالب مي ذاشتم:)
در مورد كار برنامه نويسي هم مي تونيد تماس بگيريد ولي با تعداد پروژه هاي فعالي كه دارم بعيد مي دونم بتونم قبول كنم.(5 پروژه بزرگ رو دارم انجام ميدم!)
-
1 فایل پیوست
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
بالاخره رسيدم سر وقت ادامه آموزش!
خب حالا فرض كنيد قرار هست بيش از يك يا چند كاربر داشته باشيم،و عضو گيري هم بكنيم در اين صورت بهتر گزينه استفاده از ديتابيس هست
خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
1. شناسه اي منحصر به فرد براي هر عضو
2. نام كاربري
3. رمز عبور
4. نام كاربر
پس ابتدا يك ديتابيس جديد بسازيم :
کد:
CREATE DATABASE `learn` ;
حالا جدول مورد نيازمون
کد:
CREATE TABLE `learn`.`user` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 255 ) NOT NULL ,
`pass` VARCHAR( 255 ) NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
اگر با دستورات sql آشنايي نداريد هيچ جاي نگراني نيست؛ چون با php my admin و ابزارهاي مشابه مي تونيد اين ضعف رو بهبود ببخشيد
اندكي توضيح در مورد اين كد
دستور Creat table كه از نامش مشخصه يك جدول ايجاد مي كنه!
`learn`.`user`
در اينجا learn نام ديتابيس و user نام جدول ما هست. مي تونيم از به كاربردن كلمه learn كه اسم ديتابيس هست صرف نظر كنيم البته در صورتي كه در برنامه همزمان با بيش از يك ديتابيس در ارتباط نباشيم.
id همون شناسه كاربر هست كه از نوع عدد صحيح و حداكثر 10 رقمي تعريفش كردم
در خصوصيت اين شناسه و موارد بعدي NOT NULL زدم يعني مقدار اين فيلد ها نبايد تهي باشد
شناسه خاصيت مهمي داره به نام AUTO_INCREMENT كه براي فيلد ها اصلي و عددي استفاده ميشه
در واقع به ازاي هر كاربر جديدي كه به ديتابيس اضافه مي كنيم اين فيلد به صورت خودكار يك واحد براي اون كاربر افزايش پيدا مي كنه
COLLATE جدول رو هم utf گذاشتم تا از utf پشتيباني بشه!
--
خب حالا بريم سر وقت كد نويسي
فايل config.php
اين فايل براي اتصال به ديتابيس استفاده شده كه در ادامه توضيح ميدم:
کد PHP:
<?php
$server = 'localhost';
$username = 'root';
$password = 'mysql';
$database = 'amozesh';
$Connection = mysql_connect( $server , $username , $password ) or die(mysql_error());
mysql_select_db( $database , $Connection ) or die(mysql_error());
?>
تابع mysql_connect رو چند باري توضيح دادم پس نقل قول ميزنم:
mysql_connect : اين تابع سه آرگومان (ورودي) اجباري مي گيرد که اولي نام هاست،دومي نام کاربري ديتا بيس و سومي کلمه عبور ديتا بيس مي باشد.
mysql_select_db : ديتابيس شما را با توجه به اطلاعات داده شده در مرحله قبل انتخاب مي کند تا بتواني عملياتي مانند نوشتن،خواندن،حذف و ... را انجام بديد.
فكر نكنم اين بخش كد چيز خاصي داشته باشه
فرم ثبت نام:
کد HTML:
<form action="signup.php" method="post">
Username : <input name="user" type="text" /><br>
Password : <input name="pass" type="password" /><br>
Name : <input name="name" type="text" /><br>
<input name="submit" type="submit" value="register!"></form>
فرم خيلي ساده نوشته شده ؛ فقط قسمت هاي action و method و name رو دقت كنيد كه بعدا ازشون استفاده مي شه در برنامه.
عضو گيري - فايل signup.php
کد PHP:
<?php
include('config.php');
if(empty($_POST['user']))
die('username is empty!');
if(empty($_POST['pass']))
die('password is empty!');
if(empty($_POST['name']))
die('name is empty!');
$user = $_POST['user'];
$pass = $_POST['pass'];
$name = $_POST['name'];
mysql_query("INSERT INTO `user` SET `user`='$user',`pass`='$pass',`name`='$name'") or die(mysql_error());
echo "Registeration was successfull! now login!";
?>
در خط 2 فايل اتصال به ديتابيس رو لود كردم، درواقع اين تنظيمات رو در يك فايل ديگه نوشتم تا هر بار و در هر بخش مجبور به تكرارش نباشيم
در خط 3 الي 8 چك كردم كه مقاديري كه از فرم ارسال شده اند خالي نباشند.
در سه خط بعدي اين مقادير رو به سه متغير كمكي با نام دلخواه نسبت دادم
در خط بعدي در تابع mysql_query يوزر جديد رو اضافه كردم!
براي افزودن يك ركورد به جدول بايد از INSERT استفاده كنيم
من query رو به زبان فارسي بيان مي كنم :
در داخل جدول user سطر جديدي درج كن كه در آن مقدار فيلد user برابر متغير user ، فيلد رمز عبور برابر متغير رمز عبور و نام برابر متغير نام باشد.
خارج از تابع
در غير اين صورت برنامه خاتمه پيدا كنيد (or die)
كه در داخل die خروجي رو mysql_error گذاشتم.اين تابع خطاي رخ داده رو بر مي گردونه و مي تونيم بفهميم اشكال كار كجا بوده
در خط آخر پيام موفقيت در عضويت رو بيان كردم!
فرم ورود -- login.html
کد HTML:
<form action="login.php" method=post>
<input name=username value="" size="20">
<input name=password value="" size="20" type="password">
<input type=submit name=submit value="Login">
</from>
اين فرم رو در ابتداي آموزش داشتيم.
فايل login.php
کد PHP:
<?php
session_start();
include('config.php');
if(isset($_POST['username']) && isset($_POST['password']))
{
$username = $_POST['username'];
$query = mysql_query("SELECT `pass` FROM `user` WHERE `user`='$username'") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['pass'] == $_POST['password'])
{
$_SESSION['username'] = $_POST['username'];
HEADER('LOCATION: index.php');
}
else
die('wrong username/password!');
}
?>
تنها تغييري كه در اين فايل نسبت به فايل آغاز برنامه داشتيم ، اين بود كه اطلاعات اعضا رو از ديتابيس مي كشيم بيرون و اعتبار سنجي مي كنيم
من هم فقط بخش هاي تغيير يافته رو توضيح ميدم
خط 7 : انتخاب كن ، مقدار فيلدي با نام pass را از جدول user در جايي كه فيلد username برابر با متغير $username باشد
در خط بعد ، تابع mysql_fetch_array() نتيجه به دست آمده از تابع mysql_query رو در قالب يك آرايه مي ريزه
پ.ن : براي درك بهتر متغير $data رو از تابع print_r رد كنيد
چون اين تابع رو هم در آموزش هاي ديگه توضيخ دادم بيشتر از اين روش نمي مونم
در خط بعدي بررسي كردم كه اگر مقدار پسورد موجود در آرايه data با مقدار پسوردي كه كاربر در فرم ارسال كرده يكسان بود لوگين كن و گرنه پيغام خطا بده
logout هم كه تغيير خاصي نكرده.
خواستم به قولي كه دادم عمل كرده باشم و آموزش رو امشب گذاشته باشم ، ببخشيد كمي خسته بودم!جايي رو اگه بد توضيح دادم بگيد تا بيشتر توضيح بدم
فايل zip شده فايل ها رو هم گذاشتم.
سپاس :)
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
مرسی hello =D>=D>=D>
---------- Post added at 10:51 AM ---------- Previous post was at 10:46 AM ----------
نقل قول:
نوشته اصلی توسط
hello
پس ابتدا يك ديتابيس جديد بسازيم :
کد:
CREATE DATABASE `learn` ;
حالا جدول مورد نيازمون
کد:
CREATE TABLE `learn`.`user` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 255 ) NOT NULL ,
`pass` VARCHAR( 255 ) NOT NULL ,
`name` VARCHAR( 255 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
اگر با دستورات sql آشنايي نداريد هيچ جاي نگراني نيست؛ چون با php my admin و ابزارهاي مشابه مي تونيد اين ضعف رو بهبود ببخشيد
اندكي توضيح در مورد اين كد
دستور Creat table كه از نامش مشخصه يك جدول ايجاد مي كنه!
`learn`.`user`
در اينجا learn نام ديتابيس و user نام جدول ما هست. مي تونيم از به كاربردن كلمه learn كه اسم ديتابيس هست صرف نظر كنيم البته در صورتي كه در برنامه همزمان با بيش از يك ديتابيس در ارتباط نباشيم.
id همون شناسه كاربر هست كه از نوع عدد صحيح و حداكثر 10 رقمي تعريفش كردم
در خصوصيت اين شناسه و موارد بعدي NOT NULL زدم يعني مقدار اين فيلد ها نبايد تهي باشد
شناسه خاصيت مهمي داره به نام AUTO_INCREMENT كه براي فيلد ها اصلي و عددي استفاده ميشه
در واقع به ازاي هر كاربر جديدي كه به ديتابيس اضافه مي كنيم اين فيلد به صورت خودكار يك واحد براي اون كاربر افزايش پيدا مي كنه
COLLATE جدول رو هم utf گذاشتم تا از utf پشتيباني بشه!
--
ممنون ، یه سوال :
این کدها رو باید داخل php myadmin گذاشت کجاش ؟ چه جوری ؟
یا باید این فیلدها رو دونه دونه ساخت ؟
میشه اینها رو داخل یه فایل txt ذخیره کرد و بعد Import کرد ؟
---------- Post added at 11:44 AM ---------- Previous post was at 10:51 AM ----------
من ان کار ها رو انجام دادم ، ثبت نام با موفقیت انجام میشه . اما وارد نمیشه !!! ( هنگام ورود با پیغام wrong username/password! مواجه میشم !
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
خواهش مي كنم
دستورات sql رو ميتونيد در phpmyadmin از تب sql وارد كنيد يا اينكه به صورت فايلا ذخيره و import كنيد.
در مورد مشكل ورود،بعد از عضويت به phpmyadmin بريد ، ديتابيس و سپس جدول رو انتخاب و browse رو بزنيد و ببينيد آيا يوزر ايجاد شده يا نه؟
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
با احترام،
بطور کلی
php به دو روش بر روی سرویس دهنده وب قابل نصب است. در روش اول php به صورت CGI و در روش دوم هم به صورت ماجول های ثابت یا پویا نصب می گردد.
مفاهیم CGI و ماجول های ثابت یا پویا برایم غیر قابل فهم می باشد.؟
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
میشه کاری کرد که کاربر بعد از ثبت نام براش یه ایمیل ارسال بشه ! ( به صورت اتوماتیک )
---------- Post added at 02:47 PM ---------- Previous post was at 02:06 PM ----------
نقل قول:
نوشته اصلی توسط
hello
سلام
خواهش مي كنم
دستورات sql رو ميتونيد در phpmyadmin از تب sql وارد كنيد يا اينكه به صورت فايلا ذخيره و import كنيد.
در مورد مشكل ورود،بعد از عضويت به phpmyadmin بريد ، ديتابيس و سپس جدول رو انتخاب و browse رو بزنيد و ببينيد آيا يوزر ايجاد شده يا نه؟
بله یوزر با موفقیت ایجاد میشه و داخل دیتابیس هم مشخصاتش هست فقط هنگام ورود با پیغام Please Login/register روبه رو می شوم !
مشکل کجاست ؟
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
@rezamahmodi : جواب سوالتون رو نمي دونم متاسفانه ، تو سايت هاي خاجي زيادي مي چزخم و مفاهيمي رو كه دنبالشون هستم رو هميشه از اونجا پيدا مي كنم، اگه در مورد سوالتون بيشتر توضيح بديد و اصطلاحات انگليسي رو كامل بذاريد مي تونم بگردم. يا هم اگر دوست ديگه اي در اين زمينه اطلاعات داشت راهنمايي كنه.
@alisc : ْآموزش رو هنوز قصد دارم ادامه بدم، اين مورد رو هم انشالله توضيح مي دم.با تابع mail ميشه:
PHP: mail - Manual
بله ، يك اشتباه در كد دارم ! در فايل index.php فايلي كه گذاشتم يادم رفته ر خط دوم session_start رو به كار بگيرم...
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
hello
@rezamahmodi
بله ، يك اشتباه در كد دارم ! در فايل index.php فايلي كه گذاشتم يادم رفته ر خط دوم session_start رو به كار بگيرم...
بالاخره پیش میاد دیگه ! حالا میشه بگید چه جوری درستش کنیم ! یا لطف کنید خودتون فایل اصلاح شده را قرار دهید .
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
اصلاح شدش ميشه اينكه در فايل index.php بعد از تگ <?php تابع رو بكار بگيريم
کد PHP:
<?php
session_start();
//ادامه كد
---------- Post added at 06:08 PM ---------- Previous post was at 06:07 PM ----------
راستي در مورد mail هم : http://www.webhostingtalk.ir/f148/14576/
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
Hello جان ممنون از آموزش خوبت . استفاده کردیم .
من خیلی وقت بود دنبال یه سیستمی میگشتم ، تا بشه یک کاری کرد تا هر کسی که یوزنیم و پسووردش رو وارد میکنه ، بعد از ورود بتونه یه صفحه خاصی که از قبل تعین شده رو ببینه !
مثلا : user1 صفحه index1.html رو ببینه و user2 صفحه index5.html
وقتی شما این تاپیک رو ایجاد کردید ، فهمیدم با این سیستمی که شما نوشتید شاید بشه این کار رو انجام داد ، آیا میشه ؟؟؟ ( اگر میشه ، هر کی وقت کردید میشه اون رو هم توضیح بدید . )
>:D<
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
alisc
Hello جان ممنون از آموزش خوبت . استفاده کردیم .
من خیلی وقت بود دنبال یه سیستمی میگشتم ، تا بشه یک کاری کرد تا هر کسی که یوزنیم و پسووردش رو وارد میکنه ، بعد از ورود بتونه یه صفحه خاصی که از قبل تعین شده رو ببینه !
مثلا : user1 صفحه index1.html رو ببینه و user2 صفحه index5.html
وقتی شما این تاپیک رو ایجاد کردید ، فهمیدم با این سیستمی که شما نوشتید شاید بشه این کار رو انجام داد ، آیا میشه ؟؟؟ ( اگر میشه ، هر کی وقت کردید میشه اون رو هم توضیح بدید . )
>:D<
بله امكان پذير هست ، آموزش رو توي انجمن هاي ديگه هم گذاشتم ،خوشبختانه مخاطب خوب داشته من هم سعي مي كنم آموزش رو كاملتر كنم.
انشالله در قسمت بعدي براي هر يوزر يك صفحه پروفايل شخصي مي سازيم ;)
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام دوستان
این آموزشی که دنبالش بودید ورود/عضويت همراه XML بدون نیاز به دیتابیس و ثبت اطلاعات پسورد بصورت MD5
امیدوارم استفاده کنید...
http://upfile.irhost.org/uploads/xml-user-system.zip
نظر یادتون نره
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
من این صفحه رو ایجاد کردم و به راحتی لوگین میشه !
یک سوال دارم : من تعدادی صفحه دارم و میخوام با یوزر پسی که وارد کردم بتونم به هموشون دسترسی داشته باشم.
مثلا سایت 4 بخشه یک بار که پس رو دادم بتونم به صفحه های دیگه هم دسترسی داشته باشم تا زمانی که خروج نزدم.
تشکر
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
alborzhost
سلام
من این صفحه رو ایجاد کردم و به راحتی لوگین میشه !
یک سوال دارم : من تعدادی صفحه دارم و میخوام با یوزر پسی که وارد کردم بتونم به هموشون دسترسی داشته باشم.
مثلا سایت 4 بخشه یک بار که پس رو دادم بتونم به صفحه های دیگه هم دسترسی داشته باشم تا زمانی که خروج نزدم.
تشکر
با اجازه hello
شما باید اول هر صفحه این که کاربر وارد شده (session) یا نه رو چک کنید و اگه وارد نشده بود اون رو به صفحه لوگین منتقل کنید
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
rn4j1m1
با اجازه hello
شما باید اول هر صفحه این که کاربر وارد شده (session) یا نه رو چک کنید و اگه وارد نشده بود اون رو به صفحه لوگین منتقل کنید
خوب مشکلم همین جاست :دی
کمی توضیح میدید چطوری چک کنم ؟!
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
ببين شما بايد با يك شرx در اول هر صفحه از وجود session اطمينان پيدا كنيد كد زير رو ببينيد
کد PHP:
if(isset($_SESSION['username']))
{
$username=$_SESSION['username'];
}
else {
print "كاربر معتبر نيست";
}
كه اين كد بالا مربوط به سشني به نام username كه ما قبلآ در هنگام لوگين ايجاد كرديم هستش
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
كدي رو كه در صفحه index.php داشتيم :
کد PHP:
<?php
session_start();
if(isset($_SESSION['username']))
echo "welcome, ".$_SESSION['username'];
else
echo "Please Login/register";
?>
مي توانيم براي ساير صفحات نيز كپي كنيم.مثلا در صفحه اي براي ثبت فيش
fish.php
کد PHP:
<?php
session_start();
if(isset($_SESSION['username']))
{
echo "
كد فرم اچ تي ام ال فيش
";
}
else
{
echo "براي دسترسي به اين بخش ابتدا يا بايد وارد/عضو شويد.";
}
?>
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
hello عزیز ، ممنون ،
حالا میشه اون آموزشی که من سری پیش خواسته بودم رو هم قرار بدی ؟؟؟
آموزشی که هر کاربری که یوزرنیم وپسوورد روداد یک صفحه خاص از پیش تعیین شده رو ببینه :
مثلا کاربر با یوزرنیم 123 : صفحه 5 رو ببینه .
کاربر با یوزرنیم 321 صفحه 4 رو ببینه .
چیزی تو مایه های سایت سنجش : دیدید وقتی کد ملی میزنی ، نمره و ساعت آزمون و مکان آزمون رو نمایش میده . اونجوری میخوام .
با تشکر فراوان
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
در ادامه آموزش قصد دارم به آموزش ساخت پروفايل يا صفحات شخصي براي هر كاربر بپردازيم.
گريزي به آخرين مطلب بخش آموزش :
نقل قول:
خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
1. شناسه اي منحصر به فرد براي هر عضو
2. نام كاربري
3. رمز عبور
4. نام كاربر
قسمت بولد شده رو توجه كنيد.
در واقع ما براي هر كاربر يك شناسه در نظر مي گيريم و اين شناسه منحصر به فرد هست
درست مانند شماره دانشجويي هر دانشجو
وجود اين id اختصاصي باعث ميشه ما در جداول خودمون بتونيم به جاي تكرار مكرر نام كاربري يك كاربر خودداري كنيم
مثلا اگر به همين اسكريپت قرار باشه يك جدول براي ارسال مطلب اضافه كنيم نيازي نيست در جدول نام كاربري نويسنده رو ذخيره كنيم و فقط كافيست شناسه كاربر رو ذخيره كنيم
اين كار باعث ميشه از تكرار عمدي يا اجتناب ناپذير جلوگيري بشه
و عمليات ويرايش راحت تر صورت بگيره
(البته من يك استفاده ساده و كلي رو بازبان خودم گفتم و در عمل و اصول استفاده مهم تري هم دارد.)
البته اين برنامه نويس هست كه بايد تشخيص در چه جايي تكرار مفيد هست و در چه جايي خير
براي مثال در mybb به خاطر شرايط يك انجمن ، در جدول تاپيك هم نام كاربري و آي دي كاربر هر دو باهم ذخيره مي شوند!
خب به جاي حاشيه پردازي كد profile.php رو ميسازيم :
کد PHP:
<?php
//session start function : بايد قبل از هر خروجي اي و فقط يك بار در كد فراخواني شود.
session_start();
if(!isset($_SESSION['username']))
die('Please Login/register');
echo "<h1> Your personal Profile </h1>";
echo "welcome, ".$_SESSION['username'];
$username = $_SESSION['username'];
$query = "SELECT * FROM `user` WHERE `user`='$username' LIMIT 1";
$mysql_q = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($mysql_q) <= 0)
die('Invalid login session!');
$data = mysql_fetch_array($mysql_q);
echo "<br> Your name is : ";
echo $data['name'];
echo "<br>Your Personal id is :";
echo $data['id'];
?>
خط اول : آغاز تگ php
خط دوم : دستور session_start جهت ايجاد سشن آي دي جديد در صورت عدم وجو يا استفاده از سشن هاي موجود
خط سوم : بررسي صحت وجود سشن نام كاربري
خط چهارم : خروج اجباري از برنامه و نمايش خطا در صورت صحيح بودن شرط خط دوم (لوگين نبودن(
خط پنجم : نمايش يك پيغام - از اين خط به بعد ظاهرا كاربر لوگين كرده كرده است
خط ششم : نمايش نام كاربري كاربر
خط هفتم : انتساب مقدار موجود در سشن نام كاربري به يك متغير براي راحتي استفاده در خط بعدي
خط هشتم : يك كوئري - ترجمه فارسي كوئري :
انتخاب كن تمام فيلد هاي جدول (همان ستاره) را از جدول user كه فيلد user در آن برابر متغير username ميباشد و حداكثر يك ركورد را انتخاب كن
خط دهم : اجراي كوئري خط بالا
خط يازدهم : تابع mysql_num_rows ورودي اجباري اي دارد كه همان متغيري است كه به mysq_query انتساب داديم
اين تابع تعداد ركورد هاي انتخاب شده رو براي ما نشون ميده و اگر كوئري درست نباشه يك عدد منفي رو بر مي گردونه
بنابراين در اين خطا و خط بعدي چك مي كنيم اگه نتيجه اگر صفر يا منفي بود يعني چنين كاربري در ديتابيس وجود ندارد
مثلا ممكنه بعد از لوگين مدير كاربر رو از ليست حذف كرده باشه يا سشن جعلي باشه
بنابراين با يك بررسي ساده ميتونيم اين موضوع رو تشخصي بديم
در خط بعدي تابع mysql_fetch_array رو داريم
توصيه اكيد مي كنم اگر ميخواهيد كاركر اين تابع رو به درستي درك كنيد ابتدا چند كاربر بسازيد و سپس كد زير رو در زير خط جاري وارد كنيد و. نتيجه رو براي هر كاربر بررسي كنيد
پ.ن : اين تابع رو قبلا و با ذكر همين نكته در پست : http://www.webhostingtalk.ir/f148/14...tml#post142185 توضيح دادم
خب اين قسمت از آموزش مقدمه اي بر اصل مطلب بود
تا آخر هفته براي تكميل موضوع، قسمت ارسال مطلب توسط كاربران رو هم اضافه مي كنيم.
براحتي با همين كدهاي ساده ميتونيم امكاناتي مثل محدوديت دانلود براي كاربران يا كاربران خاص و از اين قبيل فراهم كنيم.
پ.ن مهم : باز هم تاكيد مي كنم فعلا نكات امنيتي رو در نظر نمي گيريم.
پ.ن 2 : لوكال سيستمم قطع بود ، كد رو تست نكردم ، اگر مشكلي گذارش بديد لطفا.
قسمت بعدي رو كامل تر و عملي تر مي نويسم.:67:
سپاس
-
1 فایل پیوست
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
مجموع فايل ها تا الان در قالب يك فايل زيپ
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام میشه یه راهنمایی در مورد فارسی کردن تیبلها بکنید؟
کد PHP:
mysql_query("SET SESSION collation_connection = 'utf8_persian_ci'");
یا
کد PHP:
mysql_query("SET CHARACTER SET utf8;",$connection1);
یا
کد PHP:
mysql_query("SET CHARACTER SET utf8;");
یا
کد PHP:
ENGINE=MyISAM DEFAULT CHARSET=utf8
من کدوم یک از اینا رو استفاده کنم؟ تا وقتی تیبل میسازم فارسی بشه؟
کد PHP:
if (mysql_query("create table $pagestable(
id int(9) unsigned not null auto_increment,
userid int(13) default '0' not null,
block text not null,
primary key(id),
key userid(userid)
);ENGINE=MyISAM DEFAULT CHARSET=utf8")) {
echo "table $pagestable created successfully<br>"; }
else { echo "<b>table $pagestable was not created ",mysql_error(),"</b><br>"; }
هر کردوم رو بعد mysql_query گذاشتم خطا میده
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
من خودم به اين صورت عمل مي كنم و مشكلي ندارم :
موقع ساخت جدول :
کد PHP:
CREATE TABLE `testing`.`test` (
`test1` INT( 2 ) NOT NULL ,
`test2` INT( 2 ) NOT NULL
) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci
هنگام اتصال :
کد PHP:
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET SESSION collation_connection = 'utf8_general_ci'");
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
کد PHP:
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;
اینو گذاشتم درست شد دی:
ممنون
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سلام
ممنون از آموزش عالی تون!
حالا این فرم لاگین و ... از امنیت کامل برخوردار هست؟؟؟
ممنون میشم امنیتش رو باهم کامل کنیم! جهت آموزش و یادگیری
مثلا کد کردن پسورد و ...
با تشکر
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
aghaee
سلام
ممنون از آموزش عالی تون!
حالا این فرم لاگین و ... از امنیت کامل برخوردار هست؟؟؟
ممنون میشم امنیتش رو باهم کامل کنیم! جهت آموزش و یادگیری
مثلا کد کردن پسورد و ...
با تشکر
خير ، به هيچ وجه امن نيست ! :دي
بزودي نحوه امن كردنش رو ميذارم ، كاري نداره كافيه روي متغير هاي ورودي فيل تر گذاشت + يك چند كار جزيي كوچيك.
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
نقل قول:
نوشته اصلی توسط
rezash
خير ، به هيچ وجه امن نيست ! :دي
بزودي نحوه امن كردنش رو ميذارم ، كاري نداره كافيه روي متغير هاي ورودي فيل تر گذاشت + يك چند كار جزيي كوچيك.
خیلی عجله دارم برای یاد گیریش کی میزارید آموزش رو؟
یه مبحثی هم هست که کد میکنه و... Md5 اینا چیه دیگه؟
با تشکر
-
پاسخ : آموزش ساخت سيستم كاربري - ورود/عضويت
سعي مي كنم تا فردا شب بذارم
md5 يك الگوريتم برگشت ناپذير هست كه يك رشته ورودي رو ميگيره و مقدار 32 كاراكتري و منحصر به فردي رو به ما ميده.
ما به جاي ذخيره كردن پسورد به صورت خام ، اون رو به صورت md5 شده و حتي استفاده از الگوريتم هاي ديگه مثل sha1 استفاده مي كنيم و اين مقدار رو ذخيره مي كنيم.
اينجوري حتي اگه ديتابيس دست كسي بيوفته نميتونه به سادگي پسورد يوزر ها رو بدست بياره.
اما مورد مهمتر sql_injection كه بايد در اينجا رعايت بشه كه قبلا چكيده اي ازش صحبت كرديم : www.webhostingtalk.ir/f148/16193/
سپاس