اذهب إلى المحتوى

السؤال

نشر

تحيه طيبه للجميع

لدي صفحة PHP أقوم من خلالها بتحديث بيانات MySQL table  المشكلة ان المستخدم لديه حقول مختلفة ولو قام المستخدم بترك حقل بدون التعديل عليه سوف يتم ارسال بيانات فارغة الى هذا الملف ثم يتم وضع NULL في جدول البيانات احتاج الى معرفة كيفية التحقق من خلال ملف PHP  قبل عمل UPDATE  اذا كان الحقل لديه بيانات يتم التحديث اما الحقول الفارغة يتم عمل SKIP او تخطي لها حتى لا تتغير البيانات الحالية في قاعدة البيانات.

الملف كالتالي:

<?php
 require_once 'con.php';

   $id =$_POST['id'];
   $name =$_POST['name'];
   $ExtraData = $_POST['ExtraData'];
    $IDColors = $_POST['IDColors'];
				
				 
$sql="UPDATE TableUser SET name=?,ExtraData=?,IDColors=? WHERE id=?";

$stmt = $con->prepare($sql); 

$stmt->bind_param("ssss",$name,$ExtraData,$IDColors,$id);

$stmt->execute();

$result = $stmt->get_result();


   $exeQuery = mysqli_query($con, $sql) ;


	 if($exeQuery){
	 echo (json_encode(array('code' =>1, 'message' => 'Modifier avec succee')));
}else {echo(json_encode(array('code' =>2, 'message' => 'Modification Non Terminer')));
 }


 ?>

 

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

شكرا للجميع

Recommended Posts

  • 1
نشر

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

<?php

$id =$_POST['id'];
$name =$_POST['name'];
$ExtraData = $_POST['ExtraData'];
$IDColors = $_POST['IDColors'];

$validated = [];
if($name !== null) $validated['name'] = $name;
if($ExtraData !== null) $validated['ExtraData'] = $ExtraData;
if($IDColors !== null) $validated['IDColors'] = $IDColors;

$fields = implode(',', array_map(fn($field) => $field.'=?', array_keys($validated)));
$sql = "UPDATE TableUser SET {$fields} WHERE id=?";

$stmt = $con->prepare($sql);
$values = array_values($validated);
$values[] = $id
$stmt->execute($values);

 

  • 1
نشر (معدل)
بتاريخ 32 دقائق مضت قال مروان مروان3:

تحيه طيبه للجميع

لدي صفحة PHP أقوم من خلالها بتحديث بيانات MySQL table  المشكلة ان المستخدم لديه حقول مختلفة ولو قام المستخدم بترك حقل بدون التعديل عليه سوف يتم ارسال بيانات فارغة الى هذا الملف ثم يتم وضع NULL في جدول البيانات احتاج الى معرفة كيفية التحقق من خلال ملف PHP  قبل عمل UPDATE  اذا كان الحقل لديه بيانات يتم التحديث اما الحقول الفارغة يتم عمل SKIP او تخطي لها حتى لا تتغير البيانات الحالية في قاعدة البيانات.

الملف كالتالي:


<?php
 require_once 'con.php';

   $id =$_POST['id'];
   $name =$_POST['name'];
   $ExtraData = $_POST['ExtraData'];
    $IDColors = $_POST['IDColors'];
				
				 
$sql="UPDATE TableUser SET name=?,ExtraData=?,IDColors=? WHERE id=?";

$stmt = $con->prepare($sql); 

$stmt->bind_param("ssss",$name,$ExtraData,$IDColors,$id);

$stmt->execute();

$result = $stmt->get_result();


   $exeQuery = mysqli_query($con, $sql) ;


	 if($exeQuery){
	 echo (json_encode(array('code' =>1, 'message' => 'Modifier avec succee')));
}else {echo(json_encode(array('code' =>2, 'message' => 'Modification Non Terminer')));
 }


 ?>

 

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

شكرا للجميع

SELECT * FROM `table` WHERE ISNULL(`filed`)

تم التعديل في بواسطة Mohammad Jawareesh
  • 1
نشر
بتاريخ 3 دقائق مضت قال مروان مروان3:

مرحبا اخي الكريم

شاكر لك الغالي

بس استفسار الكود يظهر لدي الخطاء التالي مع التنفيذ :


Fatal error: Uncaught Error: Call to a member function execute() on bool in

ويظهر انه في السطر التالي:


$stmt->execute($values);

 

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

$sql = "UPDATE Table User SET {$fields} WHERE id=?";
                    ^

 

  • 1
نشر
بتاريخ الآن قال مروان مروان3:

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

 

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

عندما يعيد التابع prepare قيمة منطقية bool فهذا يعني إما خطأ في الاتصال بقاعدة البيانات أو خطأ في الاستعلام نفسه،  حاول إضافة السطر التالي في بداية الملف :

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

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

  • 0
نشر
بتاريخ 8 ساعات قال Hassan Hedr:

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


<?php

$id =$_POST['id'];
$name =$_POST['name'];
$ExtraData = $_POST['ExtraData'];
$IDColors = $_POST['IDColors'];

$validated = [];
if($name !== null) $validated['name'] = $name;
if($ExtraData !== null) $validated['ExtraData'] = $ExtraData;
if($IDColors !== null) $validated['IDColors'] = $IDColors;

$fields = implode(',', array_map(fn($field) => $field.'=?', array_keys($validated)));
$sql = "UPDATE TableUser SET {$fields} WHERE id=?";

$stmt = $con->prepare($sql);
$values = array_values($validated);
$values[] = $id
$stmt->execute($values);

 

مرحبا اخي الكريم

شاكر لك الغالي

بس استفسار الكود يظهر لدي الخطاء التالي مع التنفيذ :

Fatal error: Uncaught Error: Call to a member function execute() on bool in

ويظهر انه في السطر التالي:

$stmt->execute($values);

 

بتاريخ 9 ساعات قال Mohammad Jawareesh:

SELECT * FROM `table` WHERE ISNULL(`filed`)

مرحبا اخي الكريم

لا اقصد معرفة الاعمدة الفارغة 

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

الان لو قمت بتحديث ولم اقم بتعبئة جميع الحقول

تلك الحقول التي اتركها بدون تعبئة يتم وضع null  فيها بمعنى يتم حذف البيانات القديمة المتوفرة وهذا ما أحاول إيجاد حل له

  • 0
نشر
بتاريخ 3 دقائق مضت قال Hassan Hedr:

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


$sql = "UPDATE Table User SET {$fields} WHERE id=?";
                    ^

 

مرحبا اخي الكريم

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

 

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

  • 0
نشر
 Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'table topics SET where id=?' at line 1 in .....

 

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

  • 0
نشر
بتاريخ الآن قال مروان مروان3:

 Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'table topics SET where id=?' at line 1 in .....

 

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

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

$validated = [];
if($name !== null) $validated['name'] = $name;
if($ExtraData !== null) $validated['ExtraData'] = $ExtraData;
if($IDColors !== null) $validated['IDColors'] = $IDColors;

if(empty($validated)){
 // لم ترسل أي حقول
 throw new Error('No fields received, please send one of `name`, `ExtraData`, `IDColors` fields.');
}

وفي حال واجهت ذلك الخطأ حاول طباعة محتوى POST_$ وتأكد من البيانات التي تصل إلى الخادم

  • 0
نشر

يمكنك ملأ الحقول بالبيانات الحالية من الجدول في قاعدة البيانات عند عرض الاستمارة للتعديل، وعندما يقوم المستخدم بعمل submit سيتم إرسال نفس البيانات القديمة وبذلك لا يؤثر التحديث في فقد أي بيانات قديمة ويعيد إضافتها مجددا ولن يؤثر ذلك على الأداء..

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...