الجزء الأخير من درس عمل سكربت مقالات 3

الناقل : elmasry | الكاتب الأصلى : feras007 | المصدر : www.arabteam2000-forum.com

بسم الله الرحمن الرحيم :
الآن سنبدأ بالجزء الثالث والأخير من مشروعنا وسيتم فيه :
1- برمجة ملف reply.php
2- إكمال برمجة ملف admin.php
والآن سنبدأ مع ملف reply.php !
في الحقيقة ملف reply.php سهل جداً جداً ! إذا كنت قد فهمت مابرمجناه في ملف admin فستجد كل شيء سهل هنا !
نبدأ بالكود التالي :

<html dir="rtl">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<body bgcolor="#E0DFE3">

كما في العادة أول سطر نحدد فيه جهة الصفحة وهو من اليمين إلى اليسار ! وفي السطر الثاني الترمزي الخاص بالغة العربية ! والسطر الأخير
خاص بلون الخلفية !
والآن بعدها نضيف الكود التالي :

<?
include('config.php');
$thread = intval($_GET['id']);
if ($_GET['add'] ==1){

أول سطر قُمنا بفتح وسم PHP ! وفي السطر الثاني ! قمنا بتضمين ملف config.php ! لأننا سنتصل بقاعدة البيانات !
والسطر الثالث قمت بتعريف المتغير thread على أنه قيمة المتغير id الذي سيأخذه من شريط العنوان ولاننسى أننا استخدمنا inval
لكي يعيد لنا قيمة المتغير نفسه !
في السطر الأخير بدأ عملنا وهو لو أن قيمة المتغير add تساوي 1 فسيقوم بعمل معين !
وبعده نضيف هذا الكود :

$select = "SELECT * FROM thread WHERE id='" . $thread . "'";
$squery = MYSQL_QUERY($select);
$srow = mysql_fetch_array($squery);
?>
<form method="POST" dir="rtl" action="reply.php?add=2&id=<? echo $thread; ?>">
<p align="center"><font face="Tahoma" color="#FF0000"><b> الرد على
<span lang="en-us">[<? echo $srow['title']; ?>]</span></b></font></p>
<p align="center"><font color="#008000" face="Tahoma">
<font size="2"><span lang="en-us">
 </span>الاسم : </font>
<input type="text" name="T1" size="32" ?></font></p>
<p align="center"><font face="Tahoma"><font size="2" color="#008000">النص :
</font><font color="#008000"><textarea rows="17" name="S1" cols="53"></textarea></font></font></p>
<p align="center"><input type="submit" value="ارسل الرد" name="B1"><input type="reset" value="مسح الحقول" name="B2"></p>
</form>
<?
}

في السطر الأول نقوم باختيار الحقل المرافق الذي ال id الخاص به في قاعدة البيانات يساوي للمتغير thread والذي يرمز للموضوع !
في السطر الثاني كما اتفقنا سابقاً الدالة SELECT & INSERT تحتاج لوسيط واستخدمناه هنا ! في السطر الثالث كما اتفقنا أيضاً دالة
mysql_fetch_array تٌخرج لنا كل المعلومات التي قُمنا بتحديدها أو بالعربي الفصيح ! تُخرج لنا كل الحقول التي حددناها !
ومن ثم في السطر الرابع أغلقنا وسم PHP لأننا نريد طباعة كود HTML يحتوي على كثير من المتغيرات !
والكود سيقوم بعرض نموذج للرد على الموضوع المطلوب ويحتوي على مستطيل لكتابة اسم الشخص الذي يقوم بالرد واسمه T1
و مربع كتابة نص الرد واسمه S1 ! وسيرسل المعلومات إلى reply.php?add=2&id=$thread
وبعد الكود ! أعدنا فتح وسم PHP وأغلقنا شرط أنا المتغير add يساوي 1 !
والآن لدينا شرط أخر !
إذا كانت قيمة المتغير add تساوي 2 ! وهي القيمة التي يرسلها لنا النموذج صح؟؟
نكتب بعدها

if ($_GET['add'] ==2){
if (empty($_POST['T1']) or empty($_POST['S1'])){

في السطر الأول بدأنا بشرطنا لو أنا المتغير add يساوي 2 !
وفي السطر الثاني نتحقق من أن T1 or S1 فارغين !
ونكتب بعده الكود التالي :

echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=red>يُرجى تعبئة جميع الحقول </FONT></BR></B>';
}else{

هنا في السطور الثلاثة تطبع لنا الخطأ الذي سيظهر لو أن T1 or S1 فارغان !ولكن في السطر الأخير كتبنا شرط لو أنهم لم يكونا فارغين !
والآن نكتب الكود التالي:

$date = date('j/n/Y');
$insert = "INSERT INTO reply(id,thread_id,replier_name,reply_date,reply_text) VALUES(NULL,'$thread','$_POST[T1]','$date','$_POST[S1]')";
$iquery = mysql_query($insert);

الآن بعدما قُلنا له شرط أن T1 or S1 ليسا فارغان فسيقوم بالتالي :
أول شي عرفنا المتغير date على أنه الوقت وسيظهر بصيغة 17/10/2006 ! هذا ماهو مكتوب في السطر الأول ونحن قُمنا بهذه الخطوة سابقاً
وفي السطر الثاني ندخل المعلومات لجدول reply أما في السطر الثالث :) فكما اتفقنا الدالة INSERT && SELECT تحتاجان لوسيط ! استخدمناه هنا !
والآن نكتب الكود التالي :

if ($iquery){
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=GREEN>تم كتابة الرد بنجاح</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=GREEN><a href=show.php?main=1>اضغط هنا للانتقال لصفحة المواضيع</a></FONT></BR></B>';
}else{
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=red>لم يتم إضافة الرد ,, حدثت مشكلة </FONT></BR></B>';

الآن في السطر الأول نتحقق من أن المتغير iquery قد قام بوظيفته وهي تنفيذ المتغير insert وهي إدخال المعلومات إلى جدول reply
وبعدها 4 أسطر هي عبارة عن كود HTML ليخبرنا بنجاح العملية !! ومن ثم في السطر السادس ! أشتطرنا أن العملية لم تتم ! من خلال else
كذلك 3 أسطر خاصة بعرض رسالة الخطأ !!
والآن نكتب

}
}
}
?>

في السطر الأول نُغلق شرط أنه لم يتم إدخال المعلومات بنجاح إلى جدول reply !
وفي السطر الثاني نُغلق شرط أن T1 or S1 ليسا فارغين !
وفي السطر قبل الأخير أغلقنا شرط المتغير add يساوي 2 !
وفي السطر الأخير أغلقنا وسم PHP لإن برمجة الصفحة قد انتهت :) :D
ملاحظات على الصفحة !
1- نحن لو لاحظتم قمنا بتعريف المتغير thread أنه يساوي قيمة المتغير id ,, في بداية الصفحة أي قبل أي شرط لأننا سنستخدم قيمة المتغير
في كل الشروط ! ويمكننا تعريفها مرة لكل شرط ولكن هذا يعمل ضغط ! يعني المبرمج يجب أن يصل للذي يُريده في أقصر طريقة ! ;)
والآن سنقوم ببرمجة تتمة صفحة admin.php
نفتح ملف admin.php !
هل تذكرون أخر سطرين ؟؟

}
?>

احذفوهم !! لا نريدهم بعد الآن :)
ونكتب بعدهم مباشرةً الكود التالي :

if ($_GET['show'] ==1){
echo '
<p> </p>
<table border="1" width="100%" id="table1">
<tr>
<td colspan="3">
<p align="center"><b><font size="2" color=Green>المواضيع
المطروحة</font></b></td>
</tr>
<tr>
<td align="center" width="57%"><b><font size="2" color=Green>عنوان
الموضوع </font></b></td>
<td align="center" width="42%" colspan="3"><b>
<font size="2" color=Green>التحكم</font></b></td>


';

في السطر الأول فمنا بكتابة شرط في حال كانت قيمة المتغير show تساوي 1 ! وهذا الشرط خاص بعرض المواضيع الموجود للمشرف العام
وفي السطر الثاني سيقوم بطباعة كود عبارة عنجد جدول يحتوي على 3 خانات !! الأولى مكتوب فيها المواضيع المطروحة والثانية عنوان الموضوع
والثالثة التحكم !
والآن نكتب بعدها :

$thread = "Select * from thread";
$tquery = mysql_query($thread);
while ($array = mysql_fetch_array($tquery)){

في السطر الأول نقوم باختيار كل الحقول من جدول thread ! و في السطر الثاني كما اتفقنا ;) دالتي INSERT && SELECT تحتاجان لوسيط وهنا
استخدمناه !
في السطر الثالث بدأنا بحلقة تكرار لاستخراج كل المعلومات وعرضها ! هذه الخطوة قمنا بها سابقاً في صفحة show.php صحيح؟؟
نكتب بعدها :

?><tr>
<td align="center"><font face="Tahoma" size="2"><a href=show.php?main=2&thread=<? echo $array['id']; ?>><? echo $array['title']; ?></font></td></a>
<td align="center"><font face="Tahoma" size="2"><a href=admin.php?edit=1&thread=<? echo $array['id']; ?>>تعديل</font></td>
<td align="center"><font face="Tahoma" size="2"><a href=admin.php?del=1&thread=<? echo $array['id']; ?>>حذف</font></td>
<?
}
}
?>
</tr>
</table>
<?

في السطر الأول أغلقا وسم PHP وقمنا من خلال كود HTML فتح 3 خانات من الجدول ! الأولى سيكون فيها عنوان الموضوع وطبعاً ستتكرر على حسب عدد المواضيع
والثانية من أجل خيار حذف الموضوع والثالثة من جل خيار تعديل الموضوع !
وفي السطر الخامس أعدنا فتح وسم PHP وفي السطر السادس أغلقنا التكرار ! وفي السطر السابع أغلقنا شرط show يساوي 1
وبعدها أغلقنا وسم PHP لكي نغلق الجدول والحقول التي فتحناها سابقاً
وفي السطر الأخير أعدنا فتح وسم PHP لكي نتابع عملنا !
وبعدها نكتب

if ($_GET['show'] ==2){
echo '
<p> </p>
<table border="1" width="100%" id="table1" dir="rtl">
<tr>
<td colspan="3">
<p align="center"><b><font size="2" color=Green>الردود
</font></b></td>
</tr>
<tr>
<td align="center" width="32%">
<font color="#008000" size="2"><b>كاتب الرد</b></font></td>
<td align="center" width="31%"><b><font size="2" color=Green>
الموضوع </font></b></td>
<td align="center" width="34%"><b>
<font size="2" color=Green>التحكم</font></b></td>


';

في السطر لأول اشترطنا أن قيمة المتعير show تساوي 2 أي خيار عرض الردود للمشرف العام
وبعدها في السطر الثاني سيقوم بطباعة كود HTML ! سيحتوي كما كان سابقه الخاص بعرض المواضيع ولكن هذا خاص بعرض الردود !
والآن نضيف

$reply = "Select * from reply";
$rquery = mysql_query($reply);
while ($rarray = mysql_fetch_array($rquery)){
?><tr> <td align="center"><font face="Tahoma" size="2"><? echo $rarray['replier_name']; ?></font></td>
<td align="center"><font face="Tahoma" size="2"><a href=show.php?main=2&thread=<? echo $rarray['thread_id']; ?>>رابط الموضوع</font></td>
<td align="center"><font face="Tahoma" size="2"><a href=admin.php?rdel=1&thread=<? echo $rarray['id']; ?>>حذف</font></td>
<?
}
?>
</tr>
</table>
<?
}

في السطر الأول نختار جميع الحقول من جدول reply
وفي السطر الثاني كما اتفقنا ;) تعبت لن أكتبها :) ! اتفقنا أن دالتي INSERT && SELECT تحتاجان لوسيط وقمنا باستخدامه هنا !!
في السطر الثالث يدأنا بدالة التكرار لكي يستخرج لنا جميع الردود !!
وبعدها أغلقنا وسم PHP لنبدأ جدولاً يحتوي على خانات ! مثلما هو الحال في ملف show.php وكذلك في لخطوة السابقة !
وبعدها أعدنا فتح وسم PHP وأغلقنا دالة التكرار (هذا في السطر التاسع) , ومن أغلقنا دالة PHP في السطر العاشر لكي نغلق الحقول والجدول
الذي قمنا بفتحه ! وفي السطر الحادي عشر فتحنا وسم PHP وفي السطر الأخير أغلقنا شرط show يساوي 2 !
اعتقدالآن كل شيء مفهوم ولكننا سندخل الآن في معلومتين جدد ! ولكنهم أسهل شيء !
نكتب بعدها :

$thread = intval($_GET['thread']);
if ($_GET['del'] ==1){

$del = "DELETE FROM thread WHERE id='" . $thread . "'";
$del_query= mysql_query($del);
$rdel = "DELETE FROM reply WHERE id='" . $thread . "'";
$rdel_query= mysql_query($rdel);
if ($del_query && $rdel){
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=GREEN>تم حذف الموضوع بنجاح</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=GREEN><a href=admin.php?show=1>اضغط هنا للانتقال لصفحة التحكم في المواضيع</a></FONT></BR></B>';
}else{
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=RED>هناك مشكلة ! لم يتم حذف الموضوع</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=RED><a href=admin.php?show=1>اضغط هنا للعودة لصفحة التحكم في المواضيع</a></FONT></BR></B>';
}
}

في السطر الأول عرفنا المتغير thread على أنه قيمة المتغير thread ! وفي السطر الثاني بدأنا شرط أن المتغير del يساوي 1
في السطر الثالث نتعرف الآن على دالة جديدة وهي DELETE !
معلومة :

DELETE FROM Columnname WHERE

في دالة DELETE FROM نحدد أولاً اسم الجدول ومن ثم الشرط WHERE !!
نتابع الشرح الآن !
في السطر الثالث ;) كما اتفقنا دالة INSERT && SELECT ونضيف الآن دالة DELETE تحتاج لوسيط ! استخدمناه هنا !!
في السطر الرابع سنحذف الردود المرافقة للموضوع المحذوف !! يعني الموضوع الذي سيحذف ستحذف ردوده معه ! أم هل نبقيها ونزيد الضغط
على القاعدة ؟؟ لذا سيختار كل الحقول في جدول reply التي الرقم المتسلسل لموضوعها thread_id يساوي المتغير thread ! الذي سيأخذ قيمته من شريط
العنوان !!
وفي السطر الخامس كما اتفقنا دالة INSERT && SELECT ونضيف الآن دالة DELETE تحتاج لوسيط ! استخدمناه هنا !!
وبعدها ! نتأكد من أنه تم حذف الموضوع و حذف ردوده بنجاح !(هذا في السطر السادس)
أما في السطر السابع والثامن والتاسع والعاشر سيقوم بعرض رسالة النجاح بالحذف !!
وبعدها اشترطنا أنه لم يتم الحذف بنجاح فسيقوم بتنفيذ ماهو موجود بالسطر الثاني عشر والثالث عشر والرابع عشر والخامس عشر !
وبعدها أغلقنا شرط أنه لم يتم الحذف بنجاح وأغلقنا شرط المتغير del يساوي 1
والآن نكتب بعدها:

if ($_GET['rdel'] ==1){
$rep_del = "DELETE FROM reply WHERE thread_id='" . $thread . "'";
$repdel_query = mysql_query($rep_del);
if (repdel_query){
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=GREEN>تم حذف الرد بنجاح</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=GREEN><a href=admin.php?show=2>اضغط هنا للانتقال لصفحة التحكم في الردود</a></FONT></BR></B>';
}else{
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=RED>هناك مشكلة ! لم يتم حذف الموضوع</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=RED><a href=admin.php?show=2>اضغط هنا للعودة لصفحة التحكم في الردود</a></FONT></BR></B>';
}
}

في السطر الأول شرطنا أن المتغير rdel يساوي 1 وهو الخاص بحذف الردود ! بشكل منفصل ! يعني لو رد ماعجب المشرف العام سيحذفه بكل بساطة
وفي السطر الثاني ! سنحذف الرد الذي رقمه المتسلسل يساوي المتغير thread ! وبعدها !كما اتفقنا دالة INSERT && SELECT ونضيف الآن دالة DELETE تحتاج لوسيط ! استخدمناه هنا !!
وبقية الكود نفسه المستخدم في شرط del يساوي 1 !
والآن بعده نكتب :

if ($_GET['edit'] ==1){
$edit = "Select * FROM thread where id='" . $thread . "'";
$edit_query = Mysql_query($edit);
$edit_row = Mysql_fetch_array($edit_query);

?>

<html dir="rtl">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<body bgcolor="#E0DFE3">

<form method="POST" dir="rtl" action="admin.php?edit=2&thread=<? echo $thread; ?>">
<p> </p>
<p align="center"><font color="#008000"><span lang="en-us">
<font size="2"> </font></span><font size="2">عنوان الموضوع : </font>
<input type="text" name="T1" size="32" value=<? echo $edit_row['title']; ?>></font></p>
<p align="center"><font face="Tahoma"><font size="2" color="#008000">النص :
</font><font color="#008000"><textarea rows="17" name="S1" cols="53"><? echo $edit_row['text']; ?></textarea></font></font></p>
<p align="center"><input type="submit" value="ارسل" name="B1"><input type="reset" value="مسح الحقول" name="B2"></p>
</form>
<?
}

في السطر أول اشترطنا أن المتغير edit يساوي 1 ! وهذا الشرط خاص بالتعديل على المواضيع ! يعني لو المشرف كتب موضوع ونسي أي معلومة ! لا مشكلة !
يمكنك التعديل :)
في السطر الثاني سنختار الحقل الذي المتسلس له يساوي المتغير thread ضمن جدول thread ! وهنا thread يرمز لرقم الموضوع !
وفي السطر الثالث كما افقنا ! دالة INSERT && SELECT ونضيف الآن دالة DELETE تحتاج لوسيط ! استخدمناه هنا !!
وفي السطر الرابع استخرجنا جميع المعلومات التي اخترناها في السطر الثاني!
وبعدها أغلقنا وسم PHP وكتبنا كود HTML خاص بعرض نموذج التحرير وسنجد فيه نص الموضو المطلوب وعنوانه !!
وبعدها أعدنا فتح وسم PHP وأغلقنا شرط المتغير edit يساوي الواحد ! طبعاً لا ننسى أن النموذج سيأخذنا إلى admin.php?edit=2&thread
طبعاً thread في ستكون حسب رقم الموضوع !
وبعدها نكتب :

if ($_GET['edit'] ==2){
if (empty($_POST['T1']) or empty($_POST['S1'])){
echo '<BR><B><FONT COLOR=RED>يُرجى تعبئة كافة الحقول !</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=RED><a href=admin.php?show=2>اضغط هنا للعودة والتعديل مجدداً</a></FONT></BR></B>';
}else{
$update = "UPDATE thread SET title='" . $_POST['T1'] . "' ,text='" . $_POST['S1'] . "'";
$update_query = MYSQL_QUERY($update);
if ($update_query){
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=GREEN>تم تعديل الموضوع بنجاح</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=GREEN><a href=admin.php?show=1>اضغط هنا للانتقال لصفحة التحكم في المواضيع</a></FONT></BR></B>';
}else{
echo '<CENTER>';
echo '<BR>';
echo '<BR><B><FONT COLOR=RED>هناك مشكلة لم يتم التعديل !</a></FONT></BR></B>';
echo '<BR><B><FONT COLOR=RED><a href=admin.php?show=1>اضغط هنا للانتقال لصفحة التحكم في المواضيع</a></FONT></BR></B>';
}
}
}

في السطر الأول اشترطنا المتغير edit يساوي 2
وفي السطر الثاني نتأكد من أن T1 Or S1 غير فارغان ! ,, في حالة أنهما فارغان سيطبع رسالة الخطأ وهذا في السطر الثالث والرابع !
وفي السطر الخامس اشترطنا أنهما غير فارغان ! وبعدها نعمل تحديث للمعلومات من خلال دالة UPDATE
توضيح :

UPDATE columnname SET rows WHERE

هذه الدالة تقوم بتحديث المعلومات في الجدول المطلوب ومن خلال أمر set نحدد الأشياء التي نريد أن نحدثها ! ونحدد شرط من خلال WHERE
نعود الآن للشرح
في السطر السادس كما اتفقنا دالة INSERT && SELECT && DELETE ونضيف الآن دالة UPDATE تحتاج لوسيط ! استخدمناه هنا !!
وفي السطر السابع نتحقق من أنه قام بالتحديث بنجاح وسيقوم بطباعة الأكواد في السطور التاسع والعاشر والحادي عشر والثاني عشر
ومن ثم اشترطنا غير ذلك أنه لم يتم تحديث المعلومات بنجاح في السطر الرابع عشر ’’ سيقوم بتنفيذ الأكواد في السطر الخامس عشر والسادس
عشر
والسابع عشر والثامن عشر
وفي السطور التاسع عشر أغلقنا شرط غير ذلك الخاص بإن تحديث المعلومات لم ينجح ! ومن ثم أغلقنا وسم شرط أنه T1 Or S1 غير فارغان !
وفي أخر السطر الأخير أغلقنا شرط edit يساوي 2 !
ومن ثم نكتب :

}
?>

هل تذكر السطران اللذان حذفناهما في أول برمجة admin وقلنا أننا لا نحتاجهم ؟؟ كنت أكذب عليكم :) أريدهم الأن ! وهما السطران الأول والثاني !

هذا كل شيء الآن ,, مبروك انتهى مشروعنا بنجاح والحمدلله !! الخطوات صعبة ولكن مع التدريب يمكنكم الإنتاج !!
والآن خبرتكم أصبحت متوسطة بعض الشيء ! لماذا لا نساهم في تطوير المشاريع العربية؟؟
Www.MySmartBB.Com Or Www.ArabPortal.Net Or Www.Daif.Net Or Www.Ar-Blog.Com
أعرف أنه مازال باكراً ولكن أنا بدأت هكذا ! واخترت المشروع المناسب وعرفت طريقة البرمجة فيه والحمدلله أنا أُنتج بشكل جيد بالنسبة لخبرتي
وطبعاً بالنهاية الشكر يعود لأساتذتي في اللغة أمثال عبدالله خالد و السيد ماستر والسيد أبو خالد والسيد أشرف السمهوري والسيد المبدع العربي
والأخ خالد المصري (المصري) وغيرهم كثيرين اعذروني لو نسيت أحد ! ولن أطيل عليكم ولكن أرجو من كل عضو شارك معنا أنا يضع مشروعه لكي
أقيمه له لو يرغب لكي نُتابع فيما بعد ! يعني نطور المشروع شيءاً فشيء .
في الملفات المرفقة المشروع بالكامل .
وسنكمل ثالث أيام العيد أو اليوم اللي بعده مارأيكم ؟؟ بانتظار أرائكم !

تحياتي
فراس