• 0
bastr3

درس حول تصميم موقع

سؤال

بســم الله الـرحمــن الرحيــم

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

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

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

أولا سأكتب على ماذا سيحتوي الموقع في نقاط يتم تنفيذها بشكل متتالي :

1- تحليل مكونات الموقع

2- بناء الموقع من الناحية البرمجيه PHP

3- تصميم الموقع وتقسيمه PHOTOSHOP

4- دمج البرمجه مع التصميم HTML

5- إضافة المؤثرات التي تجعل الموقع سهل الإستخدام JAVASCRIPT

سنبدأ في أول خطوه :

الموقع عباره عن نظام cms بسيط يحتوي على سكريبت لإضافة وحذف وتعديل الصفحات فقط (مبدئيا) لذلك سنحتاج إلى قاعدة بيانات تحتوي على جدول للصفحات كما يلي

رقم الصفحة - المقبض (هيك ترجمتها وهيك علمونا بالكليات والجامعات فما تدققوا رجاء) - عددي 20

إسم الصفحة - حروف 50 (هذا رح يكون لينك الصفحة في القائمة مشان هيك لازم يكون طول الكلمه معقول مش سطر)

محتوى الصفحة - نص طويل (LONG TEXT)

ترتيب الصفحة في القائمة - عدد 3

مكان الصفحة - عدد 1 (هنا لتحديد مكان ظهور اللينك الخاص بالصفحة هل هو في القائمة العلويه أو السفليه أو غير ذلك -مايظهر من أصله)

صلاحية الصفحة - عدد 1 (ما أقصدة هل هذه الصفحة أكتيف أم لا )

أعتقد هذا كافي لموقع بسيط ,

سنحتاج أيضا إلى جدول المستخدم

الرقم - مقبض (شرحنا إنو هاي ترجمة الكلمه سابقا) 20 عدد

إسم المستخدم - حرف 20

الرقم السري - حرف 20

لانريد صلاحيات حاليا فقط مستخدم لدخول صفحة التحكم

نريد أيضا جدول إعدادات الموقع

الرقم (مقبض ) عدد 20

الإسم - حرف 250

القيمه - نص طويل

هذا الجدول سيحتوي مثلا على

الرقم | 1

الإسم | الكلمات المفتاحية

القيمة | موقع,بسيط,CMS, إلخ ...

حاليا هذه هي الجداول المطلوبه (هذا ما أذكرة)

سأقوم بإنشاء الجداول والمتابعه لاحقا

__________________ تم عمل الجداول بحمد الله (الكود مرفق)


CREATE DATABASE `simple_cms` ;

CREATE TABLE `simple_cms`.`pages` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`page_name` VARCHAR( 50 ) NOT NULL ,
`Page_cont` LONGTEXT NOT NULL ,
`page_sort` INT( 3 ) NOT NULL ,
`page_place` INT( 1 ) NOT NULL ,
`page_active` INT( 1 ) NOT NULL
) ENGINE = MYISAM


CREATE TABLE `simple_cms`.`users` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_name` VARCHAR( 20 ) NOT NULL ,
`user_pass` VARCHAR( 20 ) NOT NULL
) ENGINE = MYISAM


CREATE TABLE `simple_cms`.`sett` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`s_string` VARCHAR( 250 ) NOT NULL ,
`s_value` LONGTEXT NOT NULL
) ENGINE = MYISAM

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

سيتم البدء بالخطوة الثانية إن شاء الله بعد النظر في المشاركات إن وجد :)

sql.rar

تم تعديل بواسطه Xacker
8

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

80 إجابة على هذا السؤال .

  • 0

بســم الله الـرحمــن الرحيــم

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

لقد إنتهينا من المرحلة الأولى وهي بناء مكونات الموقع من ناحية الدراسة وقاعدة البيانات

الآن إلى المرحله الثانية وهي الكود PHP

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

كيف سنبدأ؟

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

سنقوم بإنشاء مجلد سنسميه site

وبداخل هذا المجلد سننشئ مجلد بإسم administrator

المجلد الأول هو مجلد الموقع الرئيسي

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

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


// page name conf.php
// page dir= ../ أي أنها في المجلد الرئيسي للموقع.
$db_host="localhost";
$db_name="simpel_cms"; // إسم قاعدة البيانات التي قمنا بإنشائها من قبل
$db_user="root"; // إسم الدخول للقاعدة
$db_pass=""; // كلمة السر للمستخدم الخاص بقاعدة البيانات
$link = mysql_connect("localhost",$db_user,$db_pass)or die ('لايمكن الوصول لقاعدة البيانات بسبب: ' . mysql_error());
$db_selected = mysql_select_db($db_name, $link);
// في حال قمنا بتنفيذ هذه الصفحة يجب أن تظهر صفحة فارغه وإذا ظهر بها عباره لايمكن الوصول لقاعدة البيانات فتأكد بأن هناك خلل في الإعدادات التي قمت بإدخالها
// عملية تنفيذ هذه الصفحة تكون كما يلي
// http://localhost/site/conf.php

الآن نبدأ في الصفحة الرئيسيه والتي ستحتوي على عمليه تسجيل الدخول وإظهار الأزرار اللازمه للتحكم بالموقع


// page name index.php
session_start(); //بدء الجلسة

include "../conf.php"; // إضافة محتويات صفحة الإعدادات إلى هذه الصفحة

if($out){ // إنهاء الجلسة
session_unset();
session_destroy();
}

if($login)
{ // عملية تسجيل دخول المدير
$result = mysql_query("SELECT * FROM users WHERE user_name = '$useradmin' AND user_pass = '$passadmin' LIMIT 1",$link); // الإستعلام عن وجود هذا الإسم وكلمة السر في جدول المستخدمين
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
session_register("IDUSER_ADMIN"); // الوصول إلى هنا يعني وجود هذا المستخدم وتتم عمليه تسجيل متغيرات جلسة العمل ليتم طلبها في فترة الجلسة
session_register("username");
$IDUSER_ADMIN=$row[0];
$username=$row[1];
$yes_found=1; //يمكن أن نضع هنا متغير تصبح قيمته واحد ويدل على أن المستخدم وجد
}
if(!$yes_found){ $err_msg ="هناك خطأ في كلمة السر أو إسم الدخول "; } // إذا المتغير لايحمل قيمه إذا المستخدم غير موجود في قاعدة البيانات
}

if($IDUSER_ADMIN){ // إذا كانت جلسة العمل قائمة ستظهر الأزرار والوصلات للوحة التحكم
$body="مرحبا بك <br> $username.<br><a href='?out=1'> تسجيل الخروج </a>";
}
else
{
// الجلسة لم تنشئ بعد فيجب أن يظهر نموذج التسجيل
$body='
<br>
<br>
<br>
<br>
<form method="POST" action="?">
<b>User</b><input name="useradmin" size="20">
<b>Password</b><input name="passadmin" type="password" size="20">
<input type="submit" value="Login" name="login">
</form>';
}
//إظهار النتائج
echo ' ';
echo "$err_msg <br> $body";
?>

ونكمل بعد أن تقوموا بتجربة الكود

الكود مرفق ... ملاحظه : يجب عمل تشغيل للريجيستر جلوبال

قم بالبحث داخل مجلد البي أتش بي عن ملف إسمه
php.ini
وقم بفتحه والبحث بداخله عن هذا السطر
register_globals =
قم بتغير قيمتها من OFF
إلى
ON

أعلم أن هذا الأمر يؤدي إلى مشكله أمنيه ولكن لا أعلم مدى أهميه هذه الثغره لذلك من لديه علم بحجم هذه الثغره فليفيدنا مشكورا

شكرا لكم

تم تعديل بواسطه Xacker
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@ete_tech : شكرا كثير على الأفكار لكن هذه الأفكار سنقوم بتطبيقها بعد الإنتها من الشكل الأولي للمجله

@خالد_الحوراني : جزاك الله الجنه .

@samikralla : جزاك الله خيرا

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

غدا إن شاء الله سأكمل ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

رائع حتى الان وبأنتظار التكمله

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

اما بخصوص ال register_globals

فعندما تكون مفعله على سيرفر (مستحيل تقريب)

يمكن تغيير قيمه المتغير او اعطائه قيمه من دون الحاجه لوجود (get or post)

يعني مثلا

view.php?topic_id=11

طبعا من المفروض يكون في بدايتة الصفحه

get

لل

topic_id

لكي تقراء القيمه

اما في حاله كون الregister_globals مفعل فلا تحتاج لوجود ال get للمتغير topic_id

وهذا يؤدي الى سهوله استدعاء (شيل) بسهوله جدا في حالة كان المتغير لداله include

هذا لتجربتي البسيطه جدا يعني نعتبره توضيح بس وان شاء الله يكون صحيح

وبأنتظار بقيه الدرس

تحياتي

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بســم الله الـرحمــن الرحيــم

تم بحمد الله رفع الملفات على هذا الموقع

http://www.bloodspotsite.com

سيكون بإمكان الجميع تجربة الكود أول بأول ورؤية مثال مباشر ...

للوصول إلى صفحة المدير كما ذكرنا سابقا من خلال هذه الوصله

http://www.bloodspotsite.com/administrator/

سيطلب إسم مستخدم ورقم سري وهي

user=admin

pass=123

شكرا للأخ MiNi.SpIdEr على المعلومات التي ذكرها ونرجو أن يتم توضيح الريجيستر جلوبال بشكل أعمق ...

من ناحية الكود قمت برفعه ولكن لا أعلم لماذا لم يظهر وسأقوم برفعه مع هذه المشاركة

الآن يتم التحضير لإكمال مابدأنا بإذن الله

site.rar

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أصبح واضح لدينا عملية تسجيل الدخول وعملية تسجيل الخروج بإذن الله

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

سنبدأ بعمليه عرض المستخدمين ثم إضافة مستخدم جديد ثم عمليه التعديل ثم عملية الحذف

عرض المستخدمين :

نحتاج إلى الداله

mysql_query

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

هذه العمليه هي جزء كبير من تصميم الموقع.

لنبدأ الكود

عمل صفحة جديد بإسم

admin.php

نذهب إلى صفحة الإنديكس (index.php) ونكتب كود لينك لهذه الصفحة ويكون هذا الكود هتمل ويوضع بعد عملية تسجيل الدخول بنجاح

نعدل هذا السطر :

if($IDUSER_ADMIN){	// إذا كانت جلسة العمل قائمة ستظهر الأزرار والوصلات للوحة التحكم
$body ="مرحبا بك <br> $username.<br><a href='?out=1'> تسجيل الخروج </a>";

إلى

if($IDUSER_ADMIN){	// إذا كانت جلسة العمل قائمة ستظهر الأزرار والوصلات للوحة التحكم
$button_link="<a href='?p=admin'>Admin page</a>";//جعلنا اللينكات في متغير لكي نتمكن من إضافة لينكات أخرى بكل سهوله
$body ="مرحبا بك <br> $username.<br><a href='?out=1'> تسجيل الخروج </a><br/>$button_link";
if($p){ @include($p.".php"); } // هنا يتم دمج الصفحة التي نريدها فقط بذكر إسمها دون إمتداد وعلامة ال@ وضعت فقط لكي لايظهر خطأ في حال قام شخص بكتابة إسم صفحة غير موجوده

الآن نبدا كود صفحة الadmin.php

<?
//عرض المستخدمين
$admin_page_text="
<table style='width: 100%'>
<tr>
<td>الرقم</td>
<td>إسم المستخدم</td>
</tr>
"; // هذا جدول هتمل يتم إنشاؤه عن طريق أي محرر هتمل مثل دريم ويفر
$result = mysql_query("Select * From users");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$admin_page_text.= "
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
</tr>
";
}
$admin_page_text.= "</table>";
echo $admin_page_text; // هذا المتغير نقوم بطباعته في صفحة الإنديكس ليتناسق مع كود صفحة الإنديكس
?>

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

<?
//عرض المستخدمين
$admin_page_text="
<table style='width: 100%'>
<tr>
<td>الرقم</td>
<td>إسم المستخدم</td>
<td> </td>
<td> </td>
</tr>
"; // هذا جدول هتمل يتم إنشاؤه عن طريق أي محرر هتمل مثل دريم ويفر
$result = mysql_query("Select * From users");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$admin_page_text.= "
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
<td><a href='?p=$p&edit=$row[0]'><img src='images/edit.gif' alt='تعديل هذا المستخدم' border=0 /></a></td>
<td><a href='?p=$p&delete=$row[0]'><img src='images/edit.gif' alt='حذف هذا المستخدم' border=0 /></a></td>
</tr>
";
}
$admin_page_text.= "</table>";
echo $admin_page_text; // هذا المتغير نقوم بطباعته في صفحة الإنديكس ليتناسق مع كود صفحة الإنديكس
?>

نكمل غدا إن شاء الله

تم تعديل بواسطه bastr3
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بســم الله الـرحمــن الرحيــم

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

هذه الصفحة ستكون في مجلد المدير وسيتم إستدعاؤها في صفحة الإنديكس بهذا الأمر

include "template.inc";

نبدء بإذن الله

<?
//هذه هي صفحة القوالب وهي بإسم
// template.inc
// سنضع هنا جميع القوالب التي تهمنا لكي نتمكن من تغيير التصميم بكل سهوله فيما بعد
//قالب نموذج تعديل صفحة المدير
$Template_admin_edit='<form method="POST">
<div align="center">
<table border="1" width="100" cellspacing="1">
<tr>
<td>
<font color="#014D5F"><b>User</b></font></td>
<td><font color="#FF0000"><input name="user_edit" value="%user_edit%" size="20" style="font-weight: 700"></font></td>
</tr>
<tr>
<td>
<font color="#014D5F"><b>Password</b></font></td>
<td><font color="#FF0000">
<input name="pass_edit" type="text" value="%pass_edit%" style="font-weight: 700" size="20"></font></td>
</tr>
</table>
</div>
<p align="center" style="margin-top: 0; margin-bottom: 0">
 </p>
<p align="center" style="margin-top: 0; margin-bottom: 0">
<font color="#FF0000">
<input type="hidden" name="id_edit" value="%id_edit%" />
<input type="submit" value="update" style="font-weight: 700"><input type="submit" name="cancel" value="cancel" style="font-weight: 700"></font></p>
</form>';
?>

الآن نكمل صفحة المدير :

// عملية الحذف ويجب أن تكون قبل عملية العرض
if($delete){
mysql_query("delete from users where id=$delete");
$error_msg="تم الحذف";
}

// عملية التعديل وتحتاج إلى نموذج لتعديل البيانات
if($edit){
if($id_edit){ // تم إرسال النموذج
mysql_query("UPDATE `users` SET `user_name` = '$user_edit',`user_pass` = '$pass_edit' WHERE `id`=$id_edit");
$error_msg="update done!";
}else{ // إنشاء النموذج وعرض البيانات فيه
$result = mysql_query("Select * From users");
$row = mysql_fetch_array($result, MYSQL_NUM);
// سيتم أخذ النموذج من صفحة القوالب
$old_var = array("%user_edit%", "%pass_edit%", "%id_edit%"); //المتغيرات من صفحة القوالب
$new_var = array($row[1],$row[2],$row[0]); // المتغيرات الحقيقية
$admin_page_from_text = str_replace($old_var, $new_var, $Template_admin_edit); // عملية إستبدال المتغيرات من صفحة القوالب إلى المتغيرات الحقيقية
}
}

لعرض النتائج تكلمنا سابقا بأنها ستكون منسقة في صفحة الإندكس كما يلي :

echo " $admin_page_text <br/> $admin_page_from_text <br/> $error_msg";

بالنسبه لعملية إلغاء أمر التعديل سنضع هذا السطر في بداية صفحة الإندكس بعد عملية بدء الجلسة مباشرة :

if($cancel){ header("Location: ?p=$p"); }

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

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

-----

صفحة هذا المشروع : http://www.bloodspotsite.com

صفحة المدير : http://www.bloodspotsite.com/administrator/

الإسم :admin

الرقم السري :123

عملية التعديل غير فعاله على الموقع ليستطيع الجميع تجربة النتائج

الكود إلى ماوصلنا مرفق

* يمكن للجميع متابعه أخر مايتم طرحه في هذا القسم من المنتدى بالضغط هنا

http://www.arabteam2000-forum.com/index.ph...ssout&id=17

ومن قائمة بوكمارك إختر المكان الذي تتردد عليه مثل igoogle.com

site0.1.rar

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عدنا والعود أحمد ..... لنكمل بإذن الله

أعتذر ولكن هناك مشكله في الإنترنت .. أصبح بطيء جدا ولايمكنني أن أتأكد من ان الكود يعمل أو لا . شكرا لكم

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

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

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

الآن سنقوم بزيادة السرعة في سرد الكود والتقليل من الشرح للأمور التي عرفناها مع إمكانيه شرح أي بند يصعب عليكم ....

لعملية الإضافة قمنا بالتعديل على القالب التالي :

$Template_admin_edit='<form method="POST">
<div align="center">
<table border="1" width="100" cellspacing="1">
<tr>
<td>
<font color="#014D5F"><b>User</b></font></td>
<td><font color="#FF0000"><input name="user_edit" value="%user_edit%" size="20" style="font-weight: 700"></font></td>
</tr>
<tr>
<td>
<font color="#014D5F"><b>Password</b></font></td>
<td><font color="#FF0000">
<input name="pass_edit" type="text" value="%pass_edit%" style="font-weight: 700" size="20"></font></td>
</tr>
</table>
</div>
<p align="center" style="margin-top: 0; margin-bottom: 0">
 </p>
<p align="center" style="margin-top: 0; margin-bottom: 0">
<font color="#FF0000">
<input type="hidden" name="%id_edit_name%" value="%id_edit%" />
<input type="submit" value="%update%" style="font-weight: 700"><input type="submit" name="cancel" value="cancel" style="font-weight: 700"></font></p>
</form>';

%id_edit_name% لتعيير إسم المتغير تعديل أو إضافة

%update% لتغيير محتوى زر الإرسال من تعديل إلى إضافة أو العكس

للإضافة قمنا ببرمجه هذا الكود في صفحة المدير admin.php:

if($addnew){
if($id_new){

mysql_query("INSERT INTO `blood_cms`.`users` ( `id` ,`user_name` ,`user_pass`)VALUES (NULL , '$user_edit', '$pass_edit');");
$error_msg="done!";
}else{

$old_var = array("%user_edit%", "%pass_edit%", "%id_edit%","%id_edit_name%", "%update%");
$new_var = array("","","1","id_new","Add new");
$admin_page_from_text = str_replace($old_var, $new_var, $Template_admin_edit);
}
}

وأضفنا لينك للإضافة في نفس الصفحة كالتالي :

<a href='?p=$p&addnew=1'>Add new</a>

حاولت أرفق صور للصفحات لكن ويندوز7 الظاهر فيه صراصير كثير (bugs) وشوية قوارض لآني لما أعمل برنت سكرين بطلع شاشه سودة , بس أفضل من ويندوز إكس بي إلى الآن وفيه ميزات كثيره مأخوذه من الأبونتو والماك , على كل خينا نكمل ,

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

صفحة الإعدادت نستخدمها لإعدادات الموقع (من إسمها مش إختراع صاروخ) مثل الكلمات المفتاحية إسم الموقع والصفحة الرئيسيه والديسكريبتشن (نبذه عن الموقع) وغيرها

قمنا بالشرح وعمل الجدول من قبل والآن إلى التنفيذ :

الجدول يتكون من ثلاث حقول المقبض واسم الإعداد وقيمته ... للتذكير فقط .

نقوم بعمل صفحة ونسميها sett.php

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

القالب : $Template_sett_page='<form method="POST">
<div align="center">
<table border="1" width="100" cellspacing="1">
<tr>
<td>
<font color="#014D5F"><b>Setting name</b></font></td>
<td><font color="#FF0000"><input name="sett_edit" value="%sett_edit%" size="20" style="font-weight: 700"></font></td>
</tr>
<tr>
<td>
<font color="#014D5F"><b>Value</b></font></td>
<td><font color="#FF0000">
<textarea name="val_edit" name="x" rows="8" cols="300">%val_edit%</textarea></font></td>
</tr>
</table>
</div>
<p align="center" style="margin-top: 0; margin-bottom: 0">
 </p>
<p align="center" style="margin-top: 0; margin-bottom: 0">
<font color="#FF0000">
<input type="hidden" name="%id_edit_name%" value="%id_edit%" />
<input type="submit" value="%update%" style="font-weight: 700"><input type="submit" name="cancel" value="cancel" style="font-weight: 700"></font></p>
</form>';

ونقوم بالتعديل على صفحة الإعدادت ماعدلناه في القالب لتظهر كما يلي :

if($delete){
mysql_query("delete from sett where id=$delete");
$error_msg="Deleted done!";
}


if($edit){
if($id_edit){
mysql_query("UPDATE `sett` SET `s_string` = '$sett_edit',`s_value` = '$val_edit' WHERE `id`=$id_edit");
$error_msg="update done!";
}else{
$result = mysql_query("Select * From sett where id=$edit");
$row = mysql_fetch_array($result, MYSQL_NUM);

$old_var = array("%sett_edit%", "%val_edit%", "%id_edit%","%id_edit_name%", "%update%");
نظيف هنا سطر لتحويل كود هتمل إلى نص وذلك منعا لحدوث مشاكل في النموذج
$row[2]=htmlspecialchars($row[2]);

$new_var = array($row[1],$row[2],$edit,"id_edit","Update");
$admin_page_from_text = str_replace($old_var, $new_var, $Template_sett_page);
}
}

if($addnew){
if($id_new){

mysql_query("INSERT INTO `sett` ( `id` ,`s_string` ,`s_value`)VALUES (NULL , '$sett_edit', '$val_edit');");
$error_msg="done!";
}else{

$old_var = array("%sett_edit%", "%val_edit%", "%id_edit%","%id_edit_name%", "%update%");
$new_var = array("","","1","id_new","Add new");
$admin_page_from_text = str_replace($old_var, $new_var, $Template_sett_page);
}
}



$admin_page_text="
<br> <a href='?p=$p&addnew=1'>Add new</a>
<table style='width: 40%'>
<tr>
<td>Nu.</td>
<td>Setting name</td>
<td>Value</td>
<td> </td>
<td> </td>
</tr>
";
$result = mysql_query("Select * From sett");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$admin_page_text.= "
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
<td>$row[2]</td>
<td><a href='?p=$p&edit=$row[0]'><img src='images/edit.gif' alt='edit' border=0 /></a></td>
<td><a href='?p=$p&delete=$row[0]'><img src='images/delete.gif' alt='delete' border=0 /></a></td>
</tr>
";
}
$admin_page_text.= "</table>";

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

رح أعمل تعديل للمشاركة كل شوي لآنو بأي لحظه ببطل في نت وبروح كل شغلي على الفاضي مشان هيك إتحملوني...

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@ HhH-PROGRAMMER شكرا لك أخي وقد كنت أرى أن أجمعه في ملف بي دي أف ولكني أشعر بالملل :) لآن تجميعه سيكون صعب للغايه في نظري لذلك إذا قمت بهذه العملية فلا تنسى نصيبك ونصيب المنتدى من الحقوق , وطبعا الحقوق مفتوحة المصدر للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الآن سنقوم بإنشاء صغحة مدير الصفحات , للتذكير هذا هو تقسيم قاعدة البيانات

انسخ الكود
  1.  
  2. [color= #808080; font-style: italic;]--[/color]
  3. [color= #808080; font-style: italic;]-- Database: 'cms'[/color]
  4. [color= #808080; font-style: italic;]--[/color]
  5.  
  6. [color= #808080; font-style: italic;]-- --------------------------------------------------------[/color]
  7.  
  8. [color= #808080; font-style: italic;]--[/color]
  9. [color= #808080; font-style: italic;]-- Table structure for table 'pages'[/color]
  10. [color= #808080; font-style: italic;]--[/color]
  11.  
  12. [color= #993333; font-weight: bold;]CREATE[/color] [color= #993333; font-weight: bold;]TABLE[/color] pages [color= #66cc66;]([/color]
  13. id int[color= #66cc66;]([/color][color= #cc66cc;]20[/color][color= #66cc66;])[/color] [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color] [color= #993333; font-weight: bold;]AUTO_INCREMENT[/color][color= #66cc66;],[/color]
  14. page_name varchar[color= #66cc66;]([/color][color= #cc66cc;]50[/color][color= #66cc66;])[/color] collate latin1_general_ci [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  15. Page_cont longtext collate latin1_general_ci [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  16. page_sort int[color= #66cc66;]([/color][color= #cc66cc;]3[/color][color= #66cc66;])[/color] [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  17. page_place int[color= #66cc66;]([/color][color= #cc66cc;]1[/color][color= #66cc66;])[/color] [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  18. page_active int[color= #66cc66;]([/color][color= #cc66cc;]1[/color][color= #66cc66;])[/color] [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  19. [color= #993333; font-weight: bold;]PRIMARY[/color] [color= #993333; font-weight: bold;]KEY[/color] [color= #66cc66;]([/color]id[color= #66cc66;])[/color]
  20. [color= #66cc66;])[/color];
  21.  
  22. [color= #808080; font-style: italic;]-- --------------------------------------------------------[/color]
  23.  
  24. [color= #808080; font-style: italic;]--[/color]
  25. [color= #808080; font-style: italic;]-- Table structure for table 'sett'[/color]
  26. [color= #808080; font-style: italic;]--[/color]
  27.  
  28. [color= #993333; font-weight: bold;]CREATE[/color] [color= #993333; font-weight: bold;]TABLE[/color] sett [color= #66cc66;]([/color]
  29. id int[color= #66cc66;]([/color][color= #cc66cc;]20[/color][color= #66cc66;])[/color] [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color] [color= #993333; font-weight: bold;]AUTO_INCREMENT[/color][color= #66cc66;],[/color]
  30. s_string varchar[color= #66cc66;]([/color][color= #cc66cc;]250[/color][color= #66cc66;])[/color] collate latin1_general_ci [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  31. s_value longtext collate latin1_general_ci [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  32. [color= #993333; font-weight: bold;]PRIMARY[/color] [color= #993333; font-weight: bold;]KEY[/color] [color= #66cc66;]([/color]id[color= #66cc66;])[/color]
  33. [color= #66cc66;])[/color];
  34.  
  35. [color= #808080; font-style: italic;]-- --------------------------------------------------------[/color]
  36.  
  37. [color= #808080; font-style: italic;]--[/color]
  38. [color= #808080; font-style: italic;]-- Table structure for table 'users'[/color]
  39. [color= #808080; font-style: italic;]--[/color]
  40.  
  41. [color= #993333; font-weight: bold;]CREATE[/color] [color= #993333; font-weight: bold;]TABLE[/color] users [color= #66cc66;]([/color]
  42. id int[color= #66cc66;]([/color][color= #cc66cc;]20[/color][color= #66cc66;])[/color] [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color] [color= #993333; font-weight: bold;]AUTO_INCREMENT[/color][color= #66cc66;],[/color]
  43. user_name varchar[color= #66cc66;]([/color][color= #cc66cc;]20[/color][color= #66cc66;])[/color] collate latin1_general_ci [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  44. user_pass varchar[color= #66cc66;]([/color][color= #cc66cc;]20[/color][color= #66cc66;])[/color] collate latin1_general_ci [color= #993333; font-weight: bold;]NOT[/color] [color= #993333; font-weight: bold;]NULL[/color][color= #66cc66;],[/color]
  45. [color= #993333; font-weight: bold;]PRIMARY[/color] [color= #993333; font-weight: bold;]KEY[/color] [color= #66cc66;]([/color]id[color= #66cc66;])[/color]
  46. [color= #66cc66;])[/color];
  47.  
  48.  
  49.  

*فقط للعلم*

جدول الصفحات يحتوي على هذه الحقول ...

id | page_name | Page_cont | page_sort | page_place | page_active

عندما نكتب

$row[2]

معنى ذلك الحقل رقم 2 في مصفوفة الحقول والتي تبدأ بالرقم صفر وذلك يعني حقل Page_cont

كالمعتاد نقوم بعمل نسخة من صفحة المدير أو أقرب صفحة من ناحية الكود للصفحة المراد إنشاؤها .. حاليا لايوجد لدينا سوى صفحة المدير فنبدأ بنسخها وتسميه الصفحة الجديد بإسم page.php

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

-حقل نص لإسم الصفحة

-حقل نص كبير (textarea) لإضافة محتوى الصفحة وسيكون في الغالب محرر هتمل وسنستخدم ال (FCKeditor) فهو جيد ومفتوح المصدر ويمكن التعديل عليه ... سأقوم بإذن الله بشرح كيفيه إضافة أزرار إلى هذا المحرر في موضوع آخر .

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

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

$Template_page_page1='<form method="POST">
<div align="center">
<table border="1" width="600" cellspacing="1">
<tr>
<td>
<font color="#014D5F"><b>Page title</b></font></td>
<td><font color="#FF0000"><input name="title_edit" value="%title_edit%" size="20" style="font-weight: 700"></font></td>
</tr>
<tr>
<td colspan="2">
<font color="#014D5F"><b>Content</b></font></td> </tr><tr>
<td colspan="2"><font color="#FF0000">';

$Template_page_page2='</font></td>
</tr>
</table>
</div>
<p align="center" style="margin-top: 0; margin-bottom: 0">
 </p>
<p align="center" style="margin-top: 0; margin-bottom: 0">
<font color="#FF0000">
<input type="hidden" name="%id_edit_name%" value="%id_edit%" />
<input type="submit" value="%update%" style="font-weight: 700"><input type="submit" name="cancel" value="cancel" style="font-weight: 700"></font></p>
</form>';

وفي صفحة الإندكس .. الصفحة الرئيسيه نقوم بإستدعاء أوامر المحرر( قبل عملية إستدعاء الصفحات إنكلود )وهي :

include("FCKeditor/fckeditor.php");
$oFCKeditor = new FCKeditor('FCKeditor1');
$oFCKeditor->BasePath = 'FCKeditor/';

وفي آخر الصفحة نفسها (الإندكس) نقوم بوضع هذا الكود ليتم إنشاء المحرر في حال كان القالب قسمين كما يلي :

if($admin_page_from_text1){
echo $admin_page_from_text1;
$oFCKeditor->Value = $FCKeditor1;
$oFCKeditor->Create();
echo $admin_page_from_text2;
}

لا ننسى إضافة رابط لصفحة مدير الصفحات :

انسخ الكود
  1. [color= #000033;]$button_link[/color][color= #339933;]=[/color][color= #0000ff;]"<a href='?'>main page</a> | <a href='?p=admin'>Admin page</a> | <a href='?p=set
    t'>Setting</a> | <a href='?p=page'>Pages manager</a> "[/color][color= #339933;];[/color]
  2.  

هكذا ستيصبح كود صفحة مدير الصفحات مبدئيا :

انسخ الكود
  1.  
  2.  
  3. [color= #b1b100;]if[/color][color= #009900;]([/color][color= #000033;]$delete[/color][color= #009900;])[/color][color= #009900;]{[/color]
  4. [color= #990000;]mysql_query[/color][color= #009900;]([/color][color= #0000ff;]"delete from pages where id=$delete"[/color][color= #009900;])[/color][color= #339933;];[/color]
  5. [color= #000033;]$error_msg[/color][color= #339933;]=[/color][color= #0000ff;]"Deleted done!"[/color][color= #339933;];[/color]
  6. [color= #009900;]}[/color]
  7.  
  8. [color= #b1b100;]if[/color][color= #009900;]([/color][color= #000033;]$edit[/color][color= #009900;])[/color][color= #009900;]{[/color]
  9. [color= #b1b100;]if[/color][color= #009900;]([/color][color= #000033;]$id_edit[/color][color= #009900;])[/color][color= #009900;]{[/color]
  10. [color= #990000;]mysql_query[/color][color= #009900;]([/color][color= #0000ff;]"UPDATE `pages` SET page_name = '$title_edit',Page_cont = '$FCKeditor
    1' WHERE `id`=$id_edit"[/color][color= #009900;])[/color][color= #339933;];[/color]
  11. [color= #000033;]$error_msg[/color][color= #339933;]=[/color][color= #0000ff;]"update done!"[/color][color= #339933;];[/color]
  12. [color= #009900;]}[/color][color= #b1b100;]else[/color][color= #009900;]{[/color]
  13. [color= #000033;]$result[/color] [color= #339933;]=[/color] [color= #990000;]mysql_query[/color][color= #009900;]([/color][color= #0000ff;]"Select * From pages where id=$edit"[/color][color= #009900;])[/color][color= #339933;];[/color]
  14. [color= #000033;]$row[/color] [color= #339933;]=[/color] [color= #990000;]mysql_fetch_array[/color][color= #009900;]([/color][color= #000033;]$result[/color][color= #339933;],[/color] MYSQL_NUM[color= #009900;])[/color][color= #339933;];[/color]
  15. [color= #000033;]$FCKeditor1[/color][color= #339933;]=[/color][color= #000033;]$row[/color][color= #009900;][[/color][color= #cc66cc;]2[/color][color= #009900;]][/color][color= #339933;];[/color]
  16. [color= #000033;]$old_var[/color] [color= #339933;]=[/color] [color= #990000;]array[/color][color= #009900;]([/color][color= #0000ff;]"%title_edit%"[/color][color= #339933;],[/color] [color= #0000ff;]"%id_edit%"[/color][color= #339933;],[/color][color= #0000ff;]"%id_edit_name%"[/color][color= #339933;],[/color] [color= #0000ff;]"%update%"[/color][color= #009900;])[/color][color= #339933;];[/color]
  17. [color= #000033;]$new_var[/color] [color= #339933;]=[/color] [color= #990000;]array[/color][color= #009900;]([/color][color= #000033;]$row[/color][color= #009900;][[/color][color= #cc66cc;]1[/color][color= #009900;]][/color][color= #339933;],[/color][color= #000033;]$edit[/color][color= #339933;],[/color][color= #0000ff;]"id_edit"[/color][color= #339933;],[/color][color= #0000ff;]"Update"[/color][color= #009900;])[/color][color= #339933;];[/color]
  18. [color= #000033;]$admin_page_from_text1[/color] [color= #339933;]=[/color] [color= #990000;]str_replace[/color][color= #009900;]([/color][color= #000033;]$old_var[/color][color= #339933;],[/color] [color= #000033;]$new_var[/color][color= #339933;],[/color] [color= #000033;]$Template_page_page1[/color][color= #009900;])[/color][color= #339933;];[/color]
  19. [color= #000033;]$admin_page_from_text2[/color] [color= #339933;]=[/color] [color= #990000;]str_replace[/color][color= #009900;]([/color][color= #000033;]$old_var[/color][color= #339933;],[/color] [color= #000033;]$new_var[/color][color= #339933;],[/color] [color= #000033;]$Template_page_page2[/color][color= #009900;])[/color][color= #339933;];[/color]
  20. [color= #009900;]}[/color]
  21. [color= #009900;]}[/color]
  22.  
  23. [color= #b1b100;]if[/color][color= #009900;]([/color][color= #000033;]$addnew[/color][color= #009900;])[/color][color= #009900;]{[/color]
  24. [color= #b1b100;]if[/color][color= #009900;]([/color][color= #000033;]$id_new[/color][color= #009900;])[/color][color= #009900;]{[/color]
  25.  
  26. [color= #990000;]mysql_query[/color][color= #009900;]([/color][color= #0000ff;]"INSERT INTO pages ( `id` ,`page_name` ,`Page_cont`)
    VALUES (NULL , '$title_edit', '$FCKeditor1');"[/color][color= #009900;])[/color][color= #339933;];[/color]
  27. [color= #000033;]$error_msg[/color][color= #339933;]=[/color][color= #0000ff;]"done!"[/color][color= #339933;];[/color]
  28. [color= #009900;]}[/color][color= #b1b100;]else[/color][color= #009900;]{[/color]
  29. [color= #000033;]$old_var[/color] [color= #339933;]=[/color] [color= #990000;]array[/color][color= #009900;]([/color][color= #0000ff;]"%title_edit%"[/color][color= #339933;],[/color] [color= #0000ff;]"%id_edit%"[/color][color= #339933;],[/color][color= #0000ff;]"%id_edit_name%"[/color][color= #339933;],[/color] [color= #0000ff;]"%update%"[/color][color= #009900;])[/color][color= #339933;];[/color]
  30. [color= #000033;]$new_var[/color] [color= #339933;]=[/color] [color= #990000;]array[/color][color= #009900;]([/color][color= #0000ff;]""[/color][color= #339933;],[/color][color= #0000ff;]"1"[/color][color= #339933;],[/color][color= #0000ff;]"id_new"[/color][color= #339933;],[/color][color= #0000ff;]"Add new"[/color][color= #009900;])[/color][color= #339933;];[/color]
  31. [color= #000033;]$admin_page_from_text1[/color] [color= #339933;]=[/color] [color= #990000;]str_replace[/color][color= #009900;]([/color][color= #000033;]$old_var[/color][color= #339933;],[/color] [color= #000033;]$new_var[/color][color= #339933;],[/color] [color= #000033;]$Template_page_page1[/color][color= #009900;])[/color][color= #339933;];[/color]
  32. [color= #000033;]$admin_page_from_text2[/color] [color= #339933;]=[/color] [color= #990000;]str_replace[/color][color= #009900;]([/color][color= #000033;]$old_var[/color][color= #339933;],[/color] [color= #000033;]$new_var[/color][color= #339933;],[/color] [color= #000033;]$Template_page_page2[/color][color= #009900;])[/color][color= #339933;];[/color]
  33. [color= #009900;]}[/color]
  34. [color= #009900;]}[/color]
  35.  
  36.  
  37.  
  38. [color= #000033;]$admin_page_text[/color][color= #339933;]=[/color][color= #0000ff;]"[/color]
  39. [color= #0000ff;] <br> <a href='?p=$p&addnew=1'>Add new</a>[/color]
  40. [color= #0000ff;]<table style='width: 40%'>[/color]
  41. [color= #0000ff;] <tr>[/color]
  42. [color= #0000ff;] <td>Nu.</td>[/color]
  43. [color= #0000ff;] <td>Page title</td>[/color]
  44. [color= #0000ff;] <td>Sort</td>[/color]
  45. [color= #0000ff;] <td>Place</td>[/color]
  46. [color= #0000ff;] <td>Active</td>[/color]
  47. [color= #0000ff;] <td> </td>[/color]
  48. [color= #0000ff;] <td> </td>[/color]
  49. [color= #0000ff;] </tr>[/color]
  50. [color= #0000ff;]"[/color][color= #339933;];[/color]
  51. [color= #000033;]$result[/color] [color= #339933;]=[/color] [color= #990000;]mysql_query[/color][color= #009900;]([/color][color= #0000ff;]"Select * From pages"[/color][color= #009900;])[/color][color= #339933;];[/color]
  52. [color= #b1b100;]while[/color] [color= #009900;]([/color][color= #000033;]$row[/color] [color= #339933;]=[/color] [color= #990000;]mysql_fetch_array[/color][color= #009900;]([/color][color= #000033;]$result[/color][color= #339933;],[/color] MYSQL_NUM[color= #009900;])[/color][color= #009900;])[/color]
  53. [color= #009900;]{[/color]
  54. [color= #000033;]$admin_page_text[/color][color= #339933;].=[/color] [color= #0000ff;]"[/color]
  55. [color= #0000ff;] <tr>[/color]
  56. [color= #0000ff;] <td>$row[0]</td>[/color]
  57. [color= #0000ff;] <td>$row[1]</td>[/color]
  58. [color= #0000ff;] <td><a href='?p=$p&delete=$row[0]'><img src='images/delete.gif' alt='delete' border=0 /></a><
    /td>[/color]
  59. [color= #0000ff;] <td><a href='?p=$p&delete=$row[0]'><img src='images/delete.gif' alt='delete' border=0 /></a><
    /td>[/color]
  60. [color= #0000ff;] <td><a href='?p=$p&act=$row[0]'><img src='images/act$row[5].gif' alt='Active/Deactive' border
    =0 /></a></td>[/color]
  61.  
  62. [color= #0000ff;] <td><a href='?p=$p&edit=$row[0]'><img src='images/edit.gif' alt='edit' border=0 /></a></td>[/color]
  63. [color= #0000ff;] <td><a href='?p=$p&delete=$row[0]'><img src='images/delete.gif' alt='delete' border=0 /></a><
    /td>[/color]
  64. [color= #0000ff;] </tr>[/color]
  65. [color= #0000ff;] "[/color][color= #339933;];[/color]
  66. [color= #009900;]}[/color]
  67. [color= #000033;]$admin_page_text[/color][color= #339933;].=[/color] [color= #0000ff;]"</table>"[/color][color= #339933;];[/color]
  68.  

بقي لدينا

- عملية تفعيل وعدم تفعيل الصفحات

- عملية ترتيب الصفحات

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

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نكمل بمشيئة الله ....

لعملية التفعيل وعدمه نقوم بوضع متغير بإسم act مثلا ونعطيه قيمة المقبض ..

ونكتب قبل عملية عرض الصفحات في صفحة مدير الصفحت الكود التالي :

if($act){
$result = mysql_query("Select * From pages where id=$act");
$row = mysql_fetch_array($result, MYSQL_NUM);
if($row[5]){$val_act=0;}else{$val_act=1;}
mysql_query("UPDATE `pages` SET page_active = '$val_act' WHERE `id`=$act");
$error_msg="Activate done!";
}

قمنا بالبحث عن رقم التفعيل وهو صفر أو واحد ثم قمنا بقلب قيمة وتخزينها

لتظهر العمليه يمكن وضع صورة مصباح وتكون إسم الصورة كالتالي :

1act.png >>>> 2act.png

ونقوم بوضع قيمة التفعيل في عملية سرد الصفحات كالتالي :

<a href='?p=$p&act=$row[0]'><img src='images/$row[5]act.png' alt='Active/Deactive' border=0 /></a>

عملية ترتيب الصفحات :

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

<input type='text' name='$no1' size='5' Value='$row[3]'>

وقيمة ال$no1 هي مصفوفه كمايلي :

  $no1='no['.$row[0].']';

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

if ($sortnow){
foreach($no as $key => $value){
mysql_query ("UPDATE pages SET
page_sort = '$value'
WHERE ID = '$key' ");
}
}

ولتتم عملية الترتيب في السرد نعدل على جملة السيكول الخاصه بإضهار الصفحات كمايلي :

انسخ الكود
  1. [color= #993333; font-weight: bold;]SELECT[/color] [color= #66cc66;]*[/color] [color= #993333; font-weight: bold;]FROM[/color] &[color= #808080; font-style: italic;]#96;pages` ORDER BY `pages`.`id` DESC [/color]
  2.  
  3.  
  4.  

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

لآننا لانعلم ماعدد الأماكن التي سيكون فيها لينكات للصفحات ولأننا نريد أن تكون مجلتنا دايناميك أكثر ويمكن التحكم بها أكثر سنقوم بعمل قالب لهذه اليست كما يلي

$place_page="
<select name='%place_ch%'>
<option value='0' selected='selected'>Please Select</option>
<option %sel[1]% value='1'>Up</option>
<option %sel[2]% value='2'>Down</option>
</select>
";

وفي عملية السرد نقوم بالتعديل التالي :

  $place_ch='place_ch['.$row[0].']';
$sel='';
$sel[$row[4]]="selected='selected'";
$new_var = array($place_ch,$sel[1],$sel[2]);

السطر الأول كما في عملية الترتيب

والسطر الثاني لعميله إظهار أين مكان هذه الصفحة في القائمة

والسطر الثالث أصبح معروف أنه لعمليه وضع المتغيرات الجديده داخل القالب

وفي عملية الإرسال فقط نعدل على عملية الترتيب وتحديدا على جملة السيكول لتصبح كما يلي :

mysql_query ("UPDATE pages SET
page_sort = '$value' , page_place = '$place_ch[$key]'
WHERE ID = '$key' ");

وتصبح الصفحة كامله كما يلي :

if($act){
$result = mysql_query("Select * From pages where id=$act");
$row = mysql_fetch_array($result, MYSQL_NUM);
if($row[5]){$val_act=0;}else{$val_act=1;}
mysql_query("UPDATE `pages` SET page_active = '$val_act' WHERE `id`=$act");
$error_msg="Activate done!";
}
if($delete){
mysql_query("delete from pages where id=$delete");
$error_msg="Deleted done!";
}

if ($sortnow){
foreach($no as $key => $value){
mysql_query ("UPDATE pages SET
page_sort = '$value' , page_place = '$place_ch[$key]'
WHERE ID = '$key' ");
}
}


if($edit){
if($id_edit){
mysql_query("UPDATE `pages` SET page_name = '$title_edit',Page_cont = '$FCKeditor1' WHERE `id`=$id_edit");
$error_msg="update done!";
}else{
$result = mysql_query("Select * From pages where id=$edit");
$row = mysql_fetch_array($result, MYSQL_NUM);
$FCKeditor1=$row[2];
$old_var = array("%title_edit%", "%id_edit%","%id_edit_name%", "%update%");
$new_var = array($row[1],$edit,"id_edit","Update");
$admin_page_from_text1 = str_replace($old_var, $new_var, $Template_page_page1);
$admin_page_from_text2 = str_replace($old_var, $new_var, $Template_page_page2);
}
}

if($addnew){
if($id_new){

mysql_query("INSERT INTO pages ( `id` ,`page_name` ,`Page_cont`)VALUES (NULL , '$title_edit', '$FCKeditor1');");
$error_msg="done!";
}else{
$old_var = array("%title_edit%", "%id_edit%","%id_edit_name%", "%update%");
$new_var = array("","1","id_new","Add new");
$admin_page_from_text1 = str_replace($old_var, $new_var, $Template_page_page1);
$admin_page_from_text2 = str_replace($old_var, $new_var, $Template_page_page2);
}
}



$admin_page_text="
<br> <form method='POST'><a href='?p=$p&addnew=1'>Add new</a>
<table style='width: 40%'>
<tr>
<td>Nu.</td>
<td>Page title</td>
<td>Sort</td>
<td>Place</td>
<td>Active</td>
<td> </td>
<td> </td>
</tr>
";
$result = mysql_query("Select * From pages ORDER BY id ASC");
$old_var = array("%place_ch%", "%sel[1]%","%sel[2]%");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$no1='no['.$row[0].']';
$place_ch='place_ch['.$row[0].']';
$sel='';
$sel[$row[4]]="selected='selected'";
$new_var = array($place_ch,$sel[1],$sel[2]);


$admin_page_text.= "
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
<td><input type='text' name='$no1' size='5' Value='$row[3]'></td>
<td>";
$admin_page_text.= str_replace($old_var, $new_var, $place_page);
$admin_page_text.="</td>
<td><a href='?p=$p&act=$row[0]'><img src='images/$row[5]act.png' alt='Active/Deactive' border=0 /></a></td>

<td><a href='?p=$p&edit=$row[0]'><img src='images/edit.gif' alt='edit' border=0 /></a></td>
<td><a href='?p=$p&delete=$row[0]'><img src='images/delete.gif' alt='delete' border=0 /></a></td>
</tr>
";
}
$admin_page_text.= "</table><input type='submit' value='Sort now' name='sortnow'></form>";

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

ملف الموقع حتى هذا الدر في المرفق blood.rar

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@ MiNi.SpIdEr : موفق بدوامك :) أنا من ناحيتي مابداوم ولله الحمد

@ Bash ek : بارك الله لك , متابعين إن شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

أفضل أن تكون عدد الصفحات قليله لذلك سيكون لدينا صفحة القوالب وصفحة العرض وصفحة الإعدادت

نبدا بسم الله بصفحة العرض , صفحة الإعدادات مبنية مسبقا :

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

نقوم بعد ذلك بأخذ نفس كود عرض الصفحات في صفحة مدير الصفحات مع تعديل في جملة السيكول (أين المفعل = 1) حلو الكود باللغة العربية :)

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

<LI ><A href='?id=$row[0]'>$row[1]</A> </LI>

إلى الآن هذا هو كود الصفحة الرئيسية :

<?
session_start();
include "conf.php";
$result = mysql_query("Select * From pages where page_active=1 ORDER BY page_sort ASC");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$button.="<LI class=on><A href='?id=$row[0]'>$row[1]</A> </LI>";
}

echo $button;
?>

لنقم بعرض البيانات إذا تم الضغط على أي زر كما يلي :

if($id){
$result = mysql_query("Select * From pages where id=$id and page_active=1 limit 1");
$row = mysql_fetch_array($result, MYSQL_NUM);
$content=$row[2];
}

هل هناك أي صعوبه أو تعقيد في الموضوع ؟ لا أعتقد ذلك

بقي لدينا عملية إضافة الإعدادات الخاصة بموقعنا مثل العنوان والنبذة عن الموقع والحقوق ... إلخ

كيف تتم هذه العملية ؟

الجواب بسيط كما كنا نقوم بتغيير المتغيرات في القالب سنقوم بتغيير الإعدادت في قالبنا ...

سأشرح أكثر : سنقوم ببناء صفحة القوالب الخاصه بموقعنا كما يلي :

نقوم بإنشاء صفحة بإسم template.inc

سنضع قالب بسيط لموقعنا الجديد يمكننا الإستعانه بهذا الموقع لتسريع الأمر , إختر ماشئت من القوالب :)

أخذت القالب الثاني وهذه النتيجة :

<?
$my_simple_tmplt='
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>%title%</title>
<style type="text/css">

body{
margin:0;
padding:0;
line-height: 1.5em;
}

b{font-size: 110%;}
em{color: red;}

#maincontainer{
width: 840px; /*Width of main container*/
margin: 0 auto; /*Center container on page*/
}

#topsection{
background: #EAEAEA;
height: 90px; /*Height of top section*/
}

#topsection h1{
margin: 0;
padding-top: 15px;
}

#contentwrapper{
float: left;
width: 100%;
}

#contentcolumn{
margin-right: 200px; /*Set right margin to RightColumnWidth*/
}

#rightcolumn{
float: left;
width: 200px; /*Width of right column*/
margin-left: -200px; /*Set left margin to -(RightColumnWidth) */
background: #FDE95E;
}

#footer{
clear: left;
width: 100%;
background: black;
color: #FFF;
text-align: center;
padding: 4px 0;
}

#footer a{
color: #FFFF80;
}

.innertube{
margin: 10px; /*Margins for inner DIV inside each column (to provide padding)*/
margin-top: 0;
}
</style>
</head>
<body>
<div id="maincontainer">

<div id="topsection"><div class="innertube">%title%</div></div>

<div id="contentwrapper">
<div id="contentcolumn">
<div class="innertube"><b>%content%</div>
</div>
</div>

<div id="rightcolumn">
<div class="innertube"><b>%button%</div>

</div>

<div id="footer"><a href="http://www.arabteam2000-forum.com/index.php?showtopic=183291">%Copyrights%</a></div>

</div>
</body>
</html>
';
?>

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

وسنقوم بدمجه في موقعنا الجديد كما يلي :

قمنا بإنشاء ملف جديد للستايل بإسم cms.css ووضعنا فيه كل الستايلات وبهذا صفى القالب على هذا الشكل

$my_simple_tmplt='
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<link rel="stylesheet" type="text/css" href="cms.css" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>%title%</title>
</head>
<body>
<div id="maincontainer">

<div id="topsection"><div class="innertube">%title%<br>
<ul class="solidblockmenu">
%button%
</ul>
</div></div>

<div id="contentwrapper">
<div id="contentcolumn">
<div class="innertube"><b>%content%</div>
</div>
</div>

<div id="rightcolumn">
<div class="innertube"><b>%button%</div>

</div>

<div id="footer"><a href="http://www.arabteam2000-forum.com/index.php?showtopic=183291">%Copyrights%</a></div>

</div>
</body>
</html>
';

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

صورة للموقع بعد تنزيل برنامج السناجيت (snaget) لآنو عندي مشكله في الوندوز7 زي ماقلتلكم متخلف من ناحية البرنت سكرين

post-21336-1233716269_thumb.png

للتذكير :

بســم الله الـرحمــن الرحيــم

تم بحمد الله رفع الملفات على هذا الموقع

http://www.bloodspotsite.com

سيكون بإمكان الجميع تجربة الكود أول بأول ورؤية مثال مباشر ...

للوصول إلى صفحة المدير كما ذكرنا سابقا من خلال هذه الوصله

http://www.bloodspotsite.com/administrator/

سيطلب إسم مستخدم ورقم سري وهي

user=admin

pass=123

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

والسلام عليكم

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@MiNi.SpIdEr : شكرا للك , الفكرة أنني أخاف بعد فترة من ضياع القارئ وعدم فهمه للشرح وبهذا يكون كل شرحي هباء , بالنسبه للأفكار يمكنك المشاركه بها منذ الآن فالمشوار طويل جدا بإذن الله

@koao : الحقيقه أفرحني كلامك كثير فهذا يعني أن هناك من يستفيد وأرجو من الله أن تكون الفائدة للمسلمين كبيره , من ناحية لخوض في الأمن والحمايه ستكون من ضمن الشرح ولكن في وضع متقدم جدا بإذن الله فهذا درس شامل للويب2 وسأجيبك عن سؤالك بالنسبه للتمبليت أو القوالب في رد آخر بإذن الله .

@فؤاد الشامي : العفو :) وجزاك الله خيرا .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@ MiNi.SpIdEr : :) بس في مشكله بالويندوز7 وهيه كرت الشاشه بضل يضرب الريزليوشن غير هيك مافي أي مشكله صراحة , شكلهم سارقين الأبونتو ومركبية ثيم إله على أساس يصير ويندوز7 هههههه , من ناحية الموضوع صحيح فرحت أنو في متابعين :) وإن شاء الله مانتأخر بالردود بس لآنو بكون مشغول بعده مواقع.

@lfc18 : شكرا لك وإن شاء الله بالتوفيق للجميع .

الآن نأتي إلى سؤال الأخ koao عن القوالب وأشار إليه بالملف template.inc, لقد شرحت أن إسم الملف ولا إمتداده لهم أي علاقة في الموضوع يعني تقدر تسمي ملف القوالب b.php ... a.html أو أي شيء , والفكرة العامة من القوالب هي ترك مجال مفتوح للمطورين بإمكانيه تغيير ستايل الموقع.

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

لقوالب بالعادة تتكون من كود هتمل HTML والستايل CSS والصور الخاصة بالقالب وسأقوم بالدرس القادم بعمل قالب جديد للموقع ويمكن لأي شخص تغيير القالب والتبديل بين القوالب, يعني رح يكون في لوحة التحكم إمكانيه رفع قالب فحضروا حالكم بدنا همه وتصاميم تفرح القلب :)

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بسم الله الرحمن الرحيم ...

الآن نبدأ في عملية شرح كيفية تغيير القالب ..

في البداية سنقوم بإنشاء مجلد بإسم template وداخل هذا المجلد سنقوم بإنشاء مجلد آخر بإسم default ونقوم بوضع كل ملفات القالب في مجلد الديفولت (الأصل)

الملفات التي سيتم نقلها هي : template.inc و cms.css بالإضافة إلى مجلد الصور ... لكي لا تتشابك معك الأمور هذه الملفات الموجوده على الروت يعني ما إلنا دخل حاليا بمجلد المدير administrator

بعد نقل الملفات سنقوم بالتعديل على الكود في الصفحة الرئيسية للموقع index.php بحيث نستدعي القالب من المكان الذي وضعناه فيه template > default > template.inc

include "template/default/template.inc";

هذه هي صورة الموقع بعد تغيير مسار القالب : post-21336-1234102701_thumb.png

حدث هذا لآن مسار الستايل خاطئ فنرى أنه أخذ القالب دون الصور وألوان الخطوط وغيرها , أممم لماذا ؟ لآن عملية الإنكود تجعل الصفحة المستدعيةtemplate/default/template.inc وكأنها في نفس مسار الصفحة الام index.php <<< وهذه مشكله يمكن حلها بأن نقوم بتخزين مسار القالب في جدول الإعدادات وإعطاءه للإستدعاء بالإضافة إلى الملفات داخل القالب وفي مثالنا سنقوم بالتالي :

في الصفحة الرئيسية نكتب المسار (بعدين منشوف كيف نستدعيه من قاعدة البيانات) كما يلي :

$TEMPLATE_link='template/default/';
include $TEMPLATE_link."template.inc";

في صفحة القالب نطلب المسار لعملية ضم الستايل كما يلي :

انسخ الكود
  1. [color= #339933;]<[/color]link rel[color= #339933;]=[/color][color= #0000ff;]"stylesheet"[/color] type[color= #339933;]=[/color][color= #0000ff;]"text/css"[/color] href[color= #339933;]=[/color][color= #0000ff;]"'.$TEMPLATE_link.'cms.css"[/color] [color= #339933;]/>[/color]
  2.  
  3.  
  4.  
  5.  

الفكرة بسيطه أعتقد !! وإلا فيها صعوبه ؟

كل إللي ساويناه عملية إضافة متغير يحمل مسار القالب وفي القالب يتم إستخدما هذا المتغير بدون تعريف مسبق لآنو صار القالب من ضمن الصفحة الرئيسيه وبهيك أي ملف بنستدعيه داخل القالب لازم نحط قبله مسار القالب , وضحت الأمور ؟ أتمنى ذلك .

الآن سنقوم بعمل قالب جديد ... الخطوات :

1- إنشاء مجلد بإسم القالب وليكن new_style

ننشئ داخل المجلد ملف التمبليت بنفس إسم ملف القوالب template.inc

نذهب إلى الموقع الذي أشرت له سابقا ونختار تصميم وليكن هذا التصميم :http://www.dynamicdrive.com/style/layouts/item/css-top-and-bottom-frames-layout/

نقوم بفصل الستايل عن الهتمل (HTML) في ملف جديد ونسميه أي إسم وليكن cms.css ونستدعي الستايل كما تعلمنا في هذا الدرس من خلال هذا الكود

انسخ الكود
  1. [color= #339933;]<[/color]link rel[color= #339933;]=[/color][color= #0000ff;]"stylesheet"[/color] type[color= #339933;]=[/color][color= #0000ff;]"text/css"[/color] href[color= #339933;]=[/color][color= #0000ff;]"'.$TEMPLATE_link.'cms.css"[/color] [color= #339933;]/>[/color]
  2.  
  3.  
  4.  
  5.  

نقوم بتعديل المتغيرات داخل القالب الرئيسي لتتوافق مع مانريد فيصبح كما يلي :

<?
$my_simple_tmplt='
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<link rel="stylesheet" type="text/css" href="cms.css" />
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>%title%</title>
</head>
<body>
<div id="maincontainer">

<div id="topsection"><div class="innertube">%title%<br><br>
<ul class="solidblockmenu">
%button%
</ul>
</div></div>

<div id="contentwrapper">
<div id="contentcolumn">
<div class="innertube"><b>%content%</div>
</div>
</div>

<div id="rightcolumn">

<div class="arrowlistmenu">

<h3 class="headerbar">CSS Library</h3>
<ul>
%button%
</ul>

</div>

</div>

<div id="footer"><a href="http://www.arabteam2000-forum.com/index.php?showtopic=183291">%Copyrights%</a></div>

</div>
</body>
</html>
';
?>

ونختار أزرار أفقية معينه وإخترت هذه الأزرار http://www.dynamicdrive.com/style/csslibra..._buttons_menu/# الستايل في ملف الستايل فقط للترتيب وكود الهتمل في القالب الرئيسي .

نلاحظ أن هناك مشكله في تركيب الأزرار ,, وهي في المرحلة الأولى كانت الأزرار يجب أن تكون كالتالي :

<LI><A href='?id=$row[0]' $current>$row[1]</A> </LI>

والأزرار الجديده كالتالي :

<a href="?id=$row[0]" class="aero"><span>$row[1]</span></a>

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

<LI><A href='?id=%row0%' %current%>%row1%</A> </LI>

تم تصميم القالب الجديد ولله الحمد , يمكنك تغيير القالب حاليا عن طريق الضغط على contact us أو أي زر آخر

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

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@ koao : الحمد لله , هل قمت بالتطبيق :) أتمنى ذلك.

@ جريب فروت : جزاكي الله خير , أتمنى أن تعم الفائده أكثر إن شاء الله .

نكمل إن شاء الله ...

في البداية هذا الدرس عن إضافة تحكم بالقوالب عن طريق لوحة التحكم

أولا : إضافة لينك لصفحة التحكم بالقوالب (صار الأمر سهل فمافي داعي للشرح)

ثانيا : إن شاء صفحة تحكم بالقوالب ... manag_template.php مثلا

الآن نفكر في صفحة القوالب وعلى ماذا ستحتوي ...

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

لنقم بالتنفيذ

بسم الله ...

لإظهار جميع المجلدات داخل مجلد القوالب :

<?php
/***************Read Dir***************/
$dir = "../template/";
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file=='.' || $file=='..' || filetype($dir . $file)!='dir'){}else{
$admin_page_text.= "<br/>$file <br/>\n";
}
}
closedir($dh);
}
?>

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

$admin_page_text.= "<br/><a href='?p=$p&file_pik=$file'>$file</a> <br/>\n";

ونستخدم هذا الكود للإضافة :

/****************Edit setting template*****************/
if($file_pik){
mysql_query("UPDATE `sett` SET `s_value` = '$file_pik' WHERE `s_string`='%Template_style%'");
$error_msg="done!";
}

إلى الآن الأمور إن شاء الله واضحة ومافيها تعقيد ....

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

$TEMPLATE_link='template/new_style/';

ليصبح كالتالي :

$TEMPLATE_link='template/'.sett_site('%Template_style%').'/';

نعود الآن إلى صفحة مدير القوالب :

سنقوم بعمل نموذج لرفع الملف الخاص بالقالب ومن ثم نفك ضغط هذا الملف داخل مجلد القوالب كما إقترحنا من قبل (أو كما إقترحت أنا من قبل :) )

النموذج في صفحة القوالب الخاصه بالمدير template.inc

$template_add_new='
<form name="frm" action="" method="POST" enctype="multipart/form-data">
%zipfilename% <br/>
<input type="file" name="zipfile">
<input type="hidden" name="id_new" value="1"/>
<input type="submit" name="okupload" value="%upload%" />
</form>
';

إستدعاء النموذج في صفحة مدير القوالب :

/*****************Add new*******************/
if($addnew){
if($id_new){

$error_msg="done!";
}else{
$old_var = array("%zipfilename%", "%upload%");
$new_var = array(".zip file :","Upload Now");
$admin_page_text = str_replace($old_var, $new_var, $template_add_new);

}
}else{
$admin_page_text.= "<a href='?p=$p&addnew=1'>Add new template</a> <br/>\n";
}

الآن عملية تخزين الملف المضغوط وفك ضغطه ...

عملية التخزين لانحتاجها لآننا سنقوم بفط الضغط إما مباشرة أو نخزنه في مجلد مؤقت ومن ثم نقوم بحذفة ... إذن عملية فك الضغط هي الأهم .. ماهي الطرق التي يمكن فك ضغط الملفات عن طريقها ؟

كما قلت أحب الطرق البسيطه والكود القصير , هناك سكريبتات جاهزه لهذه العملية ولكنها طويله أولا وثانيا يمكن أن لاتكون مهمه معظم ما في السكريبت لذلك أفضل أن أعرف كل سطر في السكريبت ماهو عمله ,

سأطيل الشرح هنا قليلا :

هناك نظام يدعى لينكس ومعظم السيرفرات في العالم هي لينكس ويفضل أن يكون السيرفر الذي سينزل عليه موقعك هو لينكس لآن اللينكس فيه برامامج كثيره وأهم مايميز هذه البرامج هو إمكانيه تنفيذها من خلال البي أتش بي

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

القوة التي لمستها أنا (يعني رأيي الشخصي, في قوه أكبر بس هذا إللي لمسته في اللينكس) هو إمكانيه تنفيذ البرامج من خلال البي أتش بي وبأوامر بسيطه وغير معقده

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

في حالتنا هذه نريد فك ضغط ملف معين من خلال كود الشيل (shell command)

أولا لتنفيذ الكود نستخدم الدالة

 exec("command here ");

ثانيا : هذه الأوامر لن تنفذ على سيرفر محلي موجود على ويندوز للأسف .

كود رفع الملف وفك ضغطة وحذفه :

$uploaddir = '../template/';

$uploadfile = $uploaddir . basename($_FILES['zipfile']['name']);

if (move_uploaded_file($_FILES['zipfile']['tmp_name'], $uploadfile)) {

shell_exec("unzip ".$_SERVER['DOCUMENT_ROOT']."/template/".basename($_FILES['zipfile']['name'])." -d ".$_SERVER['DOCUMENT_ROOT']."/template/");

unlink ($uploadfile);

$error_msg= "File is valid, and was successfully uploaded.\n";

} else {

$error_msg= "Possible file upload attack!\n";

}

لاحظ كود فك الضغط :

	  shell_exec("unzip ".$_SERVER['DOCUMENT_ROOT']."/template/".basename($_FILES['zipfile']['name'])." -d ".$_SERVER['DOCUMENT_ROOT']."/template/");

سطر واحد فقط وعلى فكره في إمكانيه لعمل حذف للملف بنفس السطر بس مشان الوقت ماقدرت أبحث عن الطريقة ولاحظوا الدالة المستخدمه , يمكن إستخدام أي دالة exec أو shell_exec بس مابعرف الفرق بيناتهم , أعتقد الأولى لتنفيذ برامج والثانيه فقط لأوامر الشل والله أعلم .

ملاحظه : الملف يجب أن يكون بإمتداد .zip ويكون القالب وجميع محتوياته داخل مجلد بإسم القالب كما في المثال المرفق red_style.zip

مجلتنا في هذا الملف إلى ماوصلنا اليوم : cms_arabteam2000.zip

من الآن أتمنى أن يكون هناك فريق تطوير لهذه المجله وسنقوم بإقتراح أمور يقوم المطورين بتنفيذها وأنا أقوم بتجميعها وتركيبها فما رأيكم بهذه الفكره ؟

شكرا لكم

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@ MiNi.SpIdEr : ههههههه لا والله الفكره مش بالتعب بس الوقت كثير ضيق ومع التجربه ببين إنو في أخطاء وممكن الجميع يشارك في حلها , أنا أصلا عامل مجلة وأعتقد إنها قوية رح أنزلها بالمنتدى بس أنتهي منها , تقريبا بنهاية هذا الشهر بتكون جاهزه بإذن الله , بس مارح أنزلها سورس كود :) بس إللي بدو يجربها على أساس يتم مناقشة الأفكار الموجوده. حابب أفيد المجتمع العربي بكل إللي عندي وإن شاء الله مابنقصر :)

@ lafkih-simo : جزاك الله خير وغفر لوالديك :) جميل الدعاء للآباء .

أتمنى يكون مع الرد إنتقاد للشرح إذا كان صعب أو مفهوم لأتأكد من وصول المعلومه , وقريبا نكمل مشان مايكثر الحكي من طرف أبو عنكبوت :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أولا لاتوجد مشاكل في قائمة تحرير :) ربما من المتصفح الذي تستخدمه

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

وجزاك الله خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بسم الله الرحمن الرحيم

لكي لا نمل من الشرح المتواصل سننتقل إلى درس جديد ومهم الحقيقه

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

وسأسميه أدوات نحو التميز

من هذه الأدوات التي سنستخدمها

أولا إغلاق الثغرات التي في الموقع وذلك كما يلي :

هناك ثغرتين كنت قد تكلمت عنهما في معظم الموقع في موضوع منفصل , هنا سنأتي إلى الكود مباشرة دون الخوض في تفاصيل الثغرات

يمكن الحمايه من أكثر هذه الثغرات فتكا من خلال كود :

foreach($_GET as $KEy => $VAl){ $$KEy=htmlspecialchars(strip_tags(addslashes($VAl))); }
foreach($_POST as $KEy => $VAl){ $$KEy=htmlspecialchars(strip_tags(addslashes($VAl))); }

هذا الكود قمت بعمله وهوغير كاف , ولكنه ممتاز مبدئيا

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

أما داخل لوحة التحكم فيكفي وضع هذا الكود :

foreach($_GET as $KEy => $VAl){ $$KEy=addslashes($VAl); }
foreach($_POST as $KEy => $VAl){ $$KEy=addslashes($VAl); }

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

يوضع هذا الكود في الصفحة الرئيسيه بعد فتح الجلسة مباشرة

بالنسبه للصفحات الداخليه في مجلد لوحة التحكم يمكن حمايتها من خلال وضع كود بعد عملية التسجيل :

		 session_register('no_hack');
$no_hack=session_id();

هنا عرفنا متغير يساوي قيمة رقم الجلسة

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

  if($no_hack!=session_id()){
session_unset();
session_destroy();
echo '<meta http-equiv="refresh" content="0; url=?" />';
exit();}

هذا الكود ربما يكون جيد فقد جربته وكان قادرا على صد الهاكر ولكن ليس هناك ضمان 100% في عالم البرمجه

شكرا لكم وأي تعليق أو إعتراض سأكون هنا للإستفسار

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أشكرك أخي عنكبوت :) الجميل أنك مازلت من المتابعين

نكمل الدرس ... الأداة الثانيه سأسميها الرابط المثالي , أو الصديق ,

عندما نقوم بتصفح المواقع نجد بعض المواقع تختلف روابطها عن الروابط التي إعتدناها فمثلا الراوبط التي تعودنا عليها في مواقعنا هي

http://www.bloodspotsite.com/?id=11

http://www.bloodspotsite.com/?id=12

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

http://www.bloodspotsite.com/contact/bastr3/page/11/

من خلال الرابط نعلم أن الصفحة تؤدي إلى معلومات للإتصال بي , فكيف يمكن جعل مجلتنا تحتوي على مثل هذه الروابط ؟

لنبدأ بالكود ...

هناك ملف يدعى .htaccess هذا الملف له مميزات كثيرة منها الحمايه ومنها خصائص وإعدادات للمواقع وأينما وضع هذا الملف يؤثر في المجلد الذي وضع به وبالمجلدات الداخليه لهذا المجلد (sub folders) .

سنقوم بإنشاء ملف في داخل السيرفر بهذا الإسم .htaccess , في الويندوز ربما تواجه مشكله عندما تقوم بتسميه ملف كهذه التسميه , وفي السيرفر المحلي ربما ان هذا الأمر لن ينفع .

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

RewriteEngine on
RewriteRule ^page/(.*)/([0-9]+)/(.*)$ ?id=$2

ومعنى هذا الكود, أن أي رابط يبدأ بكلمة بيج (page) فما بعدها يعتبر متغير وآخر كلمة في الرابط يجب أن تكون رقم وتعتبر متغير رقم 2

http://www.bloodspotsite.com/page/any/word..._any_think.html

لاحظو كيف الرابط أصبح له خيارات كثيره يمكن شرح محتوى الصفحة من خلال الرابط

بعد هذه العملية سنقوم بتجربتها على موقعنا :) سنجد أن الصور والستايل لم يعد له وجود وذلك لآننا كنا نستدعيه وكأنه بنفس المجلد

<link rel="stylesheet" type="text/css" href="template/red_style/cms.css" />

أما مع الرابط الجديد فقد أصبح الرابط كالتالي :

http://www.bloodspotsite.com/page/any/word...d_style/cms.css

وهذا فعليا غير موجود ! فما العمل ؟

الأمر غاية بالبساطه فقط قم بوضع سلاش قبل كل ملف تستدعيه ليرجع إلى الروت , يصبح الكود كالتالي :

<link rel="stylesheet" type="text/css" href="/template/red_style/cms.css" />

وهكذا نكون قد تخلصنا من المشكله التي تواجه الكثير ممن يحاولون الوصول لهذه التقنيه في مواقعهم

طبعا في مجلتنا سنقوم بتعديل السطر الموجود في الصفحة الرئيسيه للموقع

$TEMPLATE_link='/template/'.sett_site('%Template_style%').'/';
$TEMPLATE_link1='template/'.sett_site('%Template_style%').'/';
include $TEMPLATE_link1."template.inc";

الآن سنقوم بتعديل الروابط لتصبح أكثر مثاليه في مواقعنا ...

التعديل سيكون في ملفات القوالب نعدل الروابط لتصبح كما نريد

$button_temp='<a href="/page/%row1%/%row0%/" class="aero"><span>%row1%</span></a>';

بعد التعديل أصبح الرابط كالتالي : http://www.bloodspotsite.com/page/contact%20us/1/

على شو بدل الرابط ؟؟؟؟

لاحظو بعض الروابط بطلت تشتغل مثل : http://www.bloodspotsite.com/page/??/6/

بهاي الحاله لازم نعرف شو بدنا نكتب في الإسم أو سنقوم بفحص الإسم وتحسين وضعه ليتناسب مع موقعنا :)

في الدرس القادم بإذن الله سيتم شرح طريقة فحص الرابط وتنسيقه أوتوماتيكيا , لآنو أكيد الموقع رح يشتغل عليه ناس ما إلهم كثير على تصميم المواقع (data entry).

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

@أخي عنكبوت الموقع عبارة عن بلوغ صح ؟ أقصد موقعك :) , جميل وصراحة ما أعرف أركب سريبتات جاهزه ونادر ما أستخدمها في شغلي لآني أكره أدرس طريقة عمل السكريبت :)

لذلك لا أعلم ماهي السكريبتات التي إستخدمتها , الموقع فيه أدوات جميله ومواضيع حلوه :) ..

من ناحية العنوان إن شاء الله بتم إللي خبرتنا عنه

من ناحية المجله هاي نسخة 1.5 بيتا لآنو النسخة الأولى فيها ثغرات كثيره وحاليا بسكر بهاي الثغرات . ومن ناحية التصاميم فهذا لا علاقة لي به فأنا مبرمج والمصممون هم المسأولون عن هذا الأمر :) . تصميم لوحة التحكم أنا قمت به .

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

@koao شكرا لك أخي الكريم , أعتقد أنك من المتابعين :) بالنسبه لموضوع الثغرات هنا موضوع قمت بشرح كل ثغرة والحل لها .. وكان هناك تفاعل من قبل الأعضاء جزاهم الله خير وهذا هو الموضوع : http://www.arabteam2000-forum.com/index.php?showtopic=188305 ومازال قائما ...

بالنسبه للخلل في كبسة إلغاء سيتم تصحيحها بإذن الله ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لحل مشكله إلغاء الأمر :

في صفحة : /administrator / index.php

يتم تعديل السطر :

if($cancel){  header("Location: ?p=$p");}

إلى :

if($cancel){
$p1=$_GET['p'];
foreach($_GET as $KEy => $VAl){ $$KEy=''; }
foreach($_POST as $KEy => $VAl){ $$KEy=''; }
$p=$p1;
}

قمنا بإلغاء جميع المتغيرات والإبقاء على متغير الصفحة حتى لا نرجع إلى الصفحة الرئيسيه في كل عملية إلغاء لأمر .

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

#هنا الكود الذي يظهر العنوان (في الصفحة الرئيسية): 
/**************show page**************/
if($id){
$result = mysql_query("Select * From pages where id=$id and page_active=1 limit 1");
$row = mysql_fetch_array($result, MYSQL_NUM);
$content=$row[2];
}
/***************Setting******************/
$my_simple_tmplt = str_replace('%button%', $button, $my_simple_tmplt);
$my_simple_tmplt = str_replace('%content%', $content, $my_simple_tmplt);
$my_simple_tmplt = str_replace('%title%', sett_site('%title%'), $my_simple_tmplt);
$my_simple_tmplt = str_replace('%Copyrights%', sett_site('%Copyrights%'), $my_simple_tmplt);

سيتم تغييره إلى :
/**************show page**************/
if($id){
$result = mysql_query("Select * From pages where id=$id and page_active=1 limit 1");
$row = mysql_fetch_array($result, MYSQL_NUM);
$content=$row[2];
$s_title=$row[1];
}
/***************Setting******************/
$my_simple_tmplt = str_replace('%button%', $button, $my_simple_tmplt);
$my_simple_tmplt = str_replace('%content%', $content, $my_simple_tmplt);
$my_simple_tmplt = str_replace('%title%', $s_title." - ".sett_site('%title%'), $my_simple_tmplt);
$my_simple_tmplt = str_replace('%Copyrights%', sett_site('%Copyrights%'), $my_simple_tmplt);

سيتم رفع النسخة بشكل أتوماتيكي قريبا إن شاء الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نرجع لموضوع الرابط المثالي ...

لاحظنا أن هناك صفحات لم تعد تعمل لآنها تحتوي على علامات تخل بالرابط مثل ؟ @ $ وغيرها

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

سيتم تعديل القالب ليقبل متغير آخر للرابط لآن قيمة الرابط تختلف عن قيمة إسم الرابط

في ملف القالب نعدل : المتغير الجديد %row_1%

$button_temp='<LI><A href="/page/%row_1%/%row0%/" %current%>%row1%</A></LI>';

وفي الصفحة الرئيسيه للموقع نعدل :

	$old_var = array("%row1%","%row_1%", "%row0%", "%current%");
$new_var = array($row[1],urlencode($row[1]),$row[0],$current);

لاحظ في الموقع لم يعد يعطي الصفحة عير موجوده للرابط الذي يحتوي على علامة ؟؟

تم حل مشكله العربي .. في الحقيقه لم أواجه مشكله العربي إلا في هذا الموقع وإستغربت ذلك كثيرا وبعد البحث وجدت أنني أستخدم هذا الكود في ملف الكونف :

mysql_query("set character_set_server 'utf8'");
mysql_query ("set names 'utf8'");

فقمت بحذفه وجعلت ترميز الموقع يوتي أف 8 في لوحة التحكم والموقع ,,, الآن الموقع يقبل عربي

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

هذا الترميز الذي يوضع في ملف القالب للموقع وفي صفحة الإنديكس للوحة التحكم

نلاحظ أيضا من ضمن المشاكل التي ظهرت , مشكله عدم قبول ترتيب الصفحات أو تغيير أماكن ظهورها , وهذا بسبب كود الهاك لإغلاق ثغرات الهاكر , هذا الكود :

foreach($_GET as $KEy => $VAl){ $$KEy=addslashes($VAl); }
foreach($_POST as $KEy => $VAl){ $$KEy=addslashes($VAl); }

لآن عملية ترتيب الصفحات تكون من خلال متغير مصفوفه والكود السابق يقوم بجعل المتغير يساوي نفسة مع وضع سلاش , هنا يصبح متغير المصفوفه قيمته Array

لحل المشكله نقوم بإستدعاء المتغير من خلال دالة $_POST أي قبل أن تتم عليه عمليه وضع السلاش

هذا الكود الجديد في صفحة مدير الصفحات في لوحة التحكم

if ($sortnow){
foreach($_POST['no'] as $key => $value){
$value=addslashes($value);
$key=addslashes($key);
$place=$_POST['place_ch'];
$place=addslashes($place[$key]);
mysql_query ("UPDATE pages SET
page_sort = '$value' , page_place = '$place'
WHERE ID = '$key' ");
}
}

في الدرس القادم سنقوم بعمل بلوغ للموقع , فمن خصائص الويب 2 وجود نموذج للتفاعل مع زوار الموقع , سنحاول عمل بلوغ صغير مبدئيا سيكون دفتر زوار وبعدها سنحوله إلى بلوغ

أي ملاحظات ستكون مفيده فلا تبخلوا بها :)

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

درس عمل دفتر زوار لمجلتنا, مع الأخذ بعين الإعتبار رأي أخونا الكريم السيد عنكبوت :)

في البداية سنشرح ماهو دفتر الزوار ...

هو نموذج يتم من خلاله إرسال تعليقات على الموقع إلى مدير الموقع

يقوم المدير بتفعيل التعليق أو رفضه , ويمكن جعل هذا التعليق يظهر مباشره دون أي تدخل من المدير وهذا يعتمد على زوار الموقع ...

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

عادة النموذج يحتوي على الإسم والبريد الإلكتروني والموقع الإلكتروني والتعليق ...

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

بسم الله نبدأ

أولا قاعدة البيانات ستكون كالتالي :

CREATE TABLE `blog` (
`id` INT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`blog_name` VARCHAR( 200 ) NOT NULL ,
`blog_email` VARCHAR( 200 ) NOT NULL ,
`blog_comment` LONGTEXT NOT NULL ,
`blog_other` LONGTEXT NOT NULL
) ENGINE = MYISAM

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

الآن سنبدأ من صفحة الموقع , من ملف القوالب نضيف قالب جديد لنموذج دفتر الزوار ...

$form_blog='<form name="blog_form" method="post" action="">
<br>
Author:
<input type=text size=40 name=author><br>
<br>
E-mail:
<input type=text size=40 name=mail><br>
<br>
Text:<br>
<textarea cols=60 rows=10 name=text></textarea><br>
<input name="blog_submit" type="submit">
</form>';

ضمن كود الإعدادات في الصفحة الرئيسيه للموقع نضيف هذا السطر :

$my_simple_tmplt = str_replace('%blog_site%', $form_blog , $my_simple_tmplt);

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

نضيف كود جديد بعد الإعدادت يعمل على تخزين محتويات النموذج :

if($blog_submit && $author  && $mail && $text){
mysql_query("INSERT INTO `blog` (
`id` ,
`blog_name` ,
`blog_email` ,
`blog_comment` ,
`blog_other`
)
VALUES (
NULL , '$author', '$mail', '$text', '$other_text'
);");
$msg_show="Done! <br>thank you";
}

عملية إظهار التعليقات :

نضع في القالب الرئيسي :

$form_blog_show='
Author: %%author%%
<br>
E-mail: %%mail%%
<br>
%other_text%<br>

Comments:<br>
%%text%%
<br> <hr>
%%Nu%%
';

في الصفحة الرئيسيه للموقع ... في الاعلى قبل الإعدادات :

/***********blog show*************/
$result = mysql_query("Select * From blog ORDER BY id ASC");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$old_var1 = array("%%author%%","%%mail%%", "%other_text%", "%%text%%", "%%Nu%%");
$new_var1 = array($row[1],$row[2],$other_txt,$row[3],$Nu);
$blog_show.= str_replace($old_var1, $new_var1, $form_blog_show);
}

في الإعدادت :

$my_simple_tmplt = str_replace('%blog_site_show%', $blog_show , $my_simple_tmplt);

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

الدرس ما إنتهى يعني لسا في تتمه إن شاء الله

رح أرفق صور لسهوله الفهم

post-21336-1238508176_thumb.jpg

post-21336-1238508184_thumb.jpg

post-21336-1238508191_thumb.jpg

post-21336-1238508198_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نلاحظ من المثال السابق أن أي تعليق سيتم إظهاره فورا دون ترك مجال للمدير بالموافقه أو عدم الموافقه على هذا التعليق

لذلك سنقوم بإضافة حقل جديد في قاعدة البيانات وليكن : active_blog ونضيف حقل لتاريخ الإضافة فهذا مهم :) وليكن : date_blog

ALTER TABLE `blog` ADD `date_blog` VARCHAR( 20 ) NOT NULL ,
ADD `active_blog` INT( 1 ) NOT NULL ;
ALTER TABLE `blog` CHANGE `active_blog` `active_blog` INT( 1 ) NOT NULL DEFAULT '0'

الآن نقوم بالتعديل على القالب الخاص بنموذج البلوغ ونظيف حقل خاص بالتفعيل كمايلي :

$form_blog='<form name="blog_form" method="post" action="">
<input type=text size=40 name=active_blog value=0>
<br>
Author:
<input type=text size=40 name=author><br>
<br>
E-mail:
<input type=text size=40 name=mail><br>
<br>
Text:<br>
<textarea cols=60 rows=10 name=text></textarea><br>
<input name="blog_submit" type="submit">
</form>';

وضعنا القيمة صفر لهذا المتغير , وصفر تعني عدم إظهار التعليق , بينما واحد تعني إظهار التعليق . يمكن وضع هذه القيمة في جدول الإعدادات .

يتم تعديل جملة السيكول الخاصه بإضافة التعليق :

     mysql_query("INSERT INTO `blog` (
`id` ,
`blog_name` ,
`blog_email` ,
`blog_comment` ,
`blog_other`,`date_blog`,`active_blog`
)
VALUES (
NULL , '$author', '$mail', '$text', '$other_text','".time()."',$active_blog
);");

*معلومة : إستخدمت الدالة تايم في حفظ التاريخ لآنني أعتقد أنها أفضل طريقة لحفظ التاريخ والوقت داخل قاعدة البيانات , لآن هناك دوال تقوم بتحويل قيمة التايم في هذه الداله إلى أي شكل تريده من أشكال التاريخ والوقت .

في جمله عرض التعليقات نعدل جملة السيكول ونضيف لها (where active_blog=1)

الآن يأتي دور لوحة التحكم لنضيف صفحة جديده من خلالها يمكن التحكم في البلوغ كما يلي :

تم عمل نسخ لصفحة مدير الصفحات لآنها أقرب صفحة لما نريد عمله ... وبعدها قمنا بالتعديلات اللازم لتصبح كما يلي :


<?
$ro=mysql_fetch_array(mysql_query("Select * From sett where id=17"));
if($_COOKIE["no_hack"]==$ro[2]){
setcookie("no_hack",$ro[2], time()+3600);
}else{
setcookie("no_hack",'', time()+3600);
session_unset();
session_destroy();
echo '<meta http-equiv="refresh" content="0; url=?out=1" />';
exit();}


if($act){
$result = mysql_query("Select * From blog where id=$act");
$row = mysql_fetch_array($result, MYSQL_NUM);
if($row[6]){$val_act=0;}else{$val_act=1;}
mysql_query("UPDATE `blog` SET active_blog = '$val_act' WHERE `id`=$act");
$error_msg="Activate done!";
}
if($delete){
mysql_query("delete from blog where id=$delete");
$error_msg="Deleted done!";
}


$admin_page_text="

<table style='width: 40%;' border='1' >
<tr>
<td>Nu.</td>
<td>Author name</td>
<td> </td>
<td> </td>
</tr>
";
$result = mysql_query("Select * From blog ORDER BY id ASC");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
$admin_page_text.= "
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
<td><a href='?p=$p&act=$row[0]'><img src='images/$row[6]act.png' alt='Active/Deactive' border=0 /></a></td>
<td><a href='?p=$p&delete=$row[0]'><img src='images/delete.gif' alt='delete' border=0 /></a></td>
</tr>
<tr>
<td colspan='4'>$row[3]</td>
</tr>
";
}
?>

وهذه صورة لصفحة البلوغ في لوحة التحكم

post-21336-1238572034_thumb.png

ولسا الدرس ما إنتهى وإن شاء الله في تتمه قريبا

هذه نسخة من الموقع site1.03.zip... ربما لن تعمل بشكل صحيح لآنها تعتمد على السيرفر في الروابط , لوحة التحكم تعمل بشكل ممتاز على السيرفر المحلي , تم حذف المحرر وبقي المجلد الخاص به لسهوله تحميل النسخة , يوجد داخل مجلد المحرر (FCKeditor) ملف إقرأني فيه مسار لتحميل نسخة من المحرر

تم تعديل بواسطه bastr3
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .