Прокрутите элементы формы и проверьте, требуются ли они - PullRequest
1 голос
/ 08 февраля 2012

Я бы хотел просмотреть все элементы в представленной форме, назначить каждому элементу свою собственную переменную и затем проверить, требуются ли они.Если они требуются, они будут проверены, если они пусты.Пока что моя форма выглядит так:

<form id="newitem" action="addnew.php" method="POST">
        <label for="title">Title: </label>
        <input type="text" name="title" id="title" required="required" /><br />
        <label for="description">Description: </label>
        <textarea name="description" id="website" cols="40" rows="5" ></textarea><br />
        <input type="hidden" name="formsubmit" value="true" /><!-- Option to know we've sumbited the form -->
        <input type="submit" value="Submit" id="submit" />
</form>

Затем я проверил ее, используя следующее:

if (isset($_POST['formsubmit'])) {
    // form has been submitted
    $errors = Array();
    foreach($_POST as $key => $value) {
        $$key = $value;
        if (!$value) {
            array_push($errors, 'Please enter a value for ' . $key);
        }
    }
    if (count($errors) == 0) {
        echo 'Form validated';
    } else {
        showErrors($errors);
    }
}

В настоящее время проверяется, имеют ли элементы значение.Однако я хотел бы проверить, является ли это поле обязательным, используя HTML required="required".
Кроме того, хотя я чувствую, что понимаю, как это работает, я не уверен в этом.Я думаю, что $$key = $value в основном означает создание переменной со значением $key и присвоение ей значения $value.Итак, $key - это имя элемента, а $value - его значение.Тем не менее, я действительно не понимаю foreach($_POST as $key => $value) {.Я знаю, что это циклы, хотя все $_POST, но на самом деле не знаю больше, чем это.
Спасибо за любую помощь!

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

Если вы думаете, что ищете что-то вроде

$errors = Array();
foreach($_POST as $key => $value) {
    if (empty($value)) {
        $errors[] = 'Please enter a value for ' . $key;
    }
}

Foreach зацикливается на ассоциативном массиве и дает вам ключ и значение каждого «элемента» в массиве.В этом случае он даст вам имя поля в $ key и значение поля в $ value.

См. http://php.net/manual/en/control-structures.foreach.php для получения дополнительной информации.

Однако,если поле вообще не было отправлено (то есть не отправлено от клиента на сервер), $ _FORM вообще не будет содержать это поле .Таким образом, чтобы проверить, заполнены ли некоторые обязательные поля, этот список также должен быть на стороне сервера ..!Код будет выглядеть примерно так:

$errors = Array();
$requiredfields = Array("somefield" => "...", "secondfield" => "...");
foreach($_POST as $key => $value) {
    unset($requiredfields[$key]); // The encountered field $key is present
    if (empty($value)) {
        $errors[] = 'Please enter a value for ' . $key;
    }
}
// Loop over all the required fields that are not found
foreach($requiredfields as $key => $val) {
    $errors[] = 'Please enter a value for ' . $key;
}
0 голосов
/ 08 февраля 2012

Обычный способ сделать это - реализовать двойную проверку: на стороне клиента и на стороне сервера. Проверка клиента будет использовать JS для проверки полей на более базовом уровне, и, поскольку его можно обмануть (или отключить JS), вам также необходимо реализовать проверку на стороне сервера.

Использование jQuery очень легко проверить, если поля являются обязательными. Виллем Малдер указал на некоторые основные, но, тем не менее, действительные действительные для проверки на пустые значения.

0 голосов
/ 08 февраля 2012

я думаю, что вы здесь немного путаетесь ... сервер получает только имя и значение полей <input>.PHP автоматически создает ассоциативные массивы ($ _POST и $ _GET) на основе метода <form>.Таким образом, вы не можете знать, какое поле имеет атрибут required, если вы не вставите некоторую бизнес-логику

if (isset($_POST['formsubmit'])) {
    // form has been submitted
    $errors = Array();
    foreach($_POST as $key => $value) {
        $$key = $value;
        //check that title has a value
        if ($key === "title" && !$value) {
            array_push($errors, 'Please enter a value for ' . $key);
        }
    }
    if (count($errors) == 0) {
        echo 'Form validated';
    } else {
        showErrors($errors);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...