اريد كود برمجي يحذف من قاعدة البيانات عمود مع الصورة من الملف لتخزين الصور

  • Moheeb_1994

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

if(isset($_GET['delete'])){

  $delete_id = $_GET['delete'];

  $delete_message = $conn->prepare("DELETE FROM `moto` WHERE id = ?");

  $delete_message->execute([$delete_id]);

  header('location:witmoto.php');

}

هذا الكود البرمجي لا يحذف الصورة من الملف uploade_img/

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

وجزاكم الله خيرا


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

إليك الشيفرة التالية:

// استرجاع اسم الملف من قاعدة البيانات
$get_filename = $conn->prepare("SELECT image FROM `moto` WHERE id = ?");
$get_filename->execute([$delete_id]);
$filename = $get_filename->fetchColumn();

// حذف الملف من مجلد uploade_img إذا كان موجوداً
if ($filename && file_exists("uploade_img/{$filename}")) {
   unlink("uploade_img/{$filename}");
}

فيكون كاملا:

if(isset($_GET['delete'])) {
    $delete_id = $_GET['delete'];

    // استرجاع اسم الملف من قاعدة البيانات
    $get_filename = $conn->prepare("SELECT image FROM `moto` WHERE id = ?");
    $get_filename->execute([$delete_id]);
    $filename = $get_filename->fetchColumn();

    // حذف السجل من قاعدة البيانات
    $delete_message = $conn->prepare("DELETE FROM `moto` WHERE id = ?");
    $delete_message->execute([$delete_id]);

    // حذف الملف من مجلد uploade_img إذا كان موجوداً
    if ($filename && file_exists("uploade_img/{$filename}")) {
        unlink("uploade_img/{$filename}");
    }
    header('location: witmoto.php');
}

جزيت خيرا و زوجت بكرا الكود اجى في محله

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

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

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

مثلا اذا رفعت صورة تحمل اسم : moheeb.png فيقوم الكود بزيادة عدد عشوائي او ID المنشور الى اسم الصورة فتكون مثلا :moheeb1.png

واذا رفعت منشور اخر بنفس الصورة :moheeb.png فيعطيها الكود ID المنشور الى اسم الصورة فتكون مثلا moheeb2.png

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

if(isset($_POST['add_product'])){

  $name = $_POST['name'];

  $name = filter_var($name, FILTER_SANITIZE_STRING);

  $city = $_POST['city'];

  $city = filter_var($city, FILTER_SANITIZE_STRING);

  $date = $_POST['date'];

  $date = filter_var($date, FILTER_SANITIZE_STRING);

  $price = $_POST['price'];

  $price = filter_var($price, FILTER_SANITIZE_STRING);

  $number = $_POST['number'];

  $number = filter_var($number, FILTER_SANITIZE_STRING);

  $place = $_POST['place'];

  $place = filter_var($place, FILTER_SANITIZE_STRING);

  $category = $_POST['category'];

  $category = filter_var($category, FILTER_SANITIZE_STRING);

  $details = $_POST['details'];

  $details = filter_var($details, FILTER_SANITIZE_STRING);

  $image = $_FILES['image']['name'];

  $image = filter_var($image, FILTER_SANITIZE_STRING);

  $image_size = $_FILES['image']['size'];

  $image_tmp_name = $_FILES['image']['tmp_name'];

  $image_folder = 'uploaded_img/'.$image;

  $image_type=$_FILES['image']['type'];

  $select_products = $conn->prepare("SELECT * FROM `car` WHERE name = ?");

  $select_products->execute([$name]);

  if(! in_array($image_type,array('image/png','image/gif','image/jpg','image/jpeg'))){

   $errors[] = $message['center'] = 'قم بتحميل صورة صالحة بالضغط على المربع الاصفر';

  }else{

   $insert_products = $conn->prepare("INSERT INTO `car`(name, category, details, price, image, number, place,type,city,date) VALUES(?,?,?,?,?,?,?,?,?,?)");

   $insert_products->execute([$name, $category, $details, $price, $image, $number, $place,$image_type,$city,$date ]);

   if($insert_products){

     if($image_size > 2000000){

      $message[] = 'حجم الصورة جدا كبير';

     }else{

      move_uploaded_file($image_tmp_name, $image_folder);

      $message[] = 'تم نشر الإعلان';

     }

   }

  }

};

?>