اريد كود php يقوم بتغير اسم الصورة تلقائي بعد الرفع

وهذا هو الكود الذي ارفع به الصور ولكن اذا رفعت صورة تحمل نفس الاسم لا تتكرر في ملف الرفع (uploaded_img)اذا كانت نفس الاسم تكون صورة واحدة فقط لكل المنشورات التي تحمل الصورة نفسها واذا حذف الصورة تتخرب جميع المنشورات التي تحمل نفس اسمها, ولهذا اريد تعديل الكود هذا الذي اقوم برفع الصور عبره الى جعله يغير اسم الصورة بعد رفعها تلقائي

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[] = 'تم نشر الإعلان';

     }

   }

  }

};

?>

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

التعليقات

اعتمد على دالة uniqid() لإنشاء اسم فريد للصورة بناءًا على الوقت الحالي، كالتالي:

if(isset($_POST['add_product'])){
    // ... (الأكواد السابقة هنا)


    // إنشاء اسم فريد للصورة باستخدام دالة uniqid()
    $unique_image_name = uniqid() . '_' . $image;


    // تحقق من صحة نوع الصورة
    if(!in_array($image_type, array('image/png','image/gif','image/jpg','image/jpeg'))){
        $errors[] = $message['center'] = 'قم بتحميل صورة صالحة بالضغط على المربع الأصفر';
    } else {
        $select_products = $conn->prepare("SELECT * FROM `car` WHERE name = ?");
        $select_products->execute([$name]);


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


        if($insert_products){
            if($image_size > 2000000){
                $errors[] = 'حجم الصورة جدا كبير';
            } else {
                // استخدم اسم الصورة الفريد
                $image_folder = 'uploaded_img/' . $unique_image_name;


                move_uploaded_file($image_tmp_name, $image_folder);


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


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

حيث أن دالة uniqid() تقوم بإنشاء معرف فريد يتكون من 13 حرفًا عشوائيًا، ونستخدم هذا المعرف لإنشاء اسم جديد للصورة.

فلو كان اسم الصورة الأصلي هو "my_image.jpg"، فإن الاسم الجديد سيكون "1234567890123456.jpg".

جزاك الله خيرا واسال الله ان يحشرك مع الانبياء

يمكنك تلافي هاته المشكلة بتوليد اسم فريد للصورة أو الملف قبل رفعه، استعمل الشيفرة التالية مثلا:

// توليد اسم فريد للصورة باستخدام الوقت الحالي
$image_name = time() . '_' . $_FILES['image']['name'];

// تحديد المسار الجديد للصورة
$image_folder = 'uploaded_img/' . $image_name;

// باقي الشيفرة...

يتم هاهنا استخدام الدالة time لجلب عدد الثواني بصيغة Unix كاسم فريد للصورة، أما باقي الشيفرة فستكون مثلما هي عليه. فقط استبدل المسار القديم بالمسار الجديد .

اسال الله ان يحشرك في زمرة الانبياء والصالحين