За последние 24 часа нас посетили 22505 программистов и 1139 роботов. Сейчас ищут 620 программистов ...

Не работает условие if

Тема в разделе "PHP для новичков", создана пользователем Евгений111, 10 сен 2019.

  1. Евгений111

    Евгений111 Новичок

    С нами с:
    10 сен 2019
    Сообщения:
    2
    Симпатии:
    0
    Не работает условие if. Есть такой код

    echo "Name: '".$result["NAME"]."'\n";
    if ($result["NAME"] != "Авдеевка") {
    echo "IN";
    } else echo "OUT";

    Выводит:
    Name: 'Авдеевка'
    IN

    Хотя должен выводить OUT. Если проверить название в $result["NAME"] и в if, то оно совпадает (проверял посимвольно в notepad++). Из-за чего такое может быть? Возможно дело в кодировке? Как это проверить?
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @Евгений111, ничего проверять не надо. Кодировка РНР файла, кодировка БД и кодировка соединения с БД должна быть одинаковой. И желательно utf-8.
     
  3. AlexandrS

    AlexandrS Активный пользователь

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    PHP:
    1. <?php
    2.  
    3. $result["NAME"] = "Авдеевка";
    4.  
    5. echo "Name: '".$result["NAME"]."'\n";
    6.  
    7. if ($result["NAME"] != "Авдеевка") {
    8. echo "IN";
    9. } else echo "OUT";
    10.  
    11.  
    12. echo "<BR>";
    13.  
    14.  
    15. $result["NAME"] = "НЕ Авдеевка";
    16.  
    17. echo "Name: '".$result["NAME"]."'\n";
    18.  
    19. if ($result["NAME"] != "Авдеевка") {
    20. echo "IN";
    21. } else echo "OUT";
    22.  
    23. ?>
    Result:

    Name: 'Авдеевка' OUT
    Name: 'НЕ Авдеевка' IN


    Всё работает как и задано в условии, другой вопрос каким образом в $result["NAME"] попадает Авдеевка, если грешите на кодировку, то проверить просто - поменяйте кириллицу на латиницу "Авдеевка" => "Avdeevka"
     
  4. DarkU

    DarkU Активный пользователь

    С нами с:
    15 июл 2013
    Сообщения:
    12
    Симпатии:
    2
    UTF8 или LATIN1 БД. (хотя для новычка это не важно).
    Если вы не уверены, что приходит из БД, что из формы (или откуда у вас там данные),
    Используйте mb_detect_encoding() для теста.
    Далее все отправляете через mb_convert_encoding() и результат уже сравниваете.
    + хорошо бы перевести строки в один регистр и сравнивать как тип === тип.
     
  5. Евгений111

    Евгений111 Новичок

    С нами с:
    10 сен 2019
    Сообщения:
    2
    Симпатии:
    0
    Данные приходят из БД. С mb_detect_encoding что-то не получается. Добавил echo mb_detect_encoding($result["NAME"]); - ничего не выводится. Код http://joxi.ru/5md5qE1I3zPKP2 а вот что выводит http://joxi.ru/Y2LB5Wli75O8lr - смотрю в режиме "Просмотр кода страницы".
     
  6. FoxCloud

    FoxCloud Активный пользователь

    С нами с:
    20 июн 2017
    Сообщения:
    172
    Симпатии:
    2
    возможно, буквы на разных языках набраны.
    $result["NAME"] = 'Авдеевка';//буквы e на русском
    $result["NAME"] = 'Авдeeвка';//буквы e на английском

    echo "Name: '".$result["NAME"]."'\n";
    if ($result["NAME"] != "Авдеевка") {
    echo "IN";
    } else echo "OUT";
     
  7. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Еще бы trim сделать а то малоли. Ну и проверить можно через var_dump
     
    Valick нравится это.