За последние 24 часа нас посетили 56022 программиста и 1773 робота. Сейчас ищут 949 программистов ...

Переменная не равна ожидаемому значению.

Тема в разделе "PHP для новичков", создана пользователем tohyich, 17 окт 2009.

  1. tohyich

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

    С нами с:
    25 окт 2006
    Сообщения:
    20
    Симпатии:
    0
    Есть в коде переменная $startid? которая по моему предположению должна равнятся 65 (это Id строки из базы данных)

    Однако при обращении к БД ничего не возвращается. Решил поковырять вывел и сравнил содержимое $startid:

    Код (Text):
    1. $output="<!--startid=$startid-->";
    2. ($startid=='65')?( $output.="<!--startid=65-->"):( $output.="<!--startid!=65-->");
    3. ($startid==='65')?( $output.="<!--startid==65-->"):( $output.="<!--startid!==65-->");
    Получил на выходе:
    Код (Text):
    1. <!--startid=65-->
    2. <!--startid!=65-->
    3. <!--startid!==65-->
    Решив что проблема в разных типах данных перед сравнением сделал intval($startid);
    Не помогло....
    то есть переменная содержит 65, но не равные 65....

    Как еще можно проверить, что именно содержит переменная?
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Брр. не понятен вопрос абсолютно.

    PHP:
    1. <?php
    2. $startid = 65;
    3. echo 'simple 65 - ';
    4. if ($startid == 65) {
    5.     echo 'YES';
    6. } else {
    7.     echo 'NO';
    8. }
    9. echo '<br>';
    10.  
    11. echo 'strict 65 - ';
    12. if ($startid === 65) {
    13.     echo 'YES';
    14. } else {
    15.     echo 'NO';
    16. }
    17. echo '<br>';
    18.  
    19. echo 'simple string 65 - ';
    20. if ($startid == '65') {
    21.     echo 'YES';
    22. } else {
    23.     echo 'NO';
    24. }
    25. echo '<br>';
    26.  
    27. echo 'strict string 65 - ';
    28. if ($startid === '65') {
    29.     echo 'YES';
    30. } else {
    31.     echo 'NO';
    32. }
    33.  
    Код (Text):
    1. simple 65 - YES
    2. strict 65 - YES
    3. simple string 65 - YES
    4. strict string 65 - NO
     
  3. tohyich

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

    С нами с:
    25 окт 2006
    Сообщения:
    20
    Симпатии:
    0
    признаюсь: замучавшись сэтой проблемой перестал говорить на понятном языке.
    поясню.
    $startid я получаю от cms, и дальше начинаются танцы с бубном.
    если просто echo $startid, то выводит 65.
    а если сравнивать ее с 65 (в любых вариациях) сравнение выдает false.

    вот я и интересуюсь, как еще можно узнать, что же содержит эта переменная.
    щас попробую ее в hex перевести, ради интереса....
     
  4. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    var_dump() выдаст все что нужно.

    и
    Вранье полное.
     
  5. tohyich

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

    С нами с:
    25 окт 2006
    Сообщения:
    20
    Симпатии:
    0
    Вот тока давай без обвинений! У меня проблема которую я решить не могу. Я привел участок кода и его вывод. Если тебе кажется, что мне нечем больше занятся, кроме как составлять фейковые выводы - добро пожаловать в л.с. дам тебе доступ в админку тестового сайта и к выводу скрипта.


    Значит так. Вот код пхп:
    PHP:
    1.  
    2.  intval($startid);
    3.  $output="<!--startid=$startid-->";
    4. (65==$startid)?( $output.="<!--startid=65-->"):( $output.="<!--startid!=65-->");
    5. ($startid===65)?( $output.="<!--startid==65-->"):( $output.="<!--startid!==65-->");
    6. var_dump($startid);
    7. return $output;
    8.  
    Вот вывод который он дает:
    HTML:
    1.  
    2. string(6) "65"
    3. <!--startid=65-->
    4. <!--startid!=65-->
    5. <!--startid!==65-->
    Непонятно для меня почему после intval($startid); var_dump говорит что она string...
    Причем если в операциях сравнения закавычить "65" ничего не менятся...
     
  6. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    потому что вообще-то присваивать надо $startid = intval($startid);
    Это раз.

    А два, твой код у меня работает даже в таком виде.
    PHP:
    1. <?php
    2. $startid ='65';
    3. intval($startid);
    4.   $output="<!--startid=$startid-->";
    5.  (65==$startid)?( $output.="<!--startid=65-->"):( $output.="<!--startid!=65-->");
    6.  ($startid===65)?( $output.="<!--startid==65-->"):( $output.="<!--startid!==65-->");
    7.  var_dump($startid);
    8.  var_dump($output);
     
    tohyich нравится это.
  7. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Блин, я не пойму, где вы находите проблемы на ровном месте?
     
    tohyich нравится это.
  8. tohyich

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

    С нами с:
    25 окт 2006
    Сообщения:
    20
    Симпатии:
    0
    Если я напишу
    Код (Text):
    1. $startid ='65';
    То все работает. Но проблема в том что эту переменную я получаю от КМС!
    И var_dump отличается! от CMS я получаю:
    string(6) "65";

    А если создать самому:
    string(2) "65";

    Я так понял цифра в скобках отвечает за длину строки. Как увидеть лишние 4 символа??

    Кстати если сделать $startid=intval($startid);
    То var_dump выдает:
    int(0)

    Разобрался. Проблема с CMS.
    Сделал так
    Код (Text):
    1. $ord='';
    2.     for ($i=0; $i < strlen($startid); $i++)
    3.     {
    4.         $ord .= ' '.ord($startid[$i]);
    5.     }
    6.  $output.="<!--".$ord."-->";
    И получилось, что кмс не обрабатывая шаблонный тег (который при обработке должен был заменится на 65) засунула его в переменную.
    При выводе проверки КМС исправно заменяла тег на 65 и сводила меня с ума...
    То есть мой скрипт(как часть кмс) выдавал
    Код (Text):
    1. string(6) "[*id*]"
    а кмс обрабатывая эту строку выдавал мне в браузер
    Код (Text):
    1. string(6) "65"
     
  9. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вот поэтому в жопу шаблонизаторы типа Смарти.