الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

طريقة عمل سجل زوار ببساطة

مغلق
بدأه Anwarica في 24 يناير 2005 · 11 رد · 7,627 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته،

هذه طريقة شبه بسيطة لعمل دفتر زوار مع صفحات الأدمن لتعديل المشاركات أو حذفها .. الموضوع للمتقدمين بقليل وليس معقداً فهو على الأقل لا يحتوى على أى OOP

أولا يجب تصميم قاعدة بيانات لهذا الجدول لأنه سيعتمد عليها .. وهاهو الكود الخاص بها:

CREATE TABLE `guestbook` (
`Id` int(6) unsigned NOT NULL auto_increment,
`age` tinyint(4) default NULL,
`location` varchar(233) NOT NULL default '',
`email` varchar(222) NOT NULL default '',
`know` varchar(222) NOT NULL default '',
`comment` mediumtext NOT NULL,
`date` varchar(222) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`Id`)
) TYPE=MyISAM;

حيث يحتوى على حقل id أساسى كرقم يتم زيادته أتوماتيكيا auto_increment والحقولage, location, email,know,comment, date, name .. يمكنك أخذ الملف المرفق gb.sql وفكه على برنامج mysql front أو على phpmyadmin :)

الدفتر سيحتوى أساسا على هذه الملفات:

- ملف index.html وهو الرئيسى ومجرد ملف بصيغة html يحتوى على نموذج يرسل إلى صفحة الsubmit.php مع مراعاة أسماء المتغيرات التى سيتم إرسالها

<form name="book" action="submit.php" method="post">

وتلاحظ أن اسم النموذج هو book

ومثال للحقل الأول الخاص بكتابة الاسم:

<input type="text" name="name" size="20">

واسم هذا الحقل name لكى نستقبله فى ملف submit .. ومثال الإبتسامات فى نفس الصفحة إعتماد على الجافاسكريبت:

<a href="javascript: void(0);" onclick="book.comment.value=book.comment.value+':)'; return false;">

حيث أن book هو اسم النموذج والcomment هى اسم الـ textarea كما يتضح فى الملفات المرفقة والـ : ) هى الرمز الذى يتم تغييره لكل صورة من الابتسامات.

- ملف db_connect.php وهو الملف الذى يحتوى على كود الإتصال بقاعدة البيانات ليتم تضمينه كل مرة نحتاج له وهاهو الكود ببساطة:

<?
$host="";
$user="";
$pass="";
$db="";
$link = mysql_connect($host,$user,$pass) or die("failed to connect to db");
mysql_select_db($db,$link);
?>

مع مراعاة ملأ المتغيرات بالأعلى بما يتناسب مع قاعدة البيانات ..

- ملف submit.php وهو الذى يتحقق من البيانات ويرسلها لقاعدة البيانات:

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

if (empty($name)) { die ('خطأ، لم يتم كتابة الاسم'); }

وهنا تم استخدام if ومعها empty حيث يتم كتابة die والرسالة التى تريدها لإيقاق إدخال البيانات .. ممكن تزود وصلة عليها back ليعود المستخدم أو سيضغط بنفسه على back فى المتصفح ..

ومع متابعة الدروس المتقدمة للأخ راكان ستجد نفس الموضوع فى تحديد أرقام العمر وشارة البريد الإلكترونى أيضا :)

إخلاء (تشفية :D ) المتغيرات من رموز html أو أى رمز أخرى ... عن طريق هذا المثال:

$name = HtmlSpecialChars($name);

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

احضار التاريخ

$date=gmdate ('d / m / Y');

وإدخال البيانات

$query ="insert into $table (name,age,location,email,know,comment,date) values ('$name','$age','$location','$email','$find','$comment','$date')"; 
mysql_query($query) or die (mysql_error());

لاحظ: يجب أن تعتمد على php فى التحقق من البيانات ولا تكتفى بالجافا سكريبت إذا أردت ذلك .. لا تضمن هل يدعم متصفح الزائر الجافاسكريبت أو هل حدث خطأ على جهازه أو أى إحتمالات أخرى.

وملف guestbook.php الخاص بعرض البيانات .. حاول وضع الميتا الخاص باللغة العربية عموما حتى لا يتم عرضها بشكل مختلف من قاعدة البيانات

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1256">

مثال صغير للعرض:

$result=mysql_query("SELECT * FROM guestbook order by id DESC");
while ($row=mysql_fetch_array($result)) { 
$text=$row[comment];
$text=str_replace(":)","<img src='images/laugh.gif'>",$text);

وهنا تم استخدام str_replace ثم وضع الرمز واستبداله بصورة ابتسامة من أى مكان .. وبهذا يتم عرض باقى الحقول باستخدام المصفوفة $row ..

======================================

صفحات الأدمن... احذر من تداخل الصفحات :)

-الصفحة index.php هى الصفحة الرئيسية فى المجلد admin وبها هذا الكود فى البداية:

<? ob_start();
if ((!$cool) && ($user!="admin")) {
header("location:log.php");} 
else {
if (!$cool) {
setcookie("cool","new",time()+$choose);}}
?>

والـob_start(); يتم كتابتها فى بداية الصفحة حتى يتم التغلب على بعض المشاكل أثناء الإنتقال بين الصفحات ..

والشرط هنا أن يكون هناك كوكى اسمه cool وكلمة المرور admin ... طبعا غير موجودين فيتم التحول إلى الصفحة log.php ولكن إن تم كتابة كلمة المرور admin فإنه يتم تخزين كوكى باسم cool ولكن هذا الكوكى ينتهى بمجرد إغلاق الصفحة إلا إذا إخترت remember me من الصفحة log.php .. والوقت time()+$choose حيث أن المتغير choose هو عبارة عن checkbox فى الصفحة log.php وقيمة هذا الـcheckbox هى 72576000 ,وهى حواصل ضرب لتجعل الكوكى يستمر مدة سنتين تقريبا (كان نفسى للأبد ولكن معلش :) )

الوصلة تبع تسجيل الخروج فى أعلى الصفحة index.php وهى عادية وتوصلنا إلى صفحة outta.php وتحوى الكود :

<?
if ($cool) {
setcookie("cool");
} 
header("location:log.php");
?>

يعنى الشرط لو وجد الكوكى فإنه يحذفه ويعود للصفحة log.php

تحتوى صفحة index.php أيضا على كود عرض السجل من قاعدة البيانات ولكن فى آخرها هذا الكود

<form action=del_edit.php method=get><input type=checkbox name='del[]' value='$row[id]'

وهى نموذج يحوى checkbox اسمه del[] (ليعبر عن مصفوفة) وقيمة=$row[id] .. وزر ارسال تعديل والثانى حذف كما بالكود

<input type=submit name=delete value='delete Sir'> <input type=submit name=edit value='Edit sir'>

حيث أنه سيتم الإرسال إلى صفحة del_edit.php والتى سنرى فيها كودين للزرين، ونستعرض الكود الأول للحذف:

if ($delete) {
foreach($del as $value){
$results=mysql_query("SELECT * FROM guestbook where id=$value");
while ($row=mysql_fetch_array($results)) { 
echo "<form action=go_delete.php method=get>Are ya sure you wanna delete <b>$row[name]?</b><br><input type=hidden name='hi_del[]' value='$row[id]'>"; }
} echo "<br><input type=submit name='go_delete' value='Go Delete'></form>"; }

وهذا الكود سيرسل لصفحة go_delete.php .. وسيختار اسم الشخص ليعرضه أولا قبل أن يحذفه .. لاحظ أننا استخدمنا الحلقة foreach لأخذ أكثر من اختيار .. ووضعنا حقل مخفى hi_del[]

أما كود التعديل

if ($edit) {
foreach($del as $value){
$results=mysql_query("SELECT * FROM guestbook where id=$value");
while ($row=mysql_fetch_array($results)) { 
echo "<form action=go_edit.php method=get>
<input type=text name='name[$row[id]]' size=70 value='$row[name]'> <br> 
<input type=text name='age[$row[id]]' size=70 value='$row[age]'> <br>
<input type=text name='location[$row[id]]' size=70 value='$row[location]'> <br>
<input type=text name='email[$row[id]]' size=70 value='$row[email]'> <br>
<input type=text name='know[$row[id]]' size=70 value='$row[know]'> <br>
<input type=text name='date[$row[id]]' size=70 value='$row[date]'> <br>
<textarea rows='5' cols='88' name='co[$row[id]]'>$row[comment]</textarea><br \>
<br \><input type=hidden name='updates[]' value='$row[id]'>"; }
} echo "<input type=submit name='go_edit' value='Go edit'></form>"; }

وتلاحظ أن هناك حقل مخفى واسمه updates[] وكذلك يتم فتح حقل نموذج لكل حقل بقاعدة البيانات ويضع القيمة خلاله من أجل تعديلها فى الصفحة المرسل إليها وهى go_edit.php ..

- الصفحة go_delete.php لا شئ جديد بها .. كل الفكرة أنه سيتم حذف كل البيانات القادمة من الحقل المخفى hi_del[] من قاعدة البيانات ..

- أما الصفحة go_edit فهى أخت الصفحة السابقة go_delete.php وسيتم استخدام حقلنا المخفى updates[] وهاهى فكرة التكرار مرة أخرى:

foreach($updates as $value){
$query="UPDATE guestbook SET name='$name[$value]',comment='$co[$value]',age='$age[$value]',location='$location[$value]',email='$email[$value]',know='$know[$value]',date='$date[$value]' where id=$value";
mysql_query($query);}

وتم عمل استخدام العبارة update لتحديث قاعدة البيانات ... ولاحظ دائما أن تتأكد من وضع where id=$value لأنك لو لم تضعها فستغير كل الجدول أو تحذفه فى الصفحة الأخرى وهكذا ..

- الصفحة log.php تحتوى على الكود

<? ob_start();
if ($cool) { header("location:index.php"); } ?>

حتى إذا وجد الكوكى ينقلك مباشرة إلى الصفحة الرئيسية للأدمن بدون كتابة كلمة المرور مرة أخرى..

وهناك صفحة أخيرة يتم تضمينها وهى pass.php وتحتوى على الكود

<? 
if ((!$cool) && ($user!="admin")) {
header("location:log.php");} ?>

وبالله التوفيق

#3

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

شكرا ثانية على هذا الجهد الرائع وإلى الأمام دائماً

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

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

كذلك ممكن ربط السجل مع بقية منتدى أو موقع لتدعيم البحث خلاله أو إجراء عمليات مشتركة بنفس الدوال والملفات ;)

تم تعديل هذه المشاركة بواسطة anwarica في 24 يناير 2005 في 18:06

#5
كذلك ممكن ربط السجل مع بقية منتدى أو موقع لتدعيم البحث خلاله أو إجراء عمليات مشتركة بنفس الدوال والملفات

كلامك صحيح تماما فالفائدة القصوى هي عملية البحث السريع ولكن المشكلة بالنسبة لقواعد البيانات في نظم الإستضافة الجديدة هي المساحة وليس العدد يعني إعمل مائة قاعدة لكن لاتزيد 5 ميقا بايت مثلا :( وبعدين المفروض إننا نعمل سجل زوار بسيط فلا نحتاج لعملية البحث أصلاً عموما قواعد بيانات ملفات مش هاتفرق عايزين سجل الزوار هذا يصبح متقدما وليس بسيطا B)

بالتوفيييييييييييييييق :)

سلااااااااااااااااااام

#6
بلال حمدي كتب:
شكرا أخي anwarica على هذا الجهد ولكن ألا ترى أن سجل الزوار بدون قواعد بيانات أفضل فقواعد البيانات مساحتها محدودة ويحتاجها المستخدم لبرامج كبيرة كالمنتدياتً

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

انت تعلم ان الملف اذا صار حجمه اكثر من 1 ميغا ما الذي يحدث به

جربها انت على جاهزك

قواعد البيانات صممت لتكون الحل المثالي للحجوم الكبيرة و الصغيرة ايضا

كلنا يعلم ان نظام phpnuke و xoops يستخدم قواعد البيانات لاصغر الاشياء تفاهتا بالتخزين

و لا يستخدم الملفات الا في عملية الاتصال مع الملفات

على كل انا من اشد المعارضين للملفات و الحمد لله ;) ;) ;)

Let's google help you Before ask

--------------------------

My Blog : www.phplover.net

#7
اقتباس
على كل انا من اشد المعارضين للملفات و الحمد لله

:) أنا لا أعارضها ولكن عندى حساسية منها :)

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

boo.jpg

edito.jpg

تم تعديل هذه المشاركة بواسطة anwarica في 25 يناير 2005 في 16:59

#8
اقتباس
انت تعلم ان الملف اذا صار حجمه اكثر من 1 ميغا ما الذي يحدث به
أخي mostafasaw كلامك مظبوط ولكن لاتنسى أنه يمكن قراءْة جزء محدد من الملف وهناك فكرة أخري تسمي بالتهذيب التلقائي يعني الملف لايزيد عن 2000 مشاركة مثلاً (تبعا لعدد السطور)َ

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

أنتظر رأيكم في هذا الإقتراح

بالتوفيييييييييييييييييييييييق

سلااااااااااااااااااااااااااااااااااااااااااااااااام

#9
anwarica كتب:
أنا لا أعارضها ولكن عندى حساسية منها

حلوة دي حساسية ;) ;) ;) ;) ;)

Let's google help you Before ask

--------------------------

My Blog : www.phplover.net

#10

thanks alot

#11

مشكور اخوي

#12

السلام عليكم ..

شكرا لك أخي العزيز على الشرح الوافي .. مفيد جدا ..

عندي مشكلة .. عند الدخول على لوحة التحكم ..

لا استطيع حذف أو تعديل المشاركات .. ويظهر الخطأ :

اقتباس
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/aaaa/public_html/gb/admin/del_edit.php on line 11

هل من حل لو سمحت .. او ما هو الخطأ أصلا ..

ولك جزيل الشكر ..

هذا الموضوع مغلق.

مواضيع مشابهة