السلام عليكم ورحمة الله وبركاته ، كل عام وانتم بخير
هذا درس عن تعدد الحقول والخيارات للأعضاء
يمكنك توظيفه لعمل تعدد الحقول مثل منتديات ال vb " ولكن مع تعديلات "
بالاضافة الى تعدد اختيارات العضو وساعتبرها checkbox مع اظهار

الاختيارات التى اختارها العضو
ملحوظة / انا استخدمت فى كتابة الاكواد دوال mysql ولكنى قمت بتحويلها فى

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

Mysql واخر ب mysqli
نبدأ على بركة الله :
----------------
أولا الجدول useroptions وهو فيه قائمة الاختيارات
كود:
CREATE TABLE IF NOT EXISTS `useroptions` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `desc` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

AUTO_INCREMENT=1 ;
تحليل الجدول :
* الحقل id خاص باى دى الاختيار
* الحقل name اسم الاختيار باللغة الانجليزية
* الحقل desc وصف الاختيار بأى لغة
---
الجدول الثانى وهو جدول بيانات الاعضاء users
كود:
CREATE TABLE IF NOT EXISTS `users` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

AUTO_INCREMENT=1 ;
INSERT INTO `uuf`.`users` (`id`, `username`) VALUES 

(NULL, 'test');
تحليل الجدول :
* الحقل id هو اى دى العضو
* الحقل `username` هو اسم العضو
ساكتفى انا بهذه البيانات وانت يمكنك ان تضيف من الحقول ما تشاء
والان نأتى الى الفكرة وكيفية ربط الجدولين ببعض
نبدأ بملف الاتصال بقاعدة البينات
اعمل ملف باسم config.php
* ملحوظة قمنا باضافة عضو اسمه test للتجربة
-------------------------------------------------

فورم اضافة اختيار جديد addform.php
كود PHP:

<html>

<
head>
<
meta http-equiv="Content-Type" content="text/html; 

charset=utf-8"
>
  <
title></title>
</
head>

<
body>
<
form name="add" action="addoption.php" 

method="post">
اسم الاختيار باللغة الانجليزية : <input name="name" type="text" 

value="">
وصف الاختيار  : <input name="desc" type="text" 

value="">
<
input type="submit" value="اضف">
</
form>

</
body>

</
html
اعتقد الفورم يشرح نفسه نأتى الى اهم جزء الان وهو اضافة الاختيار لقاعدة

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

يقوم السكربت باضافة حقل جديد فى جدول users باسم name وبالتالى تم

اضافة خاصية جديدة للعضو
-*-*-*-*-*-*-*-*-*-*
الملف addoption.php
كود PHP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; 

charset=utf-8">
  <title></title>
</head>

<body dir="rtl">

<?php

$name
=$_POST['name'];
$desc=$_POST['desc'];
// الحتقق من ان الحقل ليس فارغ
if(empty($name) or empty($desc)){
 
$err="عفوا احد الحقول فارغة <br />";
 include 
"addform.php";
 exit;
}
//     اضافة  البيانات
$link mysql_connect("localhost""root""")
  or die (
"Could not connect to MySQL");

mysql_select_db ("uuf")
  or die (
"Could not select database");
  
// اضافة حقل فى الجدول useroptions
  
$q="INSERT INTO `useroptions` (`id`, `name`, `desc`) 

VALUES (NULL, '
$name', '$desc');";
  
$r=mysql_query($q) or die (mysql_error());;
  
// أضافة  حقل جديد فى جدول users
$q2="ALTER TABLE  `users` ADD  `$name` VARCHAR( 

255 ) NOT NULL"
;
  
$r2=mysql_query($q2) or die (mysql_error());
// لو تم الاضافة
if( $r&& $r2){
echo 
"تم اضافة الحقل $name بنجاح ";
}
?>

</body>

</html>
الان انتهينا من اضافة الحقل
قم الان بالذهاب الى addform.php واضف بعض الاختيارات
-------------------------------------------------
نبدأ الان بعرض الاختيارات ثم تحديثها بالنسبة للعضو
أول عرض قائمة الأعضاء ننشأ ملف جديد اسمه userlist.php
وبكل تأكيد لن يعرض لنا سوى العضو test لانه هو الوحيد المضاف

كود PHP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; 

charset=utf-8">
  <title></title>
</head>

<body dir="rtl">

<?php
include"config.php";
$query "SELECT * FROM `users`";
$result mysql_query ($query)
  or die (
"Query failed");




 while (
$data mysql_fetch_array($result)) {

      
$id=$data['id'];
     
$username=$data['username'];
echo 
"<a href='showuser.php?

id=
$id'>$username</a><br />";

 }

?>

</body>

</html>
*****************************
الان الى اهم جزء فى الدرس وهو صفحة عرض الحقول وفيها تظهر بيانات

العضو بحيث يظهر له الـ checkbox التى تم اختيارها مٌعلم عليها
اعمل ملف جديد وسمه showuser.php
* الشرح فى الملفات :
كود PHP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; 

charset=utf-8">
  <title></title>
</head>

<body dir="rtl">

<?php

$id
=intval($_GET['id']);
// ألتحقق من ان اى دى العضو ليس فارغ
if(empty($id)){
echo 
"عفوا لقد اتبعت رابط خاطئ";
exit;

}
// الاتصال بقاعدة البيانات
include"config.php";
// جلب بيانات العضو
$userquery mysql_query ("SELECT * FROM `users` 

WHERE id='
$id' limit 1 ;");
$userdata=mysql_fetch_array($userquery);
//  عمل رسالة ترحيبيا بالعضو
echo("مرحبا يا ".$userdata['username']);
echo 
"<hr />";
// جلب الاختيارات  الاخرى
// متغير نضع فيه فورم  اختيارات العضو
$html='<form name="update" action="update.php?

id='
.$id.'" method="post">';


// نقوم بعرض كافة الاختيارات من جدولها
$optionsquery mysql_query ("SELECT * FROM 

`useroptions` "
);
 while (
$useroptions=mysql_fetch_array

($optionsquery)) {

      
$name=$useroptions['name']; // أسم الاختيار
      
$desc=$useroptions['desc'];// وصفه
      // هنا الفكرة حيث يتم جلب القيمة المخزنة فى الحقل الموجود 

بجدول الأعضاء
      
// والذى يحمل نفس اسم الاختيار باللغة الانجليزية
// فاذا كان هذا الحقل يحمل قيمة checked
// فانه سيظهر للعضو ان الحقل قد علم عليه العضو
// وهكذا تكون قد عرضت بياناته بدقة
$is_checked=$userdata[$name];
$html.="$desc : <input name='$name' type='checkbox' 

value='checked' 
$is_checked> <br />";

 }
  
$html.='<input type="submit" value="حدث 

البيانات"></form>'
;
  echo 
$html;
?>

</body>

</html>
والان ملف تحديث بيانات العضو update.php
-*-*-*-*-*-*-*-*-*-*
كود PHP:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; 

charset=utf-8">
  <title></title>
</head>

<body dir="rtl">

<?php
# تحديث بيانات العضو
$id=intval($_GET['id']);
// ألتحقق من ان اى دى العضو ليس فارغ
if(empty($id)){
echo 
"عفوا لقد اتبعت رابط خاطئ";
exit;

}
// الاتصال بقاعدة البيانات
include"config.php";
$query=" UPDATE  `users` SET ";
# جلب اسماء الحقول لنقوم بتحديثها فى العضو
$optionsquery mysql_query ("SELECT * FROM 

`useroptions` "
);
 while (
$useroptions=mysql_fetch_array

($optionsquery)) {
      
// هنا الفكرة حيث يتم جلب القيمة المخزنة فى الحقل الموجود 

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

      
$name=$useroptions['name']; // أسم الاختيار
  
$value=$_POST[$name]; // قيمة
$query.="`$name` =  '$value',";

 }

$query.="WHERE  `id` =$id LIMIT 1";
//  حل مشكلة ال كومة اللى فى الاخر
$query=str_replace(',WHERE','WHERE',$query);
// تحديث بيانات العضو
$result mysql_query ($query);
if(
$result){
echo 
"تم تحديث بيانات بنجاح ا <a href='showuser.php?

id=
$id'>هنا</a>
للعودة مرة اخرى "
;
}else{
die (
mysql_error());
}

?>

</body>

</html>
-------------------------------------------------

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

يمكنك تطوير الاتى :
- امكانية أضافة حقول text بدل من checkbox "مساعدة فقط قم باستبدال

كود checkbox بكودtext وستعمل "
- امكانية اضافة حقول radio تحتاج الى بعض التعديلات
- التحكم فى تعديل - تعطيل -حذف الحقول
------------------------------------------------
انتهى بحمد الله ، اسأل الله ان اكون قد وفقت فان اصبت فمن الله وان اخطأت فمن

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

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