почему это всегда умирает? - PullRequest
0 голосов
/ 12 января 2010
$extension = "jpg"

    if($extension != "jpg" || $extension != "gif" || $extension != "png") die("only jpg, gif, png acceptable");

кажется, что он всегда умирает ().

Ответы [ 5 ]

6 голосов
/ 12 января 2010

Вы хотите && не ||.

Прочитайте это вслух как:

"Если x не равно Y, ИЛИ x не равно N".

Очевидно, что не имеет значения, что равно x, поскольку Y и N не равны, утверждение всегда будет верным:)

5 голосов
/ 12 января 2010

Поскольку $extension не может быть "jpg", "gif" и "png" одновременно, по крайней мере два из подусловий выполняются.

И, поскольку вы используете or (||) вместо and (&&), любое истинное подусловие сделает все условие истинным.

Вы хотите что-то вроде:

if (($extension != "jpg") && ($extension != "gif") && ($extension != "png")) {
    die ("only jpg, gif, png acceptable");
}
2 голосов
/ 12 января 2010

Вы используете оператор NOT EQUAL TO со связкой ORs.

$extension = "jpg"
if ($extension != "jpg" || 
    $extension != "gif" || 
    $extension != "png") 
    die("only jpg, gif, png acceptable");

Вы можете исправить это одним из двух способов:

  • Переключить все || на &&
  • Упростите, имея массив допустимых расширений:

$valid = array('jpg' => true, 'gif' => true, 'png' => true);
if (!isset($valid[$extension])) {
    // not a valid extension
}
1 голос
/ 12 января 2010
$extension = "jpg"

    if($extension != "jpg" && $extension != "gif" && $extension != "png") die("only jpg, gif, png acceptable");

Это может работать

0 голосов
/ 12 января 2010

Причины уже объяснены, более того, вы можете просто сделать это с ожидаемым результатом:

$extension = "jpg";
if(!in_array($extension,array("jpg","gif","png"))){
    die("only jpg, gif, png acceptable");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...