Некоторые поля ввода HTML очищаются при проверке PHP, другие нет - PullRequest
0 голосов
/ 27 августа 2010

Вот проблема. У меня есть код проверки данных и санитарии в PHP и форма HTML. Когда какое-либо поле остается пустым в форме, код проверки выполняется и печатает сообщение. Я подумал, что разработал форму так, чтобы все заполненные поля сохраняли свои входные данные в этой точке. Тем не менее, это оказывается противоречивым. Например, поля имени и фамилии становятся пустыми, тогда как поля телефона и улицы все еще содержат данные, введенные пользователем до проверки.

Вот HTML:

<p>
    <label for="firstname">FIRST NAME*:
    </label>
    <input type="text" name="firstname" id="firstname" value="<?php echo $firstname?>" />
</p>    

<p>
    <label for="lastname">LAST NAME*:
    </label>
    <input type="text" name="lastname" id="lastname" value="<?php echo $lastname?>" />
</p>    

<p>
    <label for="phone">TELEPHONE NUMBER*:
    </label>
    <input type="text" name="phone" id="phone" value="<?php echo $phone?>" />
</p>

    <p>
    <label for="street">STREET ADDRESS*:
    </label>
    <input type="text" name="street" id="street" value="<?php echo $street?>" />
</p>

Вот скрипт проверки:

if ($_POST['firstname'] != "") {
        $_POST['firstname'] = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);
        if ($_POST['firstname'] == "") {
            $errors .= 'Please enter a valid first name.<br/><br/>';
        }
    } else {
        $errors .= 'Please enter your first name.<br/>';
    }

    if ($_POST['lastname'] != "") {
        $_POST['lastname'] = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);
        if ($_POST['lastname'] == "") {
            $errors .= 'Please enter a valid last name.<br/><br/>';
        }
    } else {
        $errors .= 'Please enter your last name.<br/>';
    }

    if ($_POST['phone'] != "") {
        $phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
        if ($_POST['phone'] == "") {
            $errors .= 'Please enter a valid phone number.<br/><br/>';  
        }
    } else {
        $errors .= 'Please enter your phone number.<br/>';
    }

    if ($_POST['street'] != "") {
        $street = filter_var($_POST['street'], FILTER_SANITIZE_STRING);
        if ($_POST['street'] == "") {
            $errors .= 'Please enter a valid street address.<br/><br/>';
        }
    } else {
        $errors .= 'Please enter your street address.<br/>';
    }

Для меня все поля выглядят одинаково. Что может вызвать несоответствие?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 27 августа 2010

Вы устанавливаете переменные $phone и $street, но не $firstname или $lastname. Вместо этого вы переназначаете переменные $_POST:

$_POST['lastname'] = filter_var($_POST['lastname'], FILTER_SANITIZE_STRING);

filter_var возвращает либо отфильтрованный вход, либо false в случае сбоя фильтра, поэтому вам также следует проверить, что результат вашего фильтра не false (вместо == "" ), чтобы вызвать вашу ошибку.

Например:

if ($_POST['firstname'] != "")
{
  $firstname = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);

  if ($firstname === false)
  {
    $errors .= 'Please enter a valid first name.<br/><br/>';
  }
}
else
{
  $errors .= 'Please enter your first name.<br/>';
}
2 голосов
/ 27 августа 2010

Сравнить:

$phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);

С:

$_POST['firstname'] = filter_var($_POST['firstname'], FILTER_SANITIZE_STRING);

С номером телефона и адресом вы сохраняете его в переменной, а затем распечатываете содержимое этой переменной. С именем и фамилией вы сохраняете очищенное значение в массиве post, а затем печатаете некоторую неинициализированную переменную.

Чистым решением будет изменить либо место хранения номера телефона и адреса, либо имя и фамилию, но для этого могут потребоваться изменения в коде, который вы не указали. Изменение следующего обязательно будет работать:

<input type="text" name="firstname" id="firstname" value="<?php echo $firstname?>" />

становится:

<input type="text" name="firstname" id="firstname" value="<?php echo $_POST['firstname']?>" />

и

<input type="text" name="lastname" id="lastname" value="<?php echo $lastname?>" />

становится:

<input type="text" name="lastname" id="lastname" value="<?php echo $_POST['lastname']?>" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...