آموزش مفیدی بود
متشکرم
نمایش نسخه قابل چاپ
آموزش مفیدی بود
متشکرم
سلام
در ادامه آموزش قصد دارم به آموزش ساخت پروفايل يا صفحات شخصي براي هر كاربر بپردازيم.
گريزي به آخرين مطلب بخش آموزش :
قسمت بولد شده رو توجه كنيد.نقل قول:
خب يك جدول خيلي ساده براي اعضا در نظر مي گيرم
1. شناسه اي منحصر به فرد براي هر عضو
2. نام كاربري
3. رمز عبور
4. نام كاربر
در واقع ما براي هر كاربر يك شناسه در نظر مي گيريم و اين شناسه منحصر به فرد هست
درست مانند شماره دانشجويي هر دانشجو
وجود اين id اختصاصي باعث ميشه ما در جداول خودمون بتونيم به جاي تكرار مكرر نام كاربري يك كاربر خودداري كنيم
مثلا اگر به همين اسكريپت قرار باشه يك جدول براي ارسال مطلب اضافه كنيم نيازي نيست در جدول نام كاربري نويسنده رو ذخيره كنيم و فقط كافيست شناسه كاربر رو ذخيره كنيم
اين كار باعث ميشه از تكرار عمدي يا اجتناب ناپذير جلوگيري بشه
و عمليات ويرايش راحت تر صورت بگيره
(البته من يك استفاده ساده و كلي رو بازبان خودم گفتم و در عمل و اصول استفاده مهم تري هم دارد.)
البته اين برنامه نويس هست كه بايد تشخيص در چه جايي تكرار مفيد هست و در چه جايي خير
براي مثال در mybb به خاطر شرايط يك انجمن ، در جدول تاپيك هم نام كاربري و آي دي كاربر هر دو باهم ذخيره مي شوند!
خب به جاي حاشيه پردازي كد profile.php رو ميسازيم :
خط اول : آغاز تگ 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'];
?>
خط دوم : دستور session_start جهت ايجاد سشن آي دي جديد در صورت عدم وجو يا استفاده از سشن هاي موجود
خط سوم : بررسي صحت وجود سشن نام كاربري
خط چهارم : خروج اجباري از برنامه و نمايش خطا در صورت صحيح بودن شرط خط دوم (لوگين نبودن(
خط پنجم : نمايش يك پيغام - از اين خط به بعد ظاهرا كاربر لوگين كرده كرده است
خط ششم : نمايش نام كاربري كاربر
خط هفتم : انتساب مقدار موجود در سشن نام كاربري به يك متغير براي راحتي استفاده در خط بعدي
خط هشتم : يك كوئري - ترجمه فارسي كوئري :
انتخاب كن تمام فيلد هاي جدول (همان ستاره) را از جدول user كه فيلد user در آن برابر متغير username ميباشد و حداكثر يك ركورد را انتخاب كن
خط دهم : اجراي كوئري خط بالا
خط يازدهم : تابع mysql_num_rows ورودي اجباري اي دارد كه همان متغيري است كه به mysq_query انتساب داديم
اين تابع تعداد ركورد هاي انتخاب شده رو براي ما نشون ميده و اگر كوئري درست نباشه يك عدد منفي رو بر مي گردونه
بنابراين در اين خطا و خط بعدي چك مي كنيم اگه نتيجه اگر صفر يا منفي بود يعني چنين كاربري در ديتابيس وجود ندارد
مثلا ممكنه بعد از لوگين مدير كاربر رو از ليست حذف كرده باشه يا سشن جعلي باشه
بنابراين با يك بررسي ساده ميتونيم اين موضوع رو تشخصي بديم
در خط بعدي تابع mysql_fetch_array رو داريم
توصيه اكيد مي كنم اگر ميخواهيد كاركر اين تابع رو به درستي درك كنيد ابتدا چند كاربر بسازيد و سپس كد زير رو در زير خط جاري وارد كنيد و. نتيجه رو براي هر كاربر بررسي كنيد
پ.ن : اين تابع رو قبلا و با ذكر همين نكته در پست : http://www.webhostingtalk.ir/f148/14...tml#post142185 توضيح دادمکد PHP:
print_r($data);
خب اين قسمت از آموزش مقدمه اي بر اصل مطلب بود
تا آخر هفته براي تكميل موضوع، قسمت ارسال مطلب توسط كاربران رو هم اضافه مي كنيم.
براحتي با همين كدهاي ساده ميتونيم امكاناتي مثل محدوديت دانلود براي كاربران يا كاربران خاص و از اين قبيل فراهم كنيم.
پ.ن مهم : باز هم تاكيد مي كنم فعلا نكات امنيتي رو در نظر نمي گيريم.
پ.ن 2 : لوكال سيستمم قطع بود ، كد رو تست نكردم ، اگر مشكلي گذارش بديد لطفا.
قسمت بعدي رو كامل تر و عملي تر مي نويسم.:67:
سپاس
مجموع فايل ها تا الان در قالب يك فايل زيپ
سلام میشه یه راهنمایی در مورد فارسی کردن تیبلها بکنید؟
یاکد 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;
ممنون
سلام
ممنون از آموزش عالی تون!
حالا این فرم لاگین و ... از امنیت کامل برخوردار هست؟؟؟
ممنون میشم امنیتش رو باهم کامل کنیم! جهت آموزش و یادگیری
مثلا کد کردن پسورد و ...
با تشکر
سعي مي كنم تا فردا شب بذارم
md5 يك الگوريتم برگشت ناپذير هست كه يك رشته ورودي رو ميگيره و مقدار 32 كاراكتري و منحصر به فردي رو به ما ميده.
ما به جاي ذخيره كردن پسورد به صورت خام ، اون رو به صورت md5 شده و حتي استفاده از الگوريتم هاي ديگه مثل sha1 استفاده مي كنيم و اين مقدار رو ذخيره مي كنيم.
اينجوري حتي اگه ديتابيس دست كسي بيوفته نميتونه به سادگي پسورد يوزر ها رو بدست بياره.
اما مورد مهمتر sql_injection كه بايد در اينجا رعايت بشه كه قبلا چكيده اي ازش صحبت كرديم : www.webhostingtalk.ir/f148/16193/
سپاس