همچنان منتظریم . . .
همچنان منتظریم . . .
سلام
hi . علیکم . سلام . hello . درود و ... ( نام کاربیتون به چند زبان زنده دنیا ! )
خوبی عزیز ....
یه عالمه برنامه نویسی براتون دارم اگر می تونید حتما با چت : آی دی من : takhoster
پولش رو هم بهتون می دیم ، اگر هم اسرار کردی پول نمی گیری خوب ما هم پول نمی دیم
با تشکر فراوان
میزبانی هاست لینوکس و ویندوز | نمایندگی دایرکت ادمین ، سی پنل ، پلسک روی سرورهای ایران
ارائه سرور مجازی از ایران با پهنای باند نامحدود و لایسنس رایگان دایرکت ادمین ، سی پنل ، پلسک
سلام
دوستان ممنون ، لطف داريد.
كاش تاپيك رو بي جهت شلوغ نمي كرديد تا ادامه آموزش رو وقتي نوشتم در ادامه مطالب مي ذاشتم
در مورد كار برنامه نويسي هم مي تونيد تماس بگيريد ولي با تعداد پروژه هاي فعالي كه دارم بعيد مي دونم بتونم قبول كنم.(5 پروژه بزرگ رو دارم انجام ميدم!)
سلام
بالاخره رسيدم سر وقت ادامه آموزش!
خب حالا فرض كنيد قرار هست بيش از يك يا چند كاربر داشته باشيم،و عضو گيري هم بكنيم در اين صورت بهتر گزينه استفاده از ديتابيس هست
خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
1. شناسه اي منحصر به فرد براي هر عضو
2. نام كاربري
3. رمز عبور
4. نام كاربر
پس ابتدا يك ديتابيس جديد بسازيم :
حالا جدول مورد نيازمونکد:CREATE DATABASE `learn` ;
اگر با دستورات sql آشنايي نداريد هيچ جاي نگراني نيست؛ چون با php my admin و ابزارهاي مشابه مي تونيد اين ضعف رو بهبود ببخشيدکد: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
اندكي توضيح در مورد اين كد
دستور Creat table كه از نامش مشخصه يك جدول ايجاد مي كنه!
`learn`.`user`
در اينجا learn نام ديتابيس و user نام جدول ما هست. مي تونيم از به كاربردن كلمه learn كه اسم ديتابيس هست صرف نظر كنيم البته در صورتي كه در برنامه همزمان با بيش از يك ديتابيس در ارتباط نباشيم.
id همون شناسه كاربر هست كه از نوع عدد صحيح و حداكثر 10 رقمي تعريفش كردم
در خصوصيت اين شناسه و موارد بعدي NOT NULL زدم يعني مقدار اين فيلد ها نبايد تهي باشد
شناسه خاصيت مهمي داره به نام AUTO_INCREMENT كه براي فيلد ها اصلي و عددي استفاده ميشه
در واقع به ازاي هر كاربر جديدي كه به ديتابيس اضافه مي كنيم اين فيلد به صورت خودكار يك واحد براي اون كاربر افزايش پيدا مي كنه
COLLATE جدول رو هم utf گذاشتم تا از utf پشتيباني بشه!
--
خب حالا بريم سر وقت كد نويسي
فايل config.php
اين فايل براي اتصال به ديتابيس استفاده شده كه در ادامه توضيح ميدم:
تابع mysql_connect رو چند باري توضيح دادم پس نقل قول ميزنم:کد 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_select_db : ديتابيس شما را با توجه به اطلاعات داده شده در مرحله قبل انتخاب مي کند تا بتواني عملياتي مانند نوشتن،خواندن،حذف و ... را انجام بديد.
فكر نكنم اين بخش كد چيز خاصي داشته باشه
فرم ثبت نام:
فرم خيلي ساده نوشته شده ؛ فقط قسمت هاي action و method و name رو دقت كنيد كه بعدا ازشون استفاده مي شه در برنامه.کد 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>
عضو گيري - فايل signup.php
در خط 2 فايل اتصال به ديتابيس رو لود كردم، درواقع اين تنظيمات رو در يك فايل ديگه نوشتم تا هر بار و در هر بخش مجبور به تكرارش نباشيمکد 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!";
?>
در خط 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
---------- Post added at 10:51 AM ---------- Previous post was at 10:46 AM ----------
ممنون ، یه سوال :
این کدها رو باید داخل php myadmin گذاشت کجاش ؟ چه جوری ؟
یا باید این فیلدها رو دونه دونه ساخت ؟
میشه اینها رو داخل یه فایل txt ذخیره کرد و بعد Import کرد ؟
---------- Post added at 11:44 AM ---------- Previous post was at 10:51 AM ----------
من ان کار ها رو انجام دادم ، ثبت نام با موفقیت انجام میشه . اما وارد نمیشه !!! ( هنگام ورود با پیغام wrong username/password! مواجه میشم !
ویرایش توسط alisc : September 1st, 2010 در ساعت 11:54
سلام
خواهش مي كنم
دستورات sql رو ميتونيد در phpmyadmin از تب sql وارد كنيد يا اينكه به صورت فايلا ذخيره و import كنيد.
در مورد مشكل ورود،بعد از عضويت به phpmyadmin بريد ، ديتابيس و سپس جدول رو انتخاب و browse رو بزنيد و ببينيد آيا يوزر ايجاد شده يا نه؟
با احترام،
بطور کلیphp به دو روش بر روی سرویس دهنده وب قابل نصب است. در روش اول php به صورت CGI و در روش دوم هم به صورت ماجول های ثابت یا پویا نصب می گردد.
مفاهیم CGI و ماجول های ثابت یا پویا برایم غیر قابل فهم می باشد.؟
میشه کاری کرد که کاربر بعد از ثبت نام براش یه ایمیل ارسال بشه ! ( به صورت اتوماتیک )
---------- Post added at 02:47 PM ---------- Previous post was at 02:06 PM ----------
بله یوزر با موفقیت ایجاد میشه و داخل دیتابیس هم مشخصاتش هست فقط هنگام ورود با پیغام Please Login/register روبه رو می شوم !
مشکل کجاست ؟
@rezamahmodi : جواب سوالتون رو نمي دونم متاسفانه ، تو سايت هاي خاجي زيادي مي چزخم و مفاهيمي رو كه دنبالشون هستم رو هميشه از اونجا پيدا مي كنم، اگه در مورد سوالتون بيشتر توضيح بديد و اصطلاحات انگليسي رو كامل بذاريد مي تونم بگردم. يا هم اگر دوست ديگه اي در اين زمينه اطلاعات داشت راهنمايي كنه.
@alisc : ْآموزش رو هنوز قصد دارم ادامه بدم، اين مورد رو هم انشالله توضيح مي دم.با تابع mail ميشه:
PHP: mail - Manual
بله ، يك اشتباه در كد دارم ! در فايل index.php فايلي كه گذاشتم يادم رفته ر خط دوم session_start رو به كار بگيرم...
در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)