URL-адрес изображения не может пройти, если утверждение

Я публикую URL-адрес изображения в php-скрипте. В этом php-скрипте я получаю URL-адрес изображения и проверяю, что это за расширение, и соответствует ли это расширение паре расширений или нет:

        $ext1 = pathinfo($_POST['form_pic'], PATHINFO_EXTENSION);
        $ext = strtolower($ext1);

        if($ext != 'jpg' || $ext != 'jpeg' || $ext != 'png' || $ext != 'gif') {
            echo $ext; echo "wrong";        
        }else{
            echo "a correct extension";
        }

Но даже когда я публикую URL-адрес, например: http://www.test.com/picture.jpg и он получает расширение, в данном случае jpg, он все равно проходит через оператор if, говоря, что расширение не равно один упомянутый в заявлении if.

Я не знаю, что я делаю не так?

4 ответа

Решение

Ваш код почти правильный, но вы должны использовать правильный оператор, который && в этом случае.

Пожалуйста, попробуйте это:

$ext1 = pathinfo($_POST['form_pic'], PATHINFO_EXTENSION);
$ext = strtolower($ext1);

   if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'png' && $ext != 'gif') {
        echo $ext; echo "wrong";        
   } else {
        echo "A correct extension";
   }

Когда вы используете последовательность отрицательных утверждений, всегда должен быть использован оператор &&,

Есть много способов сделать то, что вы хотите, но если вы хотите сохранить свой код, как он просто изменить || в && и у тебя все будет хорошо.

Пожалуйста, прочитайте больше о логических операторах в PHP.

Вы могли бы также сделать

if(in_array($ext,array('gif','jpg','jpeg','png')){
//good
}else{
//bad
}

Вы хотите использовать and в этой логике не or,

if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'png' && $ext != 'gif')

В настоящее время ваш if Оператор гласит: "Если расширение не является jpg или не png или не является gif", что всегда будет совпадать, даже если расширение разрешено (то есть "jpg"), потому что "jpg"!= "png".

Ты хочешь and потому что это сделает if Оператор гласил: "Если расширение не jpg, не png и не gif", то оно недействительно.

Попробуйте переключить логику:

if($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' || $ext == 'gif') {
    echo "a correct extension";
}else{
    echo $ext; echo "wrong";        
}

При использовании ИЛИ условие будет запущено, если будет выполнен какой-либо из критериев, и, поскольку расширение.jpg не будет совпадать с расширением.png, оно даст вам Wrong сообщение.

Другие вопросы по тегам