PHP почему не работает if?

159
25 августа 2019, 18:30

Есть форма которая сохраняет настройки в виде массива, массив вида:

Array
(
    [p1] => 4560
    [p2] => 4567
    [proxy2] => 
    [proxy1] => 0
)

или

Array
(
    [p1] => 4560
    [p2] => 4567
    [proxy1] => on
    [proxy2] => 185.80.128.172:3128
)

сама форма

<form action="" method= "POST"> 
На сайте 4566 страниц. 
 <p>Парсить с : </p><p> <input type= "text" name= "p1" value="4560"> </p> 
 <p>по: </p><p> <input type= "text" name= "p2"  value="4567"></p>
<p>Использовать прокси : </p><p> <input type="checkbox" name= "proxy1" checked="checked"> </p> <p>Список прокси с новой строки: </p>
<p><textarea name= "proxy2">185.80.128.172:3128</textarea></p>
 <input type= "submit" value= "Отправить"> 
 </form>

в пхп обработчике делаю следуйщее

echo "<pre>";
print_r($configs);
echo "</pre>";

if ($configs['proxy1']=='0') {
    echo '<p>Парсим без прокси : </p><br>'; 
    $data=get_url($url);
}
if ($configs['proxy1']=='on') {
    echo '<p>Используем прокси : </p>'.$prox1.'<br>'; 
    $data=get_url_pr($url, $prox1); 
}

в результате, если $configs['proxy1']=='on' то все работает нормально, а если [proxy1] => 0 то выполняются два IF, тоесть выполняется код

    echo '<p>Парсим без прокси : </p><br>'; 
    $data=get_url($url);
    echo '<p>Используем прокси : </p>'.$prox1.'<br>'; 
    $data=get_url_pr($url, $prox1); 

условие не срабатывает, почему так?

пробовал так, тоже при начение 0, выполняется условие будто в настройках on

if ($configs['proxy1']=='on') {
        echo '<p>Используем прокси : </p>'.$prox1.'<br>'; 
        $data=get_url_pr($url, $prox1); 
    }else{
        echo '<p>Парсим без прокси : </p><br>'; 
        $data=get_url($url);
}

пример выполнения скрипта http://copy-lend.ru/work/pars-marathons/index.php

UP: Решение, может кому пригодится

if ($configs['proxy1']!=true) {
    echo '<p>Парсим без прокси : </p><br>'; 
    $data=get_url($url);
}
if ($configs['proxy1']!=false) {
    echo '<p>Используем прокси : </p>'.$prox1.'<br>'; 
    $data=get_url_pr($url, $prox1); 
}
Answer 1

Попробуйте вместо 0 и on использовать true и false.

Answer 2

Потому что 0 == on равно true.

Используйте либо строгое сравнение ===, либо используйте else, а не второй иф, либо просто используйте само значение, оно будет автоматически приведено к булеву типу:

if (!$configs['proxy1']) // сработает для 0
if ($configs['proxy1']) // сработает для on
READ ALSO
С++ Проблемки с задачкой

С++ Проблемки с задачкой

***Помогите решить проблему: Ввожу кол-во задач больше 2 и у меня начинается бесконечный циклЯ только обучаюсь, но не пойму в чем проблема в этой...

111
Вектор ссылок С++

Вектор ссылок С++

Изучаю классы в C++В следующем коде я хочу реализовать общую функцию updateAge(), которая у каждого элемента класса People (т

107
Как хранить служебную информацию в табе?

Как хранить служебную информацию в табе?

Я создаю в QTabWidget динамические табы, в котором есть динамически созданные QLabel-ыУ каждого QLabel есть свой номер

108
C++ контейнеры map и set

C++ контейнеры map и set

Расжуйте пожалуйста эти строки:

119