Проблема с загрузкой изображения с помощью this.form.submit();

#php #html #sql

#php #HTML #sql

Вопрос:

Я использую this.form.submit(); для того, чтобы загрузить изображение сразу после его продажи, а также передать некоторую другую информацию.

У меня возникла проблема, отправка работает и передает идентификатор с помощью post, но изображение не загружается, а имя не вставляется в базу данных. это может добавить имя типа 0_, но это неверно, так как имя изображения не существует в таблице, поэтому оно должно передать if(file_exists) без каких-либо циклов.

Есть идеи по этому поводу?

 <form id='image_upload' name='image_upload' action='customer_logo.php' method='post'>
    <input type="hidden" name='id' id='id' value='<?php echo $cust_id; ?>'>
    <input type='text' style="background-color:#93CD60; border-radius: 5px; color:white; font-size:17px; width:140px; text-align:center; cursor:pointer;" id='image_text' name='image_text' value="Add Logo"> </input>
    <input type='file' name='image' id='image' style='visibility: hidden'  accept="image/*" onchange="this.form.submit();" />
</form>
  

И php-код выглядит следующим образом:

 if (isset ($_POST['image'])) {
    $cust_id = $_POST['id'];
    $images = $_FILES['image']['name'];
    $tmp_dir = $_FILES['image']['tmp_name'];
    $imageSize = $_FILES['image']['size'];

    if (!is_dir('img/logotipa/'.$cust_id)){
        mkdir('img/logotipa/'.$cust_id, 0777, true);
    }

    $upload_dir = 'img/logo/'.$cust_id.'/';
    $imgExt = strtolower(pathinfo($images,PATHINFO_EXTENSION));
    $valid_extensions = array('jpeg', 'jpg', 'png', 'gif');
    $up_image = $images;

    if (file_exists($upload_dir.$images)){
        $counter = 0;
        
        while (file_exists($upload_dir.$up_image)){
            $up_image = $counter.'_'.$images;
            $counter  ;            
        }

        move_uploaded_file($tmp_dir, $upload_dir.$images);
        $stmt = $conn->prepare('INSERT INTO logos(customer_id, logo) VALUES (:ucid, :upic)');
        $stmt->bindParam(':ucid', $cust_id);
        $stmt->bindParam(':upic',  $up_image);

        if ($stmt->execute()){
            echo '<script>window.location.href = "customer_logo.php";</script>';
        
        }
    }
}
  

Комментарии:

1. Я считаю, что вам нужно добавить enctype в свой <form> тег. т.е. enctype="multipart/form-data" . See w3schools.com/php/php_file_upload.asp

2. Установите enctype="multipart/form-data" для <form> элемента, чтобы указать правильную кодировку для загрузки файлов. И вы, вероятно, захотите проверить !empty($_FILES) вместо isset($_POST['image']) . Кроме того, вы определили массив расширений из белого списка, но ничего с ним не делаете (и остерегайтесь опечатки в имени переменной -> расширения *).

3. После того, как я добавил enctype, кажется, что он загружает изображение, но ввод таблицы не создается, и файл после 100% находится не в той папке, в которой он должен быть. Должно быть, это что-то настолько глупое, что я не вижу.. @RoAchterberg

4. Это действительно было что-то глупое, чего я не видел… Если вы внимательно проверите if(file_exists), вы увидите, что stmt находится внутри него, и хорошо … не было ничего другого для загрузки, поэтому, если изображение было уникальным, ничего не произошло.

Ответ №1:

Это действительно было что-то глупое, чего я не видел, как я упоминал в своем комментарии выше… Если вы внимательно проверите if(file_exists), вы увидите, что stmt находится внутри него, и хорошо … не было ничего другого для загрузки, поэтому, если изображение было уникальным, ничего не произошло, поэтому я просто скопировал move_uploaded_file и остальные и добавил else{ и это устранило проблему.

 if (isset ($_POST['image'])) {
    $cust_id = $_POST['id'];
    $images = $_FILES['image']['name'];
    $tmp_dir = $_FILES['image']['tmp_name'];
    $imageSize = $_FILES['image']['size'];

if (!is_dir('img/logotipa/'.$cust_id)){
    mkdir('img/logotipa/'.$cust_id, 0777, true);
}

$upload_dir = 'img/logo/'.$cust_id.'/';
$imgExt = strtolower(pathinfo($images,PATHINFO_EXTENSION));
$valid_extensions = array('jpeg', 'jpg', 'png', 'gif');
$up_image = $images;

if (file_exists($upload_dir.$images)){
    $counter = 0;
    
    while (file_exists($upload_dir.$up_image)){
        $up_image = $counter.'_'.$images;
        $counter  ;            
    }

    move_uploaded_file($tmp_dir, $upload_dir.$images);
    $stmt = $conn->prepare('INSERT INTO logos(customer_id, logo) VALUES (:ucid, :upic)');
    $stmt->bindParam(':ucid', $cust_id);
    $stmt->bindParam(':upic',  $up_image);

    if ($stmt->execute()){
        echo '<script>window.location.href = "customer_logo.php";</script>';
    
    }
}else{
move_uploaded_file($tmp_dir, $upload_dir.$images);
        $stmt = $conn->prepare('INSERT INTO logos(customer_id, logo) VALUES (:ucid, :upic)');
        $stmt->bindP

aram(':ucid', $cust_id);
    $stmt->bindParam(':upic',  $up_image);

    if ($stmt->execute()){
        echo '<script>window.location.href = "customer_logo.php";</script>';
    
    }
}