Как выполнить проверку заполнено поле или нет?

193
11 августа 2021, 05:20

У меня есть поле с картинкой (Input type file), если его заполнить (То-есть указать путь к картинке) то скрипт сработает, но если не заполнять то скрипт не работает, как сделать проверку заполнено поле или нет? и если не заполнено чтоб ошибки небыло, а если заполнено то он (отправлял файлик и путь к нему ЭТО УЖЕ ЕСТЬ В СКРИПТЕ)

// Подключаемся к БД
include "../includes/connect.php";
include "../includes/console.php";
// var_dump($_POST);
var_dump($_FILES['position_img']);
$uploaddir = '../media/img/';
$uploadfile = $uploaddir . time() . basename($_FILES['position_img']['name']);
if (
    isset($_POST['position_id']) &&
    isset($_POST['position_name']) &&
    isset($_POST['position_price']) &&
    isset($_POST['position_status']) &&
    isset($_POST['position_attr_1']) &&
    isset($_POST['position_attr_2']) &&
    isset($_POST['position_attr_3']) &&
    isset($_POST['position_attr_4']) &&
    move_uploaded_file($_FILES['position_img']['tmp_name'], $uploadfile)
) {
    echo 'here1';
    // Айди элемента
    $current_ID = $_POST['position_id'];
    $position_name = $_POST['position_name'];
    $position_price = $_POST['position_price'];
    $position_status = $_POST['position_status'];
    $position_attr_1 = $_POST['position_attr_1'];
    $position_attr_2 = $_POST['position_attr_2'];
    $position_attr_3 = $_POST['position_attr_3'];
    $position_attr_4 = $_POST['position_attr_4'];
    // Обрезаем лишнее
    $uploadfile = substr($uploadfile, 3);
    // sql to delete a record
    $sql = "UPDATE $data_base_TABLE SET 
            position_name='$position_name', 
            position_price='$position_price', 
            position_status='$position_status', 
            position_attr_1='$position_attr_1',
            position_attr_2='$position_attr_2',
            position_attr_3='$position_attr_3',
            position_attr_4='$position_attr_4',
            position_img='$uploadfile'
            WHERE id='$current_ID'";
    $result = $data_base_CONNECT->query($sql);
    var_dump($result);
    if ($result === TRUE) {
        echo $result_edit_true;
    } else {
        echo $result_edit_false . $data_base_CONNECT->error;
    }
    $data_base_CONNECT->close();
}else {
    echo 'Not all params are set';
}
Answer 1

Я не спец п PHP, но похоже что при пустом файле логика не отрабатывает ротик что функция move_uploaded_file($_FILES['position_img']['tmp_name... возвращает false при отсутствии файла. То есть программист, написавший этот код сознательно проверял успешность выполнения данной функции. Если логика поменялась, соответвующее условие нужно добавить и в проверку.

По всей видимости проверить передан ли файл можно через проверку на пустоту выражения $_FILES['position_img']['tmp_name']. Я бы сходил внутрь функции переноса файла и посмотрел как в ней проверяется первый параметр

Answer 2

Друг помог, вот ответ

// Подключаемся к БД
include "../includes/connect.php";
include "../includes/console.php";
// var_dump($_POST);
var_dump($_FILES['position_img']);
$uploaddir = '../media/img/';
$uploadfile = $uploaddir . time() . basename($_FILES['position_img']['name']);
if (
    isset($_POST['position_id']) &&
    isset($_POST['position_name']) &&
    isset($_POST['position_price']) &&
    isset($_POST['position_status']) &&
    isset($_POST['position_attr_1']) &&
    isset($_POST['position_attr_2']) &&
    isset($_POST['position_attr_3']) &&
    isset($_POST['position_attr_4'])
) {
    echo 'here1';
    // Айди элемента
    $current_ID = $_POST['position_id'];
    $position_name = $_POST['position_name'];
    $position_price = $_POST['position_price'];
    $position_status = $_POST['position_status'];
    $position_attr_1 = $_POST['position_attr_1'];
    $position_attr_2 = $_POST['position_attr_2'];
    $position_attr_3 = $_POST['position_attr_3'];
    $position_attr_4 = $_POST['position_attr_4'];
    // sql to delete a record
    $sql = "UPDATE $data_base_TABLE SET 
            position_name='$position_name', 
            position_price='$position_price', 
            position_status='$position_status', 
            position_attr_1='$position_attr_1',
            position_attr_2='$position_attr_2',
            position_attr_3='$position_attr_3',
            position_attr_4='$position_attr_4'
            WHERE id='$current_ID'";
    $result = $data_base_CONNECT->query($sql);
    var_dump($result);
    if ($result === TRUE) {
        echo $result_edit_true;
    } else {
        echo $result_edit_false . $data_base_CONNECT->error;
    }
}
if (isset($_FILES['position_img']) && move_uploaded_file($_FILES['position_img']['tmp_name'], $uploadfile)) {
// Обрезаем лишнее
    $uploadfile = substr($uploadfile, 3);
    // sql to delete a record
    $sql = "UPDATE $data_base_TABLE SET position_img='$uploadfile' WHERE id='$current_ID'";
    $data_base_CONNECT->query($sql);
    var_dump($result);
    if ($result === TRUE) {
        echo $result_edit_true;
    } else {
        echo $result_edit_false . $data_base_CONNECT->error;
    }
    $data_base_CONNECT->close();
}
else {
    echo 'Not all params are set';
}
Answer 3

Замените все isset на !empty.

И добавьте перед первым if:

foreach ($_POST as &$value) {
    if (is_array($value)) {
        continue;
    }
    $value = trim($value);
}
READ ALSO
Изменить индексы в массиве

Изменить индексы в массиве

Есть массив $my_array:

245
switch (true) + case по array[key]

switch (true) + case по array[key]

Подскажите, почему срабатывает только первый case, а второй нет?

323
Phpunit, Как сделать запрос к бд?

Phpunit, Как сделать запрос к бд?

Есть тесты, которые выполняются и записывают некоторые данные в бдЕсть метод в конце, который должен сделать запрос в бд и вытащить данные

132
Получить связанные элементы из таблиц Laravel 5.7

Получить связанные элементы из таблиц Laravel 5.7

У меня есть массив продуктовИ мне нужно получить теги с которыми связаны продукты (Product has many tags

117