2016-02-24 2 views
-1

У меня есть базовая форма регистрации, и если вы проверяете, не задано ли поле (если (! $ Name)), оно всегда переходит в 'else', даже если поле пустое. Кто-нибудь знает, почему? (Когда я пытаюсь проверить его в обратном порядке (if ($ name)), он показывает строку ошибки.) * var_dump ($ name) - всегда возвращает строку, а не false. Я предполагаю, что это часть проблемы? ...

Большое спасибо!

<?php 
$error = ''; 
if(isset($_POST['submit'])){ 

$name = trim(filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING)); 

    if(!$name && preg_match("/^([\w]){2,50}$/", $name)){ 

    $error = ' * Please enter a valid name'; 

} 

?>

<form action="" method="post"> 

      <label for="name">Name:</label><br> 
      <input type="text" name="name"> <br><br> 
<input type="submit" name="submit" value="Sign up"> 
      <span class="error"><?= $error ?></span> 
</form> 
+0

Ваш код не соответствует вашему вопросу –

+1

Как $ name должно соответствовать этому регулярному выражению, если оно является пустой строкой? Невозможно удовлетворить оба условия. Вы имели в виду использовать '||' вместо '&&'? – gla3dr

+0

@ gla3dr это именно то, и это все, что нужно было изменить. –

ответ

0

Ну, у вас неправильный оператор IF. Вы проверяете, является ли $ name ложным (это будет только если вы отправляете пустую строку) И если длина между 2-50.

Рассмотрим два состояния:

<?php 
$name = 'Login'; 
$a = !$name; // FALSE! You're variable is OK, but you neg it 
$b = preg_match("/^([\w]){2,50}$/", $name); // TRUE! Between 2-50 letters 

<?php 
if($a && $b) { 
    die("Won't be visible, because $a and $b are not the same"); 
} 

И второе:

$name = ''; 
$a = !$name; // TRUE! You're variable is empty, but you neg it 
$b = preg_match("/^([\w]){2,50}$/", $name); // FALSE! has 0 letters 

if($a && $b) { 
    die("Won't be visible, because $a and $b are not the same"); 
} 

Таким образом, вы должны использовать OR вместо AND или просто забыть о первом заявлении (вторая проверка тоже самое!):

<?php 
if(!preg_match("/^([\w]){2,50}$/", $name)){ 
    $error = ' * Please enter a valid name'; 
} 
+0

Спасибо большое! это имеет смысл сейчас .... :) – user3185970

2

Вы получаете, что неопределенная переменная уведомления, потому что вы пытаетесь повторить что-то в форме, которая еще не была установлена ​​/ не пуст и ваш PHP/HTML-форма используются в том же файле.

Sidenote: <?= - это короткий синтаксис тегов для "echo".

Меняем:

<?= $error ?> 

к и условного оператора:

<?php if(!empty($error)) { echo $error; } ?> 

или:

<?php if(isset($error)) { echo $error; } ?> 

Или использовать тройной оператор:

или добавить else к моему предложению выше.

Кроме того, у вас также есть недостающая скобка на вашем PHP (по крайней мере, за то, что вы отправили), и это само по себе должно было вызвать неожиданный конец ошибки файла.

Edit:

Причина, по которой это происходит сбой является оператором вы используете, будучи && (AND). Используйте || (OR), чтобы проверить, не прошел ли один из них критерии, а не оба. Вы проверяете, нет ли имени И если есть достаточно действительных символов.

if(!$name || preg_match("/^([\w]){2,50}$/", $name)) 

и все, что было, простой неправильный выбор оператора.

Btw, мое редактирование не основывалось на другом ответе. Я действительно был занят проверкой этого, когда это было опубликовано.

Их объяснение хорошо написано/объяснено, однако они работают слишком усердно.

Изменение && до || в вашем коде сработало бы просто отлично.

+0

Я использую короткий тег, потому что я не хочу его повторять, если он есть (в противном случае это пустая строка), но проблема в том, что поле не определено как пустое – user3185970

+0

@ user3185970 использует тернарный оператор, тогда , как я добавил в своем ответе в редактировании. или добавить «else». –

+0

спасибо, я не хочу проверять $ error, хотя. Мне нужно проверить $ name. Я получаю ошибку, если я проверяю ее наоборот, потому что регулярное выражение обнаруживает проблему, но когда checkinh! ($ Name) всегда идет в 'else'. никогда не распознается как пустой – user3185970

Смежные вопросы