مشكلة استخدام نفس الاسم في input -

MM2 • منذ 8 سنوات

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

 

مشكلتي هي اني لدي نموذج لإدخال بيانات دورة و جزء من النموذج هو الـمتطلبات مع اعداد المتطلب  

Multiple inputs with same name through POST in php

 

مثال: اقلام 20 ... و عدد الحقول 20 حقل... لقد إستخدمت نفس الاسم ل 20 حقل. "requirements"  و فصلت حقل العدد بجدول اخر "reqnum" في قاعدة البيانات 

لكن ما يحدث هو كتابة المدخلات فوق بعض بحيث البيانات النهاية هي بيانات حقل 20 بدون 19 حقل الاخرى كما في الاكواد 


 

 

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

كلمات دليلية:

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (5)

Ali Majrashi • منذ 8 سنوات

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

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

requirements[]

واسم الحقل من reqnum الى

reqnum[]

بعدها داخل ملف php قبل ان نقوم بحفظ البيانات المرسله بقاعدة البيانات نقوم بتحويل المصفوفه الى json object ليتم تخزينها بدون مشاكل بواسطة استخدام دالة json_encode مثال


$require = json_encode($_POST['requirements']);
$reqnum	 = json_encode($_POST['reqnum']);

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


json_decode($require, true)

مع ملاحظة ان $require يجب ان يحتوي على json object الذي سبق تخزينه بقاعدة البيانات

 

ملاحظة قبل حفظ البيانات المرسله من النموذج يجب التحقق من القيم والتاكد انها ليست فارغة وبناء المصفوفه بالشكل السليم قبل تحويلها الى json object لانه مباشره عند ارسال النموذج سوف يتم تحويل جميع القيم المرسله الى json object وحتى لو كانت قيم فارغة ممكن نستفيد من foreach loop والتحقق من جميع العناصر المرسله وان لها قيم ثم بناء مصفوفه سليمه وخاليه من القيم الفارغه وبعدها نحولها الى json object 

مثال بسيط لتنقيح النتائج ممكن استخدامه قبل حفظ البيانات للقاعدة 


<?php

$require = $_POST['requirements'];

foreach ($require as $key => $value) {
	if(!empty($value))
	{
		$require[$key] = $value;
	}else {
		unset($require[$key]);
	}
}

$require = json_encode($require);

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


<?php

$require = $_POST['requirements'];
$reqnum = $_POST['reqnum'];

foreach ($require as $key => $value) {
	if(!empty($value))
	{
		$require[$key] = $value;
		$reqnum[$key] = $reqnum[$key];
	}else {
		unset($require[$key]);
		unset($reqnum[$key]);
	}
}

$require = json_encode($require);
$reqnum = json_encode($reqnum);

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

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

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

MM2 • منذ 8 سنوات

هل يوجد طريقة مبسطة اخر لـجدول في الاعلى

هي عبارة عن متطلبات مع كميتها

 و لقد ظهرت لي هذه المشكلة و لا يوجد لي وقت للبحث و تعلم   json object 


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in C:\*:268 Stack trace: #0

***** PDOStatement->execute(Array) #1 {main} thrown in ******* on li

 

الخطا في


  $stmt->execute(array('nrequire' => $require,
							/*..هنا >	*/	 'nreqnum' => $reqnum));

 

Ali Majrashi • منذ 8 سنوات
4 ساعات مضت, MM2 said:

هل يوجد طريقة مبسطة اخر لـجدول في الاعلى

هي عبارة عن متطلبات مع كميتها

 و لقد ظهرت لي هذه المشكلة و لا يوجد لي وقت للبحث و تعلم   json object 


Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters' in C:\*:268 Stack trace: #0

***** PDOStatement->execute(Array) #1 {main} thrown in ******* on li

 

الخطا في



  $stmt->execute(array('nrequire' => $require,
							/*..هنا >	*/	 'nreqnum' => $reqnum));

 

الخطا هذا ماله دخل في الطريقة فوق الخطا في SQL وطريقة بنائها وتنفيذها بقاعدة البيانات ياريت مشاركة كامل الكود لكل من Query و Prepare و Execute كاملة ليتم تجربتها ومساعدتك بحل المشكلة

MM2 • منذ 8 سنوات


		 <!-- Start of Table R-->
		
				  <h2>متطلبات التــنفيذ</h2>
		 <table  class=" table-bordered">
				  <div class="form-group">
				  <tr><td >م</td>                            <td>المطلوب</td>                                      <td>العدد</td></tr>
				  <tr><td>1</td>    <td><input 	 type="text"  name="requirements[]"></td>    <td><input type="number" min="20" max="1000"    name="reqnum[]"></td>
				  <tr><td>2</td>    <td><input 	 type="text" name="requirements[]" ></td>    <td><input type="number" min="20" max="1000"   name="reqnum[]"></td>
				  <tr><td>3</td>    <td><input 	 type="text" name="requirements[]" ></td>   <td><input type="number" min="20" max="1000"   name="reqnum[]"></td>
				  <tr><td>4</td>    <td><input 	 type="text"name="requirements[]" ></td>   <td><input type="number" min="20" max="1000"  name="reqnum[]"></td>
				  <tr><td>5</td>    <td><input 	 type="text" name="requirements[]"></td>   <td> <input type="number" min="20" max="1000" name="reqnum[]"></td>
				  <tr><td>6</td>    <td><input 	 type="text" name="requirements[]"></td>   <td><input type="number" min="20" max="1000"   name="reqnum[]"></td>
				  <tr><td>7</td>    <td><input   type="text"  name="requirements[]"></td>   <td><input type="number" min="20" max="1000"  name="reqnum[]"></td>
				  <tr><td>8</td>    <td><input   type="text"  name="requirements[]"></td>   <td><input type="number" min="20" max="1000"  name="reqnum[]"></td>
				  <tr><td>9</td>    <td><input   type="text"  name="requirements[]"></td>   <td><input type="number" min="20" max="1000"  name="reqnum[]"></td>
				  <tr><td>10</td>   <td><input  type="text"  name="requirements[]"></td>    <td><input type="number" min="20" max="1000" name="reqnum[]"></td>
				  <tr><td>11</td>   <td><input  type="text"  name="requirements[]"></td>    <td><input type="number" min="20" max="1000" name="reqnum"></td>
				  <tr><td>12</td>   <td><input type="text"  name="requirements[]" ></td>    <td><input type="number" min="20" max="1000" name="reqnum"></td>
				  </tr>
				  </table>
				  </div>
				  <!-- End of Table R-->
		 <!-- Submit-->
		 <div class="form-group">
					<div class="col-sm-offset-2 col-sm-10">
					   <input class='btn btn-success' type="submit" value="Add" class="btn btn-default"/>	   
					</div>
		 <div class="form-group">
					<div class="col-sm-offset-2 col-sm-10">
	 <a href="ActivitiesR.php?do=Insert&userid=<?php echo  $row['UserID']; ?>" class="btn btn-danger confirm"> حفظ لتعديل</a>  
					</div>
		 </div></div>
		 
	

 

<?php
   

هذا الفورم كامل مع connection لا اعلم ما الذي فعلته حتى يصبح هناك خلل في connection 

 

 

 

 

Ali Majrashi • منذ 8 سنوات

المشكلة انا شرحتها بردي السابق ان Mysql لاتدعم تخزين المصفوفات في قاعدة البيانات ويجب ان نقوم بتحويل المصفوفه الى json object وهي سهلة 

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

بعد كود  


foreach ($require as $key => $value) {
  if(!empty($value))
  {
    $require[$key] = $value;
    $reqnum[$key] = $reqnum[$key];
  }else {
    unset($require[$key]);
    unset($reqnum[$key]);
  }
}

نقوم بتحويل المصفوفتين الى  json object باضافة هالسطرين 


$require = json_encode($require);
$reqnum = json_encode($reqnum);

سوف يتم حفظ الحقلين على هيئة json object وهي ماتدعمه Mysql بكل سهولة 

بعدها لو عندك صفحة اخرى وفيها استعلام لعرض البيانات نقدر نحول json object الى مصفوفة باستخدم الدالة


json_decode(jsonObject, true);

ونتعامل مع المصفوفه للعرض بواسطة foreach loop

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !