سلام
بالاخره رسيدم سر وقت ادامه آموزش!
خب حالا فرض كنيد قرار هست بيش از يك يا چند كاربر داشته باشيم،و عضو گيري هم بكنيم در اين صورت بهتر گزينه استفاده از ديتابيس هست
خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
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 شده فايل ها رو هم گذاشتم.
سپاس