Проверка формы на стороне сервера PHP с загрузкой нескольких файлов - PullRequest
0 голосов
/ 14 декабря 2010

HTML:

Owner: input type="text" name="owner[]" />
Category:
<select name="cat[]">
      <option value="clothes">Clothes</option>
      <option value="shoes">Shoes</option>
      <option value="accessories">Accessories</option>
</select>
Upload: <input type="file" name="image[]" />

с функцией, которая клонирует те же поля при нажатии на кнопку «+»

Я считаю поле POST:

$num = count($_FILES['image']['name']);

потому что я хочу знать, сколько раз конечный пользователь клонировал поля.

я хочу убедиться, что пользователь должен заполнить все поля, которые он открывает, кнопкой «+», я не могу проверить все скрытые поля, я хочу проверить только поле, которое он открывает.

так что я могу сделать?

Я не могу сделать так:

$owner = $_POST['owner'][$i];
$cat = $_POST['cat'][$i];
$file = $_FILES['image'][$i];

if ($owner && $cat && $file)
   echo "bla bla bla";
else
   echo "fill all the fields!";

Кто-нибудь может мне помочь?

спасибо

1 Ответ

3 голосов
/ 14 декабря 2010

Есть несколько моментов, в которых вам необходимо убедиться заранее.Всякий раз, когда вы используете атрибут name любого поля ввода как "owner[]" или "cat[]" или "image[]", вы получите массив.Но поскольку возможность доступа к свойствам входного файла по умолчанию уже является 2D-массивом, то теперь вы сможете получить доступ к этим свойствам как 3D-массив.

Когда вы добавили «[]» для атрибута name поля входного файла, теперь вы получите имя 1-го файла как «$_FILES['image'][0]['name']», поскольку индексы массива начинаются с 0.По вашему вопросу, вы можете проверить, используя следующий способ: -

<?php
$numOwners = count($_POST['owner']);
$numCats = count($_POST['cat']);
$numFiles = count($_FILES['image']);

// Check to see if the number of Fields for each (Owners, Categories & Files) are the same
if ($numFiles === $numCats && $numFiles === $numOwners) {
    $boolInconsistencyOwners = FALSE;
    $boolInconsistencyCats = FALSE;
    $boolInconsistencyFiles = FALSE;

    for ($i = 0; $i < $numFiles; $i++) {
        if (empty($_POST['owner'][$i])) {
            $boolInconsistencyOwners = TRUE;
            break;
        }

        if (empty($_POST['cat'][$i])) {
            $boolInconsistencyCats = TRUE;
            break;
        }

        if (!is_uploaded_file($_FILES['image'][$i]['tmp_name'])) {
            $boolInconsistencyFiles = TRUE;
            break;
        }
    }

    if ($boolInconsistencyOwners || $boolInconsistencyCats || $boolInconsistencyFiles) {
        echo "I knew that there will be some problems with users' mentality!";
        // Redirect with proper Error Messages
    }
    else {
        echo "Wow, Users have improved & have become quite obedient!";
        // Proceed with normal requirements
    }
}
else {
    echo "Something fishy is going on!";
}
?>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...