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

اظهار القيمة المخزنة في الداتابيس في select option

بدأه code20 في 15 أغسطس 2012 · 7 رد · 758 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عملت فورم كامل يحتوي على text box و قائمة منسدله اقوم بادخال الخيار الذي اريده منها وتخزينه بالداتابيس ولكن عندما اريد تحديث الفورم كاملا يعود الخيار في القائمة المنسدله

الى الخيار please select

هذا مثال توضيحي هذا الكود

<select size='1' name='fruit' id='fruit' tabindex='6' >
<option value='' selected>Please select ...</option>
<option value='apple'> apple  </option>
<option value='orange'> orange</option>

مثلا اقوم باختبار apple ويتم تخزينه عندما اقوم بالضغط على تحديث الصف تظهر لي القيم التي قمت بتخزينها في هذا الصف في التكست بوكس ما عدا

القائمة المنسدلة يعود الخيار الى القيمة اللي حاط عندها select = selected

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

هكذا

<select size='1' name='fruit' id='fruit' tabindex='6' >
<option>Please select ...</option>
<option seslect='selected' value='apple'> apple </option>
<option value='orange'> orange</option>

اتمنى انه سؤالي يكون واضح وشكرا

#2

في حال كانت القيم apple, orange, ... قيم ثابتة hardcoded في الصفحة ولا يتم جلبها من قاعدة البيانات، فستضطر إلى تنفيذ التالي لكل option..

سأفترض أن القيمة التي تم إعادتها من قاعدة البيانات مخزّنة في المتغير $fruit

<select size='1' name='fruit' id='fruit' tabindex='6' >
<option<? echo (!isset($fruit) || empty($fruit) ? " selected='selected'" : "") ?>>Please select ...</option>
<option<? echo ($fruit == 'apple' ? " selected='selected'" : "") ?> value='apple'> apple </option>
<option<? echo ($fruit == 'orange' ? " selected='selected'" : "") ?> value='orange'> orange</option>
</select>

أما لو كانت القيم apple, orange, ... معادة من قاعدة البيانات وليست مخزنة في شفرة الصفحة (وهذا أفضل) فحينها تصبح الشفرة كالتالي:

<select size='1' name='fruit' id='fruit' tabindex='6' >
<option<? echo (!isset($fruit) || empty($fruit) ? " selected='selected'" : "") ?>>Please select ...</option>
<?
while ($fr = mysql_fetch_array(mysql_query("select name from fruit"))) {
    echo "<option value='$fr[\"name\"]'".($fr["name"] == $fruit ? " selected='selected'" : "").">$fr[\"name\"]</option>";
}
?>
</select>

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

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

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

ما عدا الفاكهة تعود للخيار please select

$q1 = mysql_query("SELECT current_fruit FROM persons WHERE per_ssn='".$id."'") or die("mysql ERROR");
$r1 = mysql_fetch_assoc($q1);


$query = mysql_query("SELECT * FROM persons WHERE per_ssn='".$id."'") or die("mysql ERROR");
$re = mysql_fetch_assoc($query);

if($_REQUEST['do']=='edit') {
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'> 


<table border='1' >
<tr>
<td colspan='2'>Edit Records></td>
</tr>
<tr>
<td width='179'>
<b>person Id</b></td>
<td><label>
<input type='text' name='per_ssn' value='".$re['per_ssn']."' />
</label></td>
</tr>

<tr>
<td width='179'> Name</td>
<td><label>
<input type='text' name='name' value='".$re['name']."' />
</label></td>



<tr>
<td width='179'>Current fruit</td>
<td><label>

<select size='1' name='current_fruit' id='current_fruit'  tabindex='6' value='".$re['current_fruit']."'  >
  <option echo (!isset($r1) || empty($r1) ? \" selected='selected'\" : \"\" >Please select ...</option>
  <option echo ($r1 == 'apple' ? \" selected='selected'\" : \"\") value='apple'>apple</option>
  <option ($r1 == 'orange') ? \" selected='selected'\" : \"\")  value='orange'> orange</option>
  <option ($r1 == panana') ? \" selected='selected'\" : \"\" )  value='panana'> panana</option>

ارجو ان توضح لي الطريقة اذا امكن

#4

أنت تستخدم توابع PHP داخل HTML بدون أن تكون ضمن php tags كما كتبته لك :)

هل ترى الفرق بين هذا

<select size='1' name='fruit' id='fruit' tabindex='6' >
<option<? echo (!isset($fruit) || empty($fruit) ? " selected='selected'" : "") ?>>Please select ...</option>
<option<? echo ($fruit == 'apple' ? " selected='selected'" : "") ?> value='apple'> apple </option>
<option<? echo ($fruit == 'orange' ? " selected='selected'" : "") ?> value='orange'> orange</option>
</select>

و هذا

<select size='1' name='current_fruit' id='current_fruit'  tabindex='6' value='".$re['current_fruit']."'  >
  <option echo (!isset($r1) || empty($r1) ? \" selected='selected'\" : \"\" >Please select ...</option>
  <option echo ($r1 == 'apple' ? \" selected='selected'\" : \"\") value='apple'>apple</option>
  <option ($r1 == 'orange') ? \" selected='selected'\" : \"\")  value='orange'> orange</option>
  <option ($r1 == panana') ? \" selected='selected'\" : \"\" )  value='panana'> panana</option>

طبعاً أنت تقوم بعمل echo لكتلة HTML كبيرة فيما فيها النموذج form

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

تماماً كما فعلت في البداية هنا..

echo "<form action='".$_SERVER['PHP_SELF']."' method='post'> 
...

والحل، أجري التعديل التالي:

<select size='1' name='current_fruit' id='current_fruit'  tabindex='6' value='".$re['current_fruit']."'>
  <option".(!isset($r1) || empty($r1) ? " selected='selected'" : "").">Please select ...</option>
  <option".($r1 == 'apple' ? " selected='selected'" : "")." value='apple'>apple</option>
  <option".($r1 == 'orange' ? " selected='selected'" : "")." value='orange'>orange</option>
  <option".($r1 == 'banana' ? " selected='selected'" : "" )." value='banana'>banana</option>

* قمت بتصحيح خطأ إملائي في كلمة banana.

* أيضاً كان هناك أخطاء قواعدية في إنقاص ' و ) ... إلخ

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

شكرا جزيلا لك قمت باضافة التعديل الذي اعطيتني اياه برضه المشكلة لازالت موجوده (( اصابني الاحباط :sad: ))

قمت بعمل برنت سكرين للناتج

هذا السطر الذي يظهر

DxI76809.png

وعندما اختار تعديل وتظهر معلوماته جميعا ما عدا القيمة التي اختارها من القائمة المنسدله وهي ال apple

y4z77000.png

انا حاب انه احل ذي المشكله لانه احتاج اني اضيف اكثر من قائمة ربما ينسى المستخدم انه يعدل عليها جميعا لو ضغط تعديل راح تنحفظ ال please select عليهم جميعا

هذا الكود

<?php
include('include/connect.php');
error_reporting (E_ALL ^ E_NOTICE);
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';


$id = intval($_GET['id']);
$per_ssn = mysql_real_escape_string(htmlspecialchars($_POST['per_ssn']));
$ar_name = mysql_real_escape_string(htmlspecialchars($_POST['ar_name']));
$current_fruit = mysql_real_escape_string(htmlspecialchars($_POST['current_fruit']));


if(isset($_POST['edit']) and $_POST['edit'] == 'news')
{
  $update = mysql_query("UPDATE persons SET per_ssn='$per_ssn', ar_name='$ar_name' ,
                                current_fruit='$current_fruit' WHERE per_ssn='$per_ssn'")
                                  or die(" not updated");



		if(isset($update))
         {
		    echo" update is done ";
         }		 
}
$q1 = mysql_query("SELECT current_fruit FROM persons WHERE per_ssn='".$id."'") or die("mysql ERROR");
$r1 = mysql_fetch_assoc($q1);


$query = mysql_query("SELECT * FROM persons WHERE per_ssn='".$id."'") or die("mysql ERROR");
$re = mysql_fetch_assoc($query);

if($_REQUEST['do']=='edit') {
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'> 


<table border='1' >
<tr>
<td colspan='2'><b><font color='Red'>Edit Records </font></b></td>
</tr>
<tr>
<td width='179'>
<b><font color='#663300'> Id</font></b></td>
<td><label>
<input type='text' name='per_ssn' value='".$re['per_ssn']."' />
</label></td>
</tr>

<tr>
<td width='179'><b><font color='#663300'>Arabic Name</font></b></td>
<td><label>
<input type='text' name='ar_name' value='".$re['ar_name']."' />
</label></td>
</tr>


<tr>
<td width='179'><b><font color='#663300'>Current frut</font></b></td>
<td><label>

<select size='1' name='current_fruit' id='current_fruit'  tabindex='6' value='".$re['current_fruit']."'>
  <option".(!isset($r1) || empty($r1) ? " selected='selected'" : "").">Please select ...</option>
  <option".($r1 == 'apple' ? " selected='selected'" : "")." value='apple'>apple</option>
  <option".($r1 == 'orange' ? " selected='selected'" : "")." value='orange'>orange</option>
  <option".($r1 == 'banana' ? " selected='selected'" : "" )." value='banana'>banana</option>

</label></td>
</tr>




<tr align='Right'>
<td colspan='2'><label>
<input type='submit' name='submit' value='Edit Records'>
</label></td>
</tr>
</table>

<input type='hidden' name='id' value='".$id."'/>
<input type='hidden' name='edit' value='news'/>

</form>";
}


$data = mysql_query("select * from persons order by per_ssn desc") or die(mysql_error());

echo "<table border='1' cellpadding='3'>";
echo "<tr>
<th><font color='Red'> Id</font></th>
<th><font color='Red'>Name</font></th>
<th><font color='Red'>Current fruit</font></th>
<th colspan=2><font color='Red'>Operation</th>

</tr>";

while($row = mysql_fetch_array($data))
{
echo "<tr>";
echo '<td><b><font color="#663300">' . $row['per_ssn'] . '</font></b></td>';
echo '<td><b><font color="#663300">' . $row['ar_name'] .'<br>' . $row['en_name'] . '</font></b></td>';
echo '<td><b><font color="#663300">' . $row['current_fruit'] . '</font></b></td>';
echo '<td><b><font color="#663300"><a href="test.php?do=edit&id=' . $row['per_ssn'] . '">Edit</a></font></b></td>';
echo '<td><b><font color="#663300"><a href="delete.php?id=' . $row['per_ssn'] . '">Delete</a></font></b></td>';
echo "</tr>";
}
echo "</table>";

?>

ان شاء الله تكون المشكله سهله و يوجد لها حل معليش لو تعبتك معايا

#6

فيما يلي الجزء الذي يحوي على التعديلات المطلوبة، يرجى الانتباه إلى الملاحظة المدرجة فيه

//$q1 = mysql_query("SELECT current_fruit FROM persons WHERE per_ssn='".$id."'") or die("mysql ERROR");
//$r1 = mysql_fetch_assoc($q1);

$query = mysql_query("SELECT * FROM persons WHERE per_ssn='".$id."'") or die("mysql ERROR");
$re = mysql_fetch_assoc($query);

if($_REQUEST['do']=='edit') {
echo "<form action='".$_SERVER['PHP_SELF']."' method='post'> 


<table border='1' >
<tr>
<td colspan='2'><b><font color='Red'>Edit Records </font></b></td>
</tr>
<tr>
<td width='179'>
<b><font color='#663300'> Id</font></b></td>
<td><label>
<input type='text' name='per_ssn' value='".$re['per_ssn']."' />
</label></td>
</tr>

<tr>
<td width='179'><b><font color='#663300'>Arabic Name</font></b></td>
<td><label>
<input type='text' name='ar_name' value='".$re['ar_name']."' />
</label></td>
</tr>


<tr>
<td width='179'><b><font color='#663300'>Current frut</font></b></td>
<td><label>";

# استبدل هذا الاستعلام بالاستعلام المناسب لجلب أسماء الفواكه من جدول الفواكه
# يجب أن يكون جدول الفواكه مستقل عن جدول persons طبعاً
$q1 = mysql_query("SELECT name FROM fruit") or die ("mysql ERROR");
$current_fruit = (!isset($re['current_fruit']) || empty($re['current_fruit']) ? '' : $re['current_fruit']);

echo "
<select size='1' name='current_fruit' id='current_fruit'  tabindex='6'>
	<option".($current_fruit == '' ? " selected='selected'" : "").">Please select ...</option>";
	while ($r1 = mysql_fetch_assoc($q1)) {
		echo "<option value='".$r1['name']."'".($r1['name'] == $current_fruit ? " selected='selected'" : "").">".$r1['name']."</option>";
	}
echo "
</select>
</label></td>
</tr>

كان هناك أخطاء قاتلة لم أعرها انتباهاً المرة الماضية لأني كنت أركز على أخطاء سواها.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

جزاك الله خيرا نعم الكود شغال 100%

ياليت تشرح لي وللباقين اللي لو صادفهم هذا الخطأ ايش سببه و ليش احتجنا اننا نفصله بجدول مستقل ؟؟

و كل عام وانت بخير مقدما

#8

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

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

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