ممكن مساعدة في تطبيق ويب

السلام عليكم

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

هدا الكود :

$req="UPDATE cliente set fourniseur='$t1' , produit='$t2' , numerofacture='$t4' , dateachats='$t5' , Clients='$t6' , nfactureC='$t7', datedevente='$t8' where numeroseris='$t3'";

الحل سيكون كالتلي

    $req="UPDATE cliente set ";

    if(!empty($t1)){
        $t1 = addslashes($t1);
        $req .= "fourniseur='$t1' ,";

    }

    if(!empty($t2)){
        $t2 = addslashes($t2);
        $req .= "produit='$t2' ,";

    }

    if(!empty($t4)){
        $t4 = addslashes($t4);
        $req .= "numerofacture='$t4' ,";

    }


    if(!empty($t5)){
        $t5 = addslashes($t5);
        $req .= "dateachats='$t5' ,";

    }
    if(!empty($t6)){
        $t6 = addslashes($t6);
        $req .= "Clients='$t6' ,";

    }
    if(!empty($t7)){
        $t7 = addslashes($t7);
        $req .= "nfactureC='$t7',";

    }
    if(!empty($t8)){
        $t8 = addslashes($t8);
        $req .= "datedevente='$t8' ,";

    }


    $req = rtrim($req,',');

    $t3 = addslashes($t3);
    $req .=" where numeroseris='$t3'";

الدالة addslashes أضفتها لأنني لا أعرف هل تقوم بفلترت المدخلات أم لا , ولا أريد أن ينقل أحد كود به مشاكل أمنية

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

empty ليست ضرورية هنا حتى يتمكن صاحب التعديل من إفراغ حقل معين!

لكن نستخدم isset التي تتحقق من المتغير إذا كان موجودا

و is_null في حال كان لا يمكن للحقل أن يستقبل قيمة فارغة NULL

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

 $t1 = $_POST['balh_blah'];

لذى أعتقد أن طريقتي أفضل رغم أنني إخترت الدالة empty بدون تفكير

ربما لم أوضح وجهة نظري جيدا :(

لا بد من التحقق من عنصر المصفوفة blah_blah بالدالة isset

إذا لم يكن موجودا سيعطيك الخطأ undefined index

سواء في الصفحة أو مكدّس في ملفات الـ LOG هذا إذا كنت تخفي الأخطاء عبر الدالة

error_reporting(0);

حسنا، لنقل أن الحقل blah يحتوي على نص، وصاحب الصفحة يريد حذف ذلك النص وإرجاع الحقل إلى NULL أو (0) string

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

المغزى :

isset تتحقق من الوجود

empty تتحقق من القيمة

ولا يمكن مهمى كان أن تحل الدالة empty محل الدالة isset

وإنما يمكن استخدامهما معا لو لزم الأمر!

  • ملاحظة: يمكنك إخفاء الخطأ بالدالة empty أو error_reporting بقيمة 0 أو حتى بالرمز @ ... لكن هذا لا يحذف الخططأ وإنما فقط يمنعه من الظهور، كما يقال في الطب : دواء الألم يخفي المرض ولا يقضي عليه ^_^

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

أقصد مسافات فارغة

وجهت نضرك صحيحة بالفعل ويمكن أن أضيف لك أنه يجب التحقق بأن المتغيارت ($t1,...) قيم نصية وليس مصفوفات ... أيضا يجب التأكد أنه لدينا إستعلام صحيح مثلا

$req="UPDATE cliente set ";
$isValidQuery = false ;
if(!empty($t1)){
    $t1 = addslashes($t1);
    $req .= "fourniseur='$t1' ,";
     $isValidQuery = true;
}
................

وإلا سننتهي بشيء كهذا

UPDATE cliente set  where numeroseris='$t3'

والله أعرف كيف أخفي الأخطاء :D

المهم الفكرة صالحة لكن يجب تحسين الكود أكثر بكل تأكيد

اسف على التأخر في الرد , أعاني من زكام شديد بعيد عنك

شفاك الله أخي بلال، طهور إن شاء الله

علي فرض يا عزيزي لديك نظام به 100 خانة ادخال أو أكثر هلي من المعقول أن أكتب 100 جملة IF Statement ؟ هذه طريقة للاسف قديمة وغير مجدية وأنا لا ادعي الاحترافية ...ولكن من المعلوم ان PHP تدعم البرمجة الكائنية OOP فعليك أن تكتب دالة التعديل مرة واحدة وتستدعيها في كل مرة تحتاجها من خلال خاصية ال (" INCLUDE_ONCE("Class Name

<?php

class studentstb {

public function __construct(){


    $conn=mysql_connect("localhost","root","");

mysql_select_db("testdb",$conn); mysql_set_charset("utf8",$conn); }

public function add_record($a,$b,$c,$d){

mysql_query("insert into student(st_id,st_name,img_name,co_no)values($a,'$b','$c',$d)");

}

public function update_record($a,$b,$c){ if($c==("")){ mysql_query("update student set st_name='$b' where st_id=$a"); } else{ mysql_query("update student set st_name='$b', img_name='$c' where st_id=$a");

}

}

public function del_record($a){

mysql_query("delete from student where st_id=$a");

}

ماهذا ؟؟ هل هذا حل لمشكل صاحب الموضوع ؟؟ :)

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