использование or (||) в php, если условие создает проблему - PullRequest
1 голос
/ 10 марта 2010

я сделал что-то вроде этого:

  <form action="validate.php" method="get">
Id :<input type="text" name="pID"/><br/><br/>
Name :<input type="text" name="pName"/><br/><br/>
Description :<input type="text" name="pDesc"/><br/><br/>
Price :<input type="text" name="pPrice"/><br/><br/>
<input type="submit" name="pSub"/>
</form>

мой validate.php содержит:

<?php 

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice'])){
            if(is_numeric($_GET['pID']) || is_numeric($_GET['pPrice']))
            {
                echo "</br>Your ID :".$_GET["pID"]."</br>";
                echo "Name is :".$_GET["pName"]."</br>";
                echo "Description :".$_GET["pDesc"]."</br>";
                echo "and Price :".$_GET["pPrice"]."</br>";
            }
            else{echo "Pls See That ID and Price are Numerical";}
}else{
echo "Fill up All The Values";
}
?>

не работает должным образом,

1-е, если условия не работают должным образом то есть. если бы я оставил пустым поле «Имя», в поле ввода должно было бы появиться сообщение «Заполните все значения» ...... вместо этого отображается список входных данных

Есть ли другой способ проверки формы (PHP)

Ответы [ 5 ]

4 голосов
/ 10 марта 2010

Вы используете неправильный оператор: || означает «логическое ИЛИ»; то, что вы, похоже, ищете, это &&, то есть «логическое И».

Код делает именно то, что вы сказали , что нужно сделать ( см. Документацию ); тот факт, что вы намеревались , что-то еще не имеет отношения к компьютеру:

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice']))

означает «если pID не пустой ИЛИ pName не пустой ИЛИ ...»; как только одно или несколько полей не пусты, условие оценивается как истинное.

Что вы можете сделать, чтобы получить то, что вы имели в виду:

  • заменить ИЛИ на И (&&)
  • use if (!(empty($_GET['pID']) || empty($_GET['pID'] ...)) - обратите внимание, что все выражение отрицается в скобках

(читайте законы Де Моргана , чтобы понять, почему эти два решения эквивалентны)

1 голос
/ 10 марта 2010

Это логическая проблема с вашим кодом. Использование || в этой ситуации означает, что если ЛЮБОЙ из этих входов содержит значение, то первое условие выполняется. То, что вы хотите сделать, это И, а не ИЛИ, чтобы первое условие выполнялось только в том случае, если все входные данные пустые!

Я точно не помню, что такое оператор AND для PHP, так как это было давно, но, вероятно, &&.

1 голос
/ 10 марта 2010

Вероятно, лучше поменять условия следующим образом:


if(empty($_GET['pID']) || empty($_GET['pName']) || empty($_GET['pDesc']) || empty($_GET['pPrice'])) {
   echo "Please fill up all the values";
} else {
   // Do other validation.
}

Таким образом, вы знаете, что ваши данные верны, прежде чем делать что-либо еще. Очевидно, я не проверял это, но это должно работать как ожидалось. То, что вы говорили раньше, спрашивало, не является ли ЛЮБОЙ из входов пустым, выполните дополнительную проверку. Как объяснил один из других комментаторов, если вы хотите сделать это, вы должны использовать && вместо ||.

Изменение его просто делает его немного понятнее!

0 голосов
/ 08 ноября 2014

На вопрос уже дан ответ, но есть еще одна вещь,

Я рекомендую вам использовать $ _POST вместо $ _GET, потому что $ _POST более безопасен, так как вы используете формы HTML. Вы можете посмотреть это в интернете. Вот ссылка, первый ответ говорит сам за себя: Разница между $ _POST & $ _GET

0 голосов
/ 10 марта 2010

Это просто неправильно

if (!empty($_GET['pID']) || !empty($_GET['pName']) || !empty($_GET['pDesc']) || !empty($_GET['pPrice'])){}

Вам нужно сделать так:

if (!empty($_GET['pID'], $_GET['pName'], $_GET['pDesc'], $_GET['pPrice'])){}

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

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