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

السلام عليكم

قمت بإنشاء تطبيق ويب بواسطة 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");

}

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

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

الطريقة الافضل هي التي كتبها الأخ @Bilal

وايضا يمكنك تعيين الـValue للقيمة الحالية

فمثلا ..

عندك خانتين .. الاسم و الايميل

عند التوجه لصفحة التعديل .. اجعل قيمة الخاصية Value هي القيمة الحالية لكلا من الخانتين

فإذا قام المستخدم بتغيير شئ يتغير الاثنين معا .. تتغير القيمة القديمة بالجديدة واذا لم يتم تغييرها فستتغير الي نفس القيمة "لن تتغير"

السلام عليكم

يمكنك ببساطة فعل هذا بتوجيه صفحة مسار الحدث action للنموذج form لنفس الصفحة أي تجعله فارغاً, وبعد ذلك تتحقق من وجود قيمة الحقل في مصفوفة البيانات المرسلة $_POST لوضع نفس القيمة التي تم إدخالها سابقاً, والكود سيكون بالشكل التالي:

    <input type="text" name="inputName" value="<?php echo (isset($_POST['inputName']))?$_POST['inputName']:''; ?>" />

طبعاً ستكرر الكود لكل الحقول التي تريد عدم فقدها, ولو نمط الإرسال هو GET ستغير اسم المصفوفة POST طبعاً.

  • هذه الفكرة لا تحتاج إعادة جلب البيانات من القاعدة وإستهلاك الموارد والزمن.

دمت بخير

مع فائق احترامى ردك غير مرتبط بالسؤال لماذا

حضرتك الان عندك موضوع فى قاعده البيانات عاوز تعملو تعديل

هتعمل ايه !!

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

معك حق, عذراً أخي لم أقرأ السؤال جيداً فوضت الكود بسرعة بدون تدقيق :)

لقد تم حل المشكل شكرا لكم