شرح كيفية برمجة منتدى مصغر ب php

achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: حزيران 08, 2009, 11:28:21 صباحاً
السلام عليكم ورحمة الله تعالى وبركاته

فى هذا الموضوع يتم شرح كيفية برمجة منتدى مصغر و هذا الشرح مفيد جدا بإذن الله لحديثى العهد بلغة PHP و من أهم فوائد الموضوع شرح كيفية التعامل مع قواعد البيانات و ربط النماذج بالبرمجة و كيفية الدمج بين التصميم والبرمجة

نبدأ ... بسم الله

أولا تحديد الملفات التى سوف يتم كتابتها :

create_topic.php
add_topic.php
main_forum.php
view_topic.php
add_answer.php


ثانيا قاعدة البيانات و بنائها :
فى هذا الدرس سنحتاج فقط إلى جدولين و هما forum_question و forum_answer

و يكون بناءهم بهذا الشكل



[/B]  CREATE TABLE `forum_question` ( 
`
idint(4NOT NULL auto_increment
`
topicvarchar(255NOT NULL default ''
`
detaillongtext NOT NULL
`
namevarchar(65NOT NULL default ''
`
emailvarchar(65NOT NULL default ''
`
datetimevarchar(25NOT NULL default ''
`
viewint(4NOT NULL default '0'
`
replyint(4NOT NULL default '0'
PRIMARY KEY (`id`) 
TYPE=MyISAM AUTO_INCREMENT=

CREATE TABLE `forum_answer` ( 
`
question_idint(4NOT NULL default '0'
`
a_idint(4NOT NULL default '0'
`
a_namevarchar(65NOT NULL default ''
`
a_emailvarchar(65NOT NULL default ''
`
a_answerlongtext NOT NULL
`
a_datetimevarchar(25NOT NULL default ''
KEY `a_id` (`a_id`) 
TYPE=MyISAM;  


بهذا نكون انتهينا من بناء جداول قاعدة البيانات التى سيتم تسجيل المواضيع و الردود بها

يتبع ..



achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: حزيران 08, 2009, 11:30:01 صباحاً
ثالثا البدء فى كتابة الملفات :
ملف create_topic.php
 
و سيظهر فى المتصفح بهذا الشكل :
 

 
 
 
 
[LEFT]<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"
<
tr
<
form id="form1" name="form1" method="post" action="add_topic.php"
<
td
<
table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"
<
tr
<
td colspan="3" bgcolor="#E6E6E6"><strong>Create New Topic</strong> </td
</
tr
<
tr
<
td width="14%"><strong>Topic</strong></td
<
td width="2%">:</td
<
td width="84%"><input name="topic" type="text" id="topic" size="50" /></td
</
tr
<
tr
<
td valign="top"><strong>Detail</strong></td
<
td valign="top">:</td
<
td><textarea name="detail" cols="50" rows="3" id="detail"></textarea></td
</
tr
<
tr
<
td><strong>Name</strong></td
<
td>:</td
<
td><input name="name" type="text" id="name" size="50" /></td
</
tr
<
tr
<
td><strong>Email</strong></td
<
td>:</td
<
td><input name="email" type="text" id="email" size="50" /></td
</
tr
<
tr
<
td> </td
<
td> </td
<
td><input type="submit" name="Submit" value="Submit" /> <input type="reset" name="Submit2" value="Reset" /></td
</
tr
</
table
</
td
</
form
</
tr
</
table> [/LEFT]

 


و كود هذا الملف بسيط و هو عبارة عن نموذج إرسال عادى و لا يوجد به برمجة
 
يتبع ..


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: حزيران 08, 2009, 11:32:30 صباحاً
كتابة الملف add_topic.php :


و هذا الملف هو المسؤول عن نقل البيانات من صفحة كتابة الموضوع إلى جدول forum_question فى قاعدة البيانات و لا يظهر منه فى المتصفح شئ سوى رسالة تأكيد حفظ البيانات فى حالة نجاح حفظ البيانات او رسالة خطأ فى حالة حدوث خطأ
 


 
<?php 
$host
="localhost"// اسم المزود  
$username=""// اسم مستخدم قاعدة البيانات  
$password=""// كلمة سر قاعدة البيانات  
$db_name="test"// اسم قاعدة البيانات 
$tbl_name="forum_question"// اسم الجدول  

//الأتصال بقاعدة البيانات  
mysql_connect("$host""$username""$password")or die("فشل الاتصال بقاعدة البيانات");  
mysql_select_db("$db_name")or die("فشل الاتصال بقاعدة البيانات"); 

$datetime=date("d/m/y h:i:s"); //تحديد تاريخ حفظ الموضوع  
$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')"
$result=mysql_query($sql); 

if(
$result){ 
echo 
" تم حفظ الموضوع بنجاح<BR>"
echo 
"<a href=main_forum.php>العودة إلى الصفحة الرئيسية</a>"

else { 
echo 
"خطأ"

mysql_close(); 
?> 

 
تحليل أكواد الملف بالتفصيل :
 

 
$host
="localhost"// اسم المزود  
$username=""// اسم مستخدم قاعدة البيانات  
$password=""// كلمة سر قاعدة البيانات  
$db_name="test"// اسم قاعدة البيانات 
$tbl_name="forum_question"// اسم الجدول  


هذا الجزء هو الخاص بتحديد متغيرات سنستخدما فى الإتصال بقاعدة البيانات و كل متغير أمامه تعليق يوضح البيانات التى يحتوى عليها كل متغير

 


 
//الأتصال بقاعدة البيانات  
mysql_connect("$host""$username""$password")or die("فشل الاتصال بقاعدة البيانات");  
mysql_select_db("$db_name")or die("فشل الاتصال بقاعدة البيانات");  


فى هذا الجزء يتم الإتصال بقاعدة البيانات باستخدام المتغيرات السابقة .. فى البداية يتم الاتصال بمزود قواعد البيانات باستخدام الدالة mysql_connect ثم بعد ذلك تحديد قاعدة البيانات باستخدام دالة mysql_select_db


  $datetime=date("d/m/y h:i:s"); //تحديد تاريخ حفظ الموضوع  


فى هذا الجزء تم استخدام دالة date و ذلك لتحديد الوقت الذى تم حفظ الموضوع فيه لتسجيل ذلك فى بيانات الموضوع




  $sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')"
$result=mysql_query($sql);  

 
فى هذا الجزء يتم استخدام أوامر Sql من اجل حفظ البيانات فى جدول forum_question .. تم حفظ أولا امر ال Sql فى متغير ثم استخدام هذا المتغير فى دالة mysql_query لتنفيذه




  if($result){ 
echo 
" تم حفظ الموضوع بنجاح<BR>"
echo 
"<a href=main_forum.php>العودة إلى الصفحة الرئيسية</a>"

else { 
echo 
"خطأ"
}  


تم استخدام اداة الشرط if و ذلك للتحقق من ان امر Sql قد تم تنفيذه ام لا و يتم اعطاء رسالة نجاح أو خطأ




  mysql_close();  


و أخيرا هذه الدالة التى تغلق الاتصال بقاعدة البيانات و هى خطوة مهمة جدا لأن ترك الاتصال مفتوحا دون غلق يكون عبئا على ذاكرة السيرفر

و بهذا نكون انتهينا من كتابة هذا الملف

يتبع ..


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: حزيران 08, 2009, 11:36:37 صباحاً
كتابة ملف main_forum.php :

هذا الملف هو المسئول عن عرض قائمة المواضيع المخزنة فى قاعدة البيانات و النموذج التالى يوضح الملف أكثر





كود الملف بالكامل


  <?php 
$host
="localhost"// المزود  
$username=""// اسم المستخدم  
$password=""// كلمة المرور 
$db_name="test"// اسم قاعدة البيانات  
$tbl_name="forum_question"// اسم الجدول 

// الاتصال بقاعدة البيانات 
mysql_connect("$host""$username""$password")or die("فشل الاتصال بالمزود");  
mysql_select_db("$db_name")or die("فشل تحديد قاعدة البيانات"); 

$sql="SELECT * FROM $tbl_name ORDER BY id DESC"
// OREDER BY id DESC is order result by descending  
$result=mysql_query($sql); 
?> 
<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"> 
<tr> 
<td width="6%" align="center" bgcolor="#E6E6E6"><strong>#</strong></td> 
<td width="53%" align="center" bgcolor="#E6E6E6"><strong>الموضوع</strong></td> 
<td width="15%" align="center" bgcolor="#E6E6E6"><strong>الزيارات</strong></td> 
<td width="13%" align="center" bgcolor="#E6E6E6"><strong>الردود</strong></td> 
<td width="13%" align="center" bgcolor="#E6E6E6"><strong>التاريخ</strong></td> 
</tr> 

<?php 
while($rows=mysql_fetch_array($result)){ // بدايةحلقة التكرار 
?> 
<tr> 
<td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td> 
<td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a><BR></td> 
<td align="center" bgcolor="#FFFFFF"><? echo $rows['view']; ?></td> 
<td align="center" bgcolor="#FFFFFF"><? echo $rows['reply']; ?></td> 
<td align="center" bgcolor="#FFFFFF"><? echo $rows['datetime']; ?></td> 
</tr> 

<?php 
// نهاية حلقة التكرار  

mysql_close(); 
?> 
<tr> 
<td colspan="5" align="right" bgcolor="#E6E6E6"><a href="create_topic.php"><strong>اضافة موضوع جديد </a></td> 
</tr> 
</table> 

توضيح الأكواد بالتفصيل

 
 
<?php 
$host
="localhost"// المزود  
$username=""// اسم المستخدم  
$password=""// كلمة المرور 
$db_name="test"// اسم قاعدة البيانات  
$tbl_name="forum_question"// اسم الجدول 

// الاتصال بقاعدة البيانات 
mysql_connect("$host""$username""$password")or die("فشل الاتصال بالمزود");  
mysql_select_db("$db_name")or die("فشل تحديد قاعدة البيانات"); 

$sql="SELECT * FROM $tbl_name ORDER BY id DESC"
// OREDER BY id DESC is order result by descending  
$result=mysql_query($sql); 
?> 

 
هذا الجزء تم شرحه من قبل و هو الجزء الخاص بالاتصال بقاعدة البيانات و تنفيذ الاستعلام Query



  <table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC"
<
tr
<
td width="6%" align="center" bgcolor="#E6E6E6"><strong>#</strong></td> 
<td width="53%" align="center" bgcolor="#E6E6E6"><strong>الموضوع</strong></td
<
td width="15%" align="center" bgcolor="#E6E6E6"><strong>الزيارات</strong></td
<
td width="13%" align="center" bgcolor="#E6E6E6"><strong>الردود</strong></td
<
td width="13%" align="center" bgcolor="#E6E6E6"><strong>التاريخ</strong></td
</
tr>  

هذا الجزء هو الخاص برأس الجدول الذى سيظهر فيه الموضوع و هو كود Html لا يوجد به اى برمجة


رمز PHP
:<?php 
while($rows=mysql_fetch_array($result)){ // بدايةحلقة التكرار 
?> 
<tr> 
<td bgcolor="#FFFFFF"><? echo $rows['id']; ?></td> 
<td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a><BR></td> 
<td align="center" bgcolor="#FFFFFF"><? echo $rows['view']; ?></td> 
<td align="center" bgcolor="#FFFFFF"><? echo $rows['reply']; ?></td> 
<td align="center" bgcolor="#FFFFFF"><? echo $rows['datetime']; ?></td> 
</tr> 

<?php 
// نهاية حلقة التكرار  

mysql_close(); 
?> 

 
فى هذا الجزء تكون حلقة التكرار المسئولة عن تكرار الأوامر الخاصة بعرض المواضيع اسفل بعضها البعض باستخدام mysql_fetch_array و هذه الدالة تقوم بإدخال نتائج الاستعلام من قاعدة البيانات فى مصفوفة و يتم تكرار الاوامر مع كل موضوع حتى يصل الى اخر موضوع
هذا الجزء يجمع بين لغة html و ال php مثل هذا السطر




  <td bgcolor="#FFFFFF"><a href="view_topic.php?id=<? echo $rows['id']; ?>"><? echo $rows['topic']; ?></a><BR></td> 

هنا نجد انه باستخدام ال html صنعنا وصلة و فى نهاية الوصلة تم اضافة



  <? echo $rows['id']; ?> 
 
لإدخال ناتج من نتائج الاستعلام من قواعد البيانات فى نهاية الرابط لتصبح فى النهاية بهذا الشكل



view_topic.php?id=#  

 

مع مراعاة ان # فى هذا الشرح هى رقم الموضوع

ثم فى اغلقنا حلقة التكرار و الاتصال بقاعدة البيانات فى النهاية



  <tr
<
td colspan="5" align="right" bgcolor="#E6E6E6"><a href="create_topic.php"><strong>اضافة موضوع جديد </a></td
</
tr
</
table>  

هذا الجزء هو نهاية جدول عرض المنتديات و تم وضع رابط اضافة موضوع جديد به و هو ليس به اى برمجة مجرد تصميم فقط

و بهذا نكون انتهينا من كتابة هذا الملف

يتبع ..


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: حزيران 08, 2009, 11:39:54 صباحاً


achraf.mouni

  • Hero Member
  • *****
    • مشاركة: 2439
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: حزيران 08, 2009, 11:42:35 صباحاً
كتابة ملف add_answer.php :

هذا الملف يقوم بحفظ الردود الجديدة لا يظهر فى المتصفح منه الا رسالة تأكيد حفظ الرد او رسالة خطأ

كود الملف :
 


 
<?php 
$host
="localhost"// Host name  
$username=""// Mysql username  
$password=""// Mysql password  
$db_name="test"// Database name  
$tbl_name="forum_answer"// Table name  

// Connect to server and select databse. 
mysql_connect("$host""$username""$password")or die("cannot connect");  
mysql_select_db("$db_name")or die("cannot select DB"); 

$datetime=date("d/m/y H:i:s"); 

// Find highest answer number.  
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'"
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 

// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1  
if ($rows) { 
$Max_id $rows['Maxa_id']+1

else { 
$Max_id 1


// Insert answer  
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')"
$result2=mysql_query($sql2); 

if(
$result2){ 
echo 
"Successful<BR>"
echo 
"<a href='view_topic.php?id=".$id."'>View your answer</a>"

// If added new answer, add value +1 in reply column  
$tbl_name2="forum_question"
$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'"
$result3=mysql_query($sql3); 


else { 
echo 
"ERROR"


mysql_close(); 
?> 


 
تفصيل الكود :

 

 
 $host
="localhost"// Host name  
$username=""// Mysql username  
$password=""// Mysql password  
$db_name="test"// Database name  
$tbl_name="forum_answer"// Table name  

// Connect to server and select databse. 
mysql_connect("$host""$username""$password")or die("cannot connect");  
mysql_select_db("$db_name")or die("cannot select DB"); 

$datetime=date("d/m/y H:i:s");  

 

 
جزء خاص بالاتصال بقاعدة البيانات و تحديد تاريخ حفظ الرد

 


 
// Find highest answer number.  
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'"
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 
// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1  
if ($rows) { 
$Max_id $rows['Maxa_id']+1

else { 
$Max_id 1


// Insert answer  
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')"
$result2=mysql_query($sql2);  


هذا الجزء يقوم بتحديد رقم اخر رد فى هذا الموضوع و هنا يأتى دور دالة الشرط if فاذا كان هناك ردود سابقة يضيف رقم 1 الى رقم اخر رد و يحفظها فى متغير Max_id اما اذا كان هذا اول رد يجعل قيمة max_id = 1 بعد ذلك تأتى اوامر sql لحفظ البيانات الجديدة الخاصة بالرد
 
 
if($result2){ 
echo 
"Successful<BR>"
echo 
"<a href='view_topic.php?id=".$id."'>View your answer</a>"

// If added new answer, add value +1 in reply column  
$tbl_name2="forum_question"
$sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'"
$result3=mysql_query($sql3); 


else { 
echo 
"ERROR"


mysql_close(); 
?>  


فى هذا الجزء يتم التحقق من ان البيانات تم حفظها و يأتى برسالة تأكيد حفظ البيانات اما فى حالة الخطأ يظهر رسالة خطأ .. بالاضافة الى امر sql يقوم بتعديل رقم الرد .. ثم فى النهاية دالة اغلاق الاتصال بقاعدة البيانات

تم الانتهاء من كتابة هذا الملف


يوسف الضادي

  • Hero Member
  • *****
    • مشاركة: 5333
    • مشاهدة الملف الشخصي
    • http://www.sou9dz.com
    • البريد الالكتروني
رد #6 في: حزيران 08, 2009, 12:03:43 مسائاً
بارك الله فيك أخي
شرح مميز من عند مشرف مميز
تحياتي البرمجية اليك


نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: حزيران 08, 2009, 08:56:49 مسائاً
مقتبس من: achraf.mouni;273832
السلام عليكم ورحمة الله تعالى وبركاته

فى هذا الموضوع يتم شرح كيفية برمجة منتدى مصغر و هذا الشرح مفيد جدا بإذن الله لحديثى العهد بلغة PHP و من أهم فوائد الموضوع شرح كيفية التعامل مع قواعد البيانات و ربط النماذج بالبرمجة و كيفية الدمج بين التصميم والبرمجة

نبدأ ... بسم الله

أولا تحديد الملفات التى سوف يتم كتابتها :

create_topic.php
add_topic.php
main_forum.php
view_topic.php
add_answer.php


ثانيا قاعدة البيانات و بنائها :
فى هذا الدرس سنحتاج فقط إلى جدولين و هما forum_question و forum_answer

و يكون بناءهم بهذا الشكل



  CREATE TABLE `forum_question` ( 
`
idint(4NOT NULL auto_increment
`
topicvarchar(255NOT NULL default ''
`
detaillongtext NOT NULL
`
namevarchar(65NOT NULL default ''
`
emailvarchar(65NOT NULL default ''
`
datetimevarchar(25NOT NULL default ''
`
viewint(4NOT NULL default '0'
`
replyint(4NOT NULL default '0'
PRIMARY KEY (`id`) 
TYPE=MyISAM AUTO_INCREMENT=

CREATE TABLE `forum_answer` ( 
`
question_idint(4NOT NULL default '0'
`
a_idint(4NOT NULL default '0'
`
a_namevarchar(65NOT NULL default ''
`
a_emailvarchar(65NOT NULL default ''
`
a_answerlongtext NOT NULL
`
a_datetimevarchar(25NOT NULL default ''
KEY `a_id` (`a_id`) 
TYPE=MyISAM;  

بهذا نكون انتهينا من بناء جداول قاعدة البيانات التى سيتم تسجيل المواضيع و الردود بها

يتبع ..

عندى اضافة
لازم نكتبو هكذا


<?php 
         $id
=mysql_connect("localhost","root","");
         
mysql_select_db("test",$id);


  

     
$q6=mysql_query(" CREATE TABLE `forum_question` (
      `id` int(4) NOT NULL auto_increment,
      `topic` varchar(255) NOT NULL default '',
     `detail` longtext NOT NULL,
      `name` varchar(65) NOT NULL default '',
      `email` varchar(65) NOT NULL default '',
      `datetime` varchar(25) NOT NULL default '',
       `view` int(4) NOT NULL default '0',
       `reply` int(4) NOT NULL default '0',
        PRIMARY KEY (`id`)
          ) TYPE=MyISAM AUTO_INCREMENT=1 ;"
);
           
$n6=mysql_query($q6,$id);
 
         
$q7=mysql_query("CREATE TABLE `forum_answer` (
           `question_id` int(4) NOT NULL default '0',
            `a_id` int(4) NOT NULL default '0',
             `a_name` varchar(65) NOT NULL default '',
              `a_email` varchar(65) NOT NULL default '',
               `a_answer` longtext NOT NULL,
                `a_datetime` varchar(25) NOT NULL default '',
                 KEY `a_id` (`a_id`)
                 ) TYPE=MyISAM;"
);
           
$n7=mysql_query($q7,$id);
  
  
  
  
?>

و نخزن في ملف .php
ولازم ننشئ base
فارغة و نسميها
test


إحساس حساس

  • Hero Member
  • *****
    • مشاركة: 2303
    • مشاهدة الملف الشخصي
    • http://ashab-4ever.yoo7.com/index.htm
    • البريد الالكتروني
رد #8 في: حزيران 08, 2009, 09:11:19 مسائاً
شرح رائع
مشكور


khelef

  • Hero Member
  • *****
    • مشاركة: 1023
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #9 في: تـمـوز 10, 2009, 09:46:57 مسائاً
شـكــ وبارك الله فيك ـــرا لك
لكن اريد ان تفصل قليلا في الشرح اعني الخطوات كتابة الكود في الدريم ويفر


The Ghoost

  • Newbie
  • *
    • مشاركة: 18
    • مشاهدة الملف الشخصي
    • http://aboubaker.info/
    • البريد الالكتروني
رد #10 في: تشرين الأول 20, 2009, 08:17:20 مسائاً
مشكور أخي على الشرح الرائع

ممكن ترفق المشروع مع الدرس يكون أفضل لأني أخطأت كم من مرة في التجربة


lila88

  • Full Member
  • ***
    • مشاركة: 164
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #11 في: شباط 18, 2010, 08:59:24 صباحاً
أين نكتب هذه الأكواد ؟