آموزش ساخت سيستم وبلاگ دهي - قسمت دوم
و بالاخره قسمت دوم آموزش!ببخشيد دير شد ولي نخواستم با عجله و سريع باشه...
در بخش قبل پايگاه داده رو ايجاد كرديم،در اين قسمت آغاز به شروع كد نويسي مي كنيم.البته شخصا ترجيح ميدم براي ارتباط با پايگاه داده از كلاس هايي كه قبلا نوشتم يا نوشته شده استفاده كنم اما به دليل اهميت آموزش از دستورات و توابع پيش فرض استفاده مي كنم.
مزيت استفاده از كلاس هاي آماده و حرفه اي اين هست كه تا حدود زيادي كار كد نويسي رو آسون مي كنه و به علاوه در اكثر اين كلاس كوئري ها قبل ارسال چك ميشوند و از لحاظ امنيتي مشكلي براي سيستم پيش نمياد.
بذاريد كليت سيستم رو اينجوري خلاصه كنم.ابتدا ما سرور رو طوري تنظيم مي كنيم كه درخواست هاي ساب دومين به صورت زير تبديل بشند.(منظورم همون ساب دومين مجازي هست.)
blogname.domain.com = > domain.com/blog.php?user=blogname
نحوه انجام اين كار رو بعدا توضيح مي دم (هر چند قبلا در انجمن به دفعات ذكر شده!) ، و لزوما هم نياز به سرور اختصاصي نيست و با هاست اشتراكي هم ميشه اين كار رو كرد به خصوص اگه سي پنل نصب باشه كه ا ز همه آسون تر هست.
پس تا اينجا ما username رو به برنامه ارسال مي كنيم، از اينجاست كه كار برنامه نويسي ما آغاز ميشه.
حالا در برنامه usernmer رو داريم و اطلاعاتي از ديتابيس رو بيرون ميكشيم كه مربوط به اين يوزر باشه و نمايش ميديم...
---
شروع كد نويسي:
از بخش تنظيمات اتصال به ديتابيس شروع مي كنم. براي اتصال به ديتابيس بايد از تابع mysql_connect استفاده كنيم.
mysql_connect : اين تابع سه آرگومان (ورودي) اجباري مي گيرد که اولي نام هاست،دومي نام کاربري ديتا بيس و سومي کلمه عبور ديتا بيس مي باشد.
mysql_select_db : ديتابيس شما را با توجه به اطلاعات داده شده در مرحله قبل انتخاب مي کند تا بتواني عملياتي مانند نوشتن،خواندن،حذف و ... را انجام بديد.
مثال :
- کد: انتخاب همه
<?php
$hostname='localhost';
$user='root';
$pass='';
$db='miniblog';
$connect = mysql_connect($hostname, $user, $pass);
mysql_select_db($db,$connect) or die ("Could not select database");
?>
اطلاعات بيشتر در مورد اين توابع مثل ورودي هاي اختياري ضرورتي نداره و از روشون مي گذرم.فقط تنها نكته مهم در اينجا تابع mysql_connect هست كه عمليات اتصال ،mysql_select_db انتخاب يك ديتا بيس مي باشد.
نكته امنيتي : در هنگام ايجاد يك ديتابيس در كنترل پنل يا هرجا، و دادن سطح دسترسي به كاربري كه به ديتابيس متصل ميشه دقت كنيد و از دادن اختيارات اضافي به كاربر جز در مرحله install براي ساخت جداول خودداري كنيد...دليل اين كار اينه كه اگر در جايي از برنامه مشكل امنيتي داشته باشيم و كاربر بتونه sql_injection بزنه ، خيلي دست و پاگير تر هست وقتي نتونه index،drop و ... بكنه ...
عموما دادن چهار ويژگي delete,update,insert,select براي يك كاربر كافي هست.
حتي در مورد سيستم هايي كه قرار نيست ديتا توسط كاربر نوشته بشه ، ميتونيم براي بخش كاربري از يك نام كاربري براي اتصال به ديتابيس استفاده كنيد و براي بخش مديريت از يك نام ديگه با سطح دسترسي بيشتر. و حتي اگه بخش مديريت شخصي باشه ميتونيم با htaccess كل بخش مديريت رو رمز گذاري كنيم.
البته رعايت اصول پايه كفايت مي كنه ولي بزرگترين تيم هاي برنامه نويسي دنيا هم تاحالا اشتباهات كوچك و بزرگي داشته اند ...
در بخش تنظيمات من 4 متغير براي تنظيمات ديتابيس اعمال كردم ولي بهتر هست اين تنظيمات به صوت يك آرايه باشند.
بنابراين با توجه به آموزش "لينك آموزش بخش آرايه ها " من كدم رو به صورت زير اصلاح مي كنم:
- کد: انتخاب همه
<?php
$database = array(
'hostname'=>'localhost',
'user'=>'root',
'pass'=>'mysql',
'db'=>'miniblog',
);
$connect = mysql_connect($database['hostname'], $database[' user'], $database['pass']);
mysql_select_db($$database['db'],$connect) or die ("Could not select database");
?>
فايل زبان:
يكي ازمشكلات برخي از editor ها،پشتيباني نكردن از UTF هست.مدتي editor محبوب من از UTF پشتيباني نمي كرد(ورژن هاي اوليه) و من رو مجبور كرد كلا فارسي نويسي رو در PHP كنار بگذارم و فايل زبان ايجاد كنم!
ايجاد يك فايل زبان به ما اين امكان رو مي ده كه در آينده به راحتي پيغام ها رو عوض كنيم،با مشكلات UTF در editor هاي تحت ويندوزو يا كنترل پنل و ... كنار بيايم...در واقع كافي هست يك فايل رو UTF ذخيره كنيم و در بيقه جاها استفاده كنيم.
بعلاوه ما اين امكان رو داريم كه براحتي سيستممون رو با افزودن چند خط كد چند زبانه كنيم.
در اينجا فايل زبان رو با آرايه و به صورت زير تعريف م كنم و بعدا هر زمان كه بخوايم محتوياتش رو طول آموزش مي نويسيم.
- کد: انتخاب همه
<?php
//lang.fa.php
$lang = array(
'done'=>'عمليات با موفقيت انجام شد.',
'blog_created'=>'وبلاگ شما با موفقيت ايجاد شد.',
);
?>
جدا بودن PHP از HTML:
شخصا اصلا دوست ندارم در كدهاي PHP از HTML استفاده كنم! سختي در ويرايش،عيب يابي ، تعويض قالب،سر در گمي در طول نوشتن برنامه،احتمال بروز خطا و اشتباه،ناخوانا شدن كد و ... از مشكلات استفاده تركيبي از اين دو در يك برنامه هست!
كلاس ها و برنامه هاي متعددي براي اين كار نوشته شده اند ولي در اينجا من كلاسي كه خودم هميشه ازش استفاده مي كنم،رو به كار مي برم.
البته به توضيح اين كلاس نمي پردازم چون سطح ش بالاتر از آموزش هست و فقط از اون استفاده مي كنيم!ولي به تدريج كه جلوتر رفتيم در بخش نمايش وبلاگ با توجه به تگ گذاري خودمون كدها رو مي نويسيم و يك كلاس جديد براي نمايش قالب وبلاگ و درج محتوا در اون مي نويسم.
اين بخش رو بزودي ارسال مي كنم.(زودتر از اين قسمت

)
در مراحل ابتدايي آموزش مجبور هستم بيشتر حرف بزنم تا كد نويسي...ولي خب براي راه افتادن پروژه لازم هست...بزودي آموزش هاي جانبي مانند توابع مورد نياز مانند mail،انواع كوئري ها رو هم در اين بخش ارسال مي كنم(اگر قبلا ارسال نشده باشند!) تا مقدمات كار وجود داشته باشه...
سپاس
رضا جان من متوجه نشدم
ميشه بگي نوشتن به صورت ارايه چه فايده اي داره ؟
يعني از نظر امنيتي
چون مطلبت رو درست نفهميدم
به نظرم اگر كمي سطح آموزش بالاتر باشه بهتره
چون اين مسائل ديگه ميشه آموزش پايه براي php مثل متصل شدن به ديتا بيس
براي اين بخش فقط ميتونستي بگي از ارايه استفاده كنيم و دليل استفادش (بگو اگر بلدي چرا خودت نمي نوشتي D: )
البته من فكر خودمو ميكنم شايد دوستان مشكل داشته باشن
ولي اينجوري خيلي كند پيش ميره
سلام
نميدونم شايد منظورم رو بد رسونده باشم...
ببين بهتره كار منسجم و دسته بندي شده باشه
حتي در راش جديد چون فايل زبانش مثل يك طومار دراز شده من دسته بني كردم و مثلا بخش پركاربردي خودش يك آرايه جدا در داخل آرايه اصلي داره ...
در مورد تنظيمات ديتابيس من نظرم اين هست كه تمام اطلاعات مربوط به ديتابيس توي يك متغير باشند،هم منسجم تر هس،هم بهتر و هم درصد خطا در استفاده از متغير هم نام و موارد مشابه كمتر...
اولش كند پيش ميره ولي وقتي كلاس قالب،رو هم تموم كنم و مقدمات ديتابيس رو بگم ديگه مثل باد ميشه حركت كرد

درسته اينها رو مي دونيد خيليهاتون ولي هستند كساني كه ميخوان تازه شروع كنند ...
بهر حال هر چي جلوتر بريم من سعي مي كنم بهتر، و پيشرفته تر بگم...البته شما هام بايد اشتباهاتم رو اصلاح كنيد
