كلاس php:الدرس الثامن:شرح برمجة كلاس سجل الزوار من الصفر

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





حمل ملفات الدرس من هــــــنــــــا

قبل أن أبدأ:الدرس فيه أفكار وأشياء كثير مجمعه,حاول أن تلم بكل نقطه فى الدرس لتستفيد أكثر

نذكركم قبل أن أبدأ بالخطوات التى اعتادنا ان نمشى عليها سويا فى اى شغل لنا......

1-لابد ان تملك الأساسيات فى جيبك قبل البرمجة
2-لابد ان تحضر ورقه وقلم لتخطط ما ستقوم ببرمجته
3-لابد ان تقوم برسم مخطط على جهازك لما ستقوم ببرمجته
4-لابد ان تضع المخطط بجانب المحرر الذى تكتب فيه كودك لتطبق مخططك وتحوله لقطعه برمجية
5-لابد ان تنظم كودك بكتابة فكرة كل كود قبل كتابة الكود
6-لابد ان تكتب كودك كهيكل عام ,ثم تبدأ بتخصيصه لما تريد ان تفعله به
7-لابد ان تضع تعليقاتك الخاصه بجانب كل كود لتتذكر فكرته او تسهل لمن يقرأ كودك ان يفهمه
نتوكل على الله ...............


1-لابد ان تملك الأساسيات فى جيبك قبل البرمجة:

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




لذلك لو تخيلنا سوينا ماذا نريد ان نكون على دراية من أساسيات فى هذا الاسكربت :

طبعا لو أنا كتبت رسالة وتركتها فأنا بحاجه للاتى:

1-التعامل الجيد مع forms الذى سأكتب من خلاله الرسالة 
2-التعامل الجيد مع دوال الوقت لطباعة وقت ادراج الرسالة 
3-فهم فكرة الpagination لتعدد صفحات الرسائل
4-التعامل الجيد مع دوال فتح وقراءة وتعديل الملفات file,fopen,fwrite,mkdir,file_exists,opendir >>الخ ,حيث سنقوم بتخزين الرسائل على هيئة ملفات بدون ان نتعامل مع قاعدة البيانات 
5-التعامل الجيد مع دوال الحماية مثل trim,htmlspecialchars
هذا كشىء أساسى من الاساسيات بجانب أشياء أخرى سنتطرق لها أثناء شرح الدرس كunset,nl2br........

2-لابد ان تحضر ورقه وقلم لتخطط ما ستقوم ببرمجته

بعد مراجعة الاساسيات جيدا,سننتقل لخطوة التفكير وكيف سنبرمج هذه الكلاس,
اذا تخيلنا فى مخيلتنا شكل لاسكربت سجل الزوار, سيكون عبارة عن

1-فورم لكتابة الرسالة يتكون من الاسم والايميل والرسالة وزر الاعتماد
2-جدول لعرض المقالات المخزنه فوق الفورم ,وحتى نعرض هذه الرسائل علينا ان نقوم بخطوتين لتحقيق ذلك:
A-عمل فانكشن لعد وعمل لست بالرسائل المخزنه list
b-عمل فانكشن لعرض هذه الرسائل
3-مكان لاظهار خاصية تعدد الصفحات السابق,التالى ......
هذه كفكره مبسطة .....................


3-لابد ان تقوم برسم مخطط على جهازك لما ستقوم ببرمجته

دعنا نحول فكرتنا لمخطط حقيقى على جهازنا






4-لابد ان تضع المخطط بجانب المحرر الذى تكتب فيه كودك لتطبق مخططك وتحوله لقطعه برمجية

قم بفتح صورة المخطط وضعها بجانب المحرر اللى راح تكتب فيه ............


5-لابد ان تنظم كودك بكتابة فكرة كل كود قبل كتابة الكود

سنقوم بكتابة العناوين الرئيسية لكل كود قبل البدء فى كتابتها.....

نشوف.........
رمز Code:
<?php
//

//المتغيرات الاساسية



//فانكشن اعتماد الرسالة بعد كتابتها



//فانكشن عمل لست بالرسائل المخزنه



//فانكشن اظهار الرسائل وتعدد الصفحات+الفورم



//فانكشن الفورم


//فانكشن ادراج الرسالة وتخزينها

//

?>


6-لابد ان تكتب كودك كهيكل عام ,ثم تبدأ بتخصيصه لما تريد ان تفعله به


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

اولا:المتغيرات:
1-متغير للمجلد المٌخزن بداخله الرسائل (بدون الحاجه لتخزين الرسائل فى قاعدة البيانات)
2-متغير لتحديد صيغة التاريخ والوقت
3-متغير لعدد الرسائل بالصفحة الواحدة
4-متغير يخص الرسائل ككل(list)

وهذا هى المتغيرات:
رمز Code:
<?php
class maxGuestbook{
   public $messageDir = 'messages';
   public $dateFormat = 'Y-m-d g:i:s A';//g=24 hours - g:i:s hours seconds minutes A AM PM
   public $itemsPerPage = 5;
   public $messageList;


ثانيا:سنقوم بعمل فانكشن فورم كتابة الرسالة وسيتكون من الخانات (الاسم والايميل ونص الرسالة والزر للاعتماد)
رمز Code:
function displayAddForm(){
?>  
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name:<br/>
    <input type="text" name="name" size="30"/><br/><br/>
    Email:<br/>
    <input type="text" name="email" size="30"/><br/><br/> 
    Your message:<br/>
    <textarea name="message" rows="7" cols="49"></textarea><br/>
    <center><input type="submit" name="submit" value="Save" /></center>
  </form>

ثالثا:سنقوم بعمل فانكشن تخزين الرسالة التى تمت كتابتها على هيئة ملف مخزن داخل المجلد messages , والذى حددنا مكانه من خلال المتغير messageDir$
ولنقوم بعمل هذه الفانكشن سنتبع الاتى:

1-نقوم بمعمل متغيرات لنخزن بها القيم المرسلة من فورم الاسم والايميل ونص الرسالة بجانب وقت وتاريخ كتابة الرسالة 
رمز Code:
function insertMessage(){
   $name   = isset($_POST['name']) ? $_POST['name'] : 'Anonymous';
   $email  = isset($_POST['email']) ? $_POST['email'] : '';
   $submitDate  = date($this->dateFormat);
   $content = isset($_POST['message']) ? $_POST['message'] : '';

وأذكركم مره أخرى بالعملية الثلاثية ternary operator ,والتى تساوى if....else ,فلو أخذنا اول
متغير وهو name$ فهو يساوى الجملة الاتية :
رمز Code:
if(isset($_POST['name'])){

$name=$_POST['name'];

}

else

{
$name="anonymous";

}
وقس على ذلك بقية الجمل......


2-نقوم بعمل حالة شرطية بحيث لو لم يتم كتابة اى شىء فى خانة الاسم , سنستبدلها بكلمة anonymous اى مجهول مع تأمين الخانة بدالة trim لازالة المسافات البيضاء وspecial characters
,وأيضا لو عدد حروف نص الرسالة اقل من 5 سنخرج ......
رمز Code:
 if (trim($name) == '') $name = 'Anonymous';//if empty ,write anonymous
   if (strlen($content)<5) {
      exit();
   }

3-نقوم بعمل متغير خاص بحفظ اسم الرسالة, وسوف نجعل الرسائل تحفظ بأسم تاريخ ووقت ادراجها
رمز Code:
   $filename = date('YmdHis');
يعنى لو مثلا الرسالة تم كتابتها بتاريخ 1-4-2011 الساعة 11.30 سيتم تخزين الملف اللى به الرسالة باسم 2011141130

4-نقوم بعمل متغير احتياطى بحيث اذا لم يوجد مجلد لتخزين الرسائل, تقوم هذه الجزئية بعمل المجلد اوتوماتيكيا
رمز Code:
if (!file_exists($this->messageDir)){ //checks file or directory is present or not لو المجلد مش موجود
      mkdir($this->messageDir);//make adirectory called messages
   }

5-وأخير ,نفتح ملف جديد ليخزن الرسالة المكتوبة وندرج بداخله بيانات الفورمز ككل الاسم والايميل ونص الرسالة وتاريخ ووقت ادراجها
رمز Code:
$f = fopen($this->messageDir.DIRECTORY_SEPARATOR.$filename.".txt","w+");//w+ read+write          
   fwrite($f,$name."\n");//write in the file
   fwrite($f,$email."\n");
   fwrite($f,$submitDate."\n");
   fwrite($f,$content."\n");
   fclose($f);
ملاحظه: fopen خاصة بعمل ملف جديد ,وDIRECTORY_SEPERATOR تشير للسلاش / ,ويمكنك استبدالها بالسلاش مباشرة,لكن يفضل عملها بكتابة هذه الجملة ,لانه قد توجد بعض النسخ تحفظ 
المسار بالسلاش العكسية\ وبالتالى لن يتم قراءة مسار الملف بشكل صحيح


بحيث فى النهاية تكون الفانكشن ككل كالاتى:

رمز Code:
function insertMessage(){
   $name   = isset($_POST['name']) ? $_POST['name'] : 'Anonymous';
   $email  = isset($_POST['email']) ? $_POST['email'] : '';
   $submitDate  = date($this->dateFormat);
   $content = isset($_POST['message']) ? $_POST['message'] : '';
   
   if (trim($name) == '') $name = 'Anonymous';//if empty ,write anonymous
   if (strlen($content)<5) {
      exit();
   }
   
   $filename = date('YmdHis');//h 24hrs اسم الملف اللى هيتخزن هيكون تاريخ ووقت كتابته
   if (!file_exists($this->messageDir)){ //checks file or directory is present or not لو المجلد مش موجود
      mkdir($this->messageDir);//make adirectory called messages
   }
   $f = fopen($this->messageDir.DIRECTORY_SEPARATOR.$filename.".txt","w+");//w+ read+write          
   fwrite($f,$name."\n");//write in the file
   fwrite($f,$email."\n");
   fwrite($f,$submitDate."\n");
   fwrite($f,$content."\n");
   fclose($f);
   
}

رابعا:سنقوم بعمل فانكشن لجلب عدد الرسائل ككل (list)

وحتى نقوم بذلك ,نتبع الاتى:

1-نجعل المتغير السابق الخاص بعرض الرسائل مخزن للرسائل على هيئة مصفوفة
رمز Code:
function getMessageList(){
	
   $this->messageList = array();

}
2-نفتح المجلد المخٌزن بداخله الرسائل,ونسوى لوب على الرسائل اللى بداخله ,بحيث نخزنها فى النهاية فى المصفوفة
رمز Code:
function getMessageList(){
	
   $this->messageList = array();
   
	// Open the actual directory
	if ($handle = @opendir($this->messageDir)) {
		// Read all file from the actual directory
		while ($file = readdir($handle))  {
		    if (!is_dir($file)) {
		       $this->messageList[] = $file;//save file in the array
      	}
		}
	}
ثم اخيرا,نرتب الرسائل بترتيب عكسى ونرجع فى النهاية بالمتغير اللى خزنا فيه الرسائل على هيئة مصفوفة
رمز Code:
function getMessageList(){
	
   $this->messageList = array();
   
	// Open the actual directory
	if ($handle = @opendir($this->messageDir)) {
		// Read all file from the actual directory
		while ($file = readdir($handle))  {
		    if (!is_dir($file)) {
		       $this->messageList[] = $file;//save file in the array
      	}
		}
	}	
	
	rsort($this->messageList);//sorts an array by the values in reverse order h-->d-->c
	
	return $this->messageList;
}


خامسا:سنقوم بعمل فانكشن لاظهار الرسائلdisplay+تعدد الصفحات PAGINATION

هذه أصعب جزئية فى الموضوع فركز فيها جيدا.........

1-علينا ان نقوم بعمل متغير لتخزين فانكشن عد الرسائل المخزنه السبقة سنستخدمه لاحقا
رمز Code:
  $list = $this->getMessageList();
2-حتى نحدد عدد الرسائل المراد ظهورها فى الصفحة الواحده ,علينا ان نحدد نقطة البداية ونقطة النهاية 

كفكرة عامه:

نقطة البداية: هى اول مقال سيظهر فى الصفحة 
نقطة النهاية :هى اخر مقال سيظهر فى الصفحة 

كيف نقوم بعمل نقطتى البداية والنهاية؟

نقطة البداية:بعملية حسابية بسيطة وذلك بطرح واحد من الصفحة التى أنت عليها مضروبه فى عدد الرسائل بالصفحة الواحده والتى حددناها سابقا فى المتغير itemsPerPage$
رمز Code:
$startItem = ($page-1)*$this->itemsPerPage;
نضرب مثال:نفرض انى واقف على الصفحة الثالثة من الرسائل, بذلك ستصبح العملية الحسابية كالاتى:
رمز Code:
(3-1)*5=2*5=10
و10 تعنى ان اول مقال سيظهر فى الصفحة الثالثة هو رقم 11 ,لاننا كما قلنا سابقا اننا حفظنا الرسائل فى مصفوفة array , وكما تعلم ان المصفوفه تبدأ قيمها من الصفر 0,1,2,3,4,...الخ


نقطة النهاية:بعمل حالة شرطية بحيث لو نقطة البداية +عدد الرسائل بالصفحة الواحدة أكبر من عدد الرسائل الكلية المخٌزنه,ستكون نقطة النهاية هى أخر رسالة فى list ,

رمز Code:
 if (($startItem + $this->itemsPerPage) > sizeof($list)) $endItem = sizeof($list);
واما ان تكون نقطة النهاية هى مجموع نقطة البداية+عدد الرسائل بالصفحة الواحدة
رمز Code:
else $endItem = $startItem + $this->itemsPerPage;
يعنى لو فرضنا ان نقطة البداية (اول رسالة فى الصفحة) هى 5 اى اننا فى الصفحة الثانية ,ستكون نقطة النهاية فى الصفحة الثانية هى 
رمز Code:
 $endItem = 5+5=10
اى الرسالة رقم 10


3-ثم نقوم بعمل لوب لعد الرسائل بالصفحة الواحده ,بحيث كل ملف يمر عليه يتم قراءته كجزء من مصفوفة دالة file
رمز Code:
 for ($i=$startItem;$i<$endItem;$i++){
         //foreach ($list as $value) {
         $value = $list[$i];
ثم نقوم بعملا ثلاث متغيرات,لنخٌزن بها ,مسار الملف,والاسم والايميل وتاريخ ووقت كتابة المقال
رمز Code:
$data = file($this->messageDir.DIRECTORY_SEPARATOR.$value); //directory_separator=/ \,file:read entire file into an array, file=messages./.nameoffile
      	$name  = trim($data[0]);//first line of file which will be for the name
      	$email = trim($data[1]);//2nd line................................email
        $submitDate = trim($data[2]);//3rd line..........................submitdate
ثم نخرج قيم هذه المتغيرات من المصفوفه بدالunset 
رمز Code:
unset ($data['0']); //يعنى شلنا اول سطر اللى هو الاسم من المصفوفه عشان نستخدمه لوحده
         unset ($data['1']);
         unset ($data['2']);

ثم نقوم بعمل لوب على المصفوفه الخاصة بدالة file 
رمز Code:
$content = "";
         foreach ($data as $value) {
    	       $content .= $value;//The Concatenation Operator $a = "Hello ";$a .= "World!"; now $a=$a."world" = hello world
         }


أخيرا نضع الكود السابث ككل داخل جدول ,ونقوم بطباعة القيم المرسلة من الرسائل المخزنه

بحيث الى هذه اللحظه من الفانكشن ,سيكون الكود ككل كالاتى:
رمز Code:
function displayGuestbook($page=1){
      $list = $this->getMessageList();
      //echo "<center><a href='add.php'>Leave a message</a></center>";
      echo "<table class='newsList'>";
      
      //Get start point(article) and end point
      $startItem = ($page-1)*$this->itemsPerPage;//pagen u are on-1*5=0    0 is the first article in the list array index-->1
      if (($startItem + $this->itemsPerPage) > sizeof($list)) $endItem = sizeof($list);//6>5 ,enditem is last item in the list 5-->6 article
      else $endItem = $startItem + $this->itemsPerPage; //0+5=5
      
      for ($i=$startItem;$i<$endItem;$i++){
         //foreach ($list as $value) {
         $value = $list[$i];
      	$data = file($this->messageDir.DIRECTORY_SEPARATOR.$value); //directory_separator=/ \,file:read entire file into an array, file=messages./.nameoffile
      	$name  = trim($data[0]);//first line of file which will be for the name
      	$email = trim($data[1]);//2nd line................................email
        $submitDate = trim($data[2]);//3rd line..........................submitdate	
         unset ($data['0']); //يعنى شلنا اول سطر اللى هو الاسم من المصفوفه عشان نستخدمه لوحده
         unset ($data['1']);
         unset ($data['2']);
      	
         $content = "";
         foreach ($data as $value) {
    	       $content .= $value;//The Concatenation Operator $a = "Hello ";$a .= "World!"; now $a=$a."world" = hello world
         }
      	
      	echo "<tr>
          <th align='left'><a href=\"mailto:$email\">$name</a></th>
      	          <th class='right'>$submitDate</th>
                    </tr>";
      	echo "<tr><td colspan='2'>".nl2br(htmlspecialchars($content))."<br/></td></tr>";//nl2br print </br> automatically,htmlspecialcharac convert special cha as spae <>& to entity as &nbsp;  	&lt;  	&gt;
      }
      echo "</table>";
      if (sizeof($list) == 0){
         echo "<center><p>No messages at the moment!</p><p>&nbsp;</p></center>";
      }

أخيرا, يتبقى عمل خاصية تعدد الصفحات ضمن هذه الفانكشن 
رمز Code:
if (sizeof($list) > $this->itemsPerPage){
         echo "<div id=\"navigation\">";
         if ($startItem == 0) {
            if ($endItem < sizeof($list)){
               echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next &raquo;</a></div>";
            } else {
               // Nothing to display
            }
         } else {
            if ($endItem < sizeof($list)){
               echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >&laquo; Prev</a></div>";
               echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next &raquo;</a></div>";
            } else {
               echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >&laquo; Prev</a></div>";
            }
         }
         
         echo "<br/></div><br/>";
      }
      echo "<hr />";

خاتما هذه الفانكشن باظهار الفورم الخاص بكتابة الرسالة بطبع الفانكشن اللى سويناها سابقا displayAddForm



بهيك تصبح الكلاس جاهزة للعمل وهذه هو كودها ككل
رمز Code:
<?php
class maxGuestbook{
   public $messageDir = 'messages';
   public $dateFormat = 'Y-m-d g:i:s A';//g=24 hours - g:i:s hours seconds minutes A AM PM
   public $itemsPerPage = 5;
   public $messageList;
   
function processGuestbook(){
   if (isset($_POST['submit'])) {
      $this->insertMessage();
   }
   $page = isset($_GET['page']) ? $_GET['page'] : 1;
   
   $this->displayGuestbook($page);
}
   
function getMessageList(){
	
   $this->messageList = array();
   
	// Open the actual directory
	if ($handle = @opendir($this->messageDir)) {
		// Read all file from the actual directory
		while ($file = readdir($handle))  {
		    if (!is_dir($file)) {
		       $this->messageList[] = $file;//save file in the array
      	}
		}
	}	
	
	rsort($this->messageList);//sorts an array by the values in reverse order h-->d-->c
	
	return $this->messageList;
}   

function displayGuestbook($page=1){
      $list = $this->getMessageList();
      //echo "<center><a href='add.php'>Leave a message</a></center>";
      echo "<table class='newsList'>";
      
      //Get start point(article) and end point
      $startItem = ($page-1)*$this->itemsPerPage;//pagen u are on-1*5=0    0 is the first article in the list array index-->1
      if (($startItem + $this->itemsPerPage) > sizeof($list)) $endItem = sizeof($list);//6>5 ,enditem is last item in the list 5-->6 article
      else $endItem = $startItem + $this->itemsPerPage; //0+5=5
      
      for ($i=$startItem;$i<$endItem;$i++){
         //foreach ($list as $value) {
         $value = $list[$i];
      	$data = file($this->messageDir.DIRECTORY_SEPARATOR.$value); //directory_separator=/ \,file:read entire file into an array, file=messages./.nameoffile
      	$name  = trim($data[0]);//first line of file which will be for the name
      	$email = trim($data[1]);//2nd line................................email
        $submitDate = trim($data[2]);//3rd line..........................submitdate	
         unset ($data['0']); //يعنى شلنا اول سطر اللى هو الاسم من المصفوفه عشان نستخدمه لوحده
         unset ($data['1']);
         unset ($data['2']);
      	
         $content = "";
         foreach ($data as $value) {
    	       $content .= $value;//The Concatenation Operator $a = "Hello ";$a .= "World!"; now $a=$a."world" = hello world
         }
      	
      	echo "<tr>
          <th align='left'><a href=\"mailto:$email\">$name</a></th>
      	          <th class='right'>$submitDate</th>
                    </tr>";
      	echo "<tr><td colspan='2'>".nl2br(htmlspecialchars($content))."<br/></td></tr>";//nl2br print </br> automatically,htmlspecialcharac convert special cha as spae <>& to entity as &nbsp;  	&lt;  	&gt;
      }
      echo "</table>";
      if (sizeof($list) == 0){
         echo "<center><p>No messages at the moment!</p><p>&nbsp;</p></center>";
      }
      // Create pagination
      if (sizeof($list) > $this->itemsPerPage){
         echo "<div id=\"navigation\">";
         if ($startItem == 0) {
            if ($endItem < sizeof($list)){
               echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next &raquo;</a></div>";
            } else {
               // Nothing to display
            }
         } else {
            if ($endItem < sizeof($list)){
               echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >&laquo; Prev</a></div>";
               echo "<div id=\"nright\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\" >Next &raquo;</a></div>";
            } else {
               echo "<div id=\"nleft\"><a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\" >&laquo; Prev</a></div>";
            }
         }
         
         echo "<br/></div><br/>";
      }
      echo "<hr />";
      $this->displayAddForm();
}

function displayAddForm(){
?>  
  <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Name:<br/>
    <input type="text" name="name" size="30"/><br/><br/>
    Email:<br/>
    <input type="text" name="email" size="30"/><br/><br/> 
    Your message:<br/>
    <textarea name="message" rows="7" cols="49"></textarea><br/>
    <center><input type="submit" name="submit" value="Save" /></center>
  </form> 
   
<?php   
}

function insertMessage(){
   $name   = isset($_POST['name']) ? $_POST['name'] : 'Anonymous';
   $email  = isset($_POST['email']) ? $_POST['email'] : '';
   $submitDate  = date($this->dateFormat);
   $content = isset($_POST['message']) ? $_POST['message'] : '';
   
   if (trim($name) == '') $name = 'Anonymous';//if empty ,write anonymous
   if (strlen($content)<5) {
      exit();
   }
   
   $filename = date('YmdHis');//h 24hrs اسم الملف اللى هيتخزن هيكون تاريخ ووقت كتابته
   if (!file_exists($this->messageDir)){ //checks file or directory is present or not لو المجلد مش موجود
      mkdir($this->messageDir);//make adirectory called messages
   }
   $f = fopen($this->messageDir.DIRECTORY_SEPARATOR.$filename.".txt","w+");//w+ read+write          
   fwrite($f,$name."\n");//write in the file
   fwrite($f,$email."\n");
   fwrite($f,$submitDate."\n");
   fwrite($f,$content."\n");
   fclose($f);
   
}
}
?>
ليكون الناتج النهائى بهذا الشكل بعد لمسة جمالية بcss






وفقكم 

تعليقات