За последние 24 часа нас посетили 16452 программиста и 1642 робота. Сейчас ищут 1148 программистов ...

Данные выдаются не так как надо

Тема в разделе "Прочие вопросы по PHP", создана пользователем dedry, 5 окт 2014.

  1. dedry

    dedry Новичок

    С нами с:
    2 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    - из базы данных выдаётся только одно значение, хотя имеются ещё значения, которые соответствуют заданным параметрам (echo $solution2 ["a"]; )

    - если в базе данных нет ни одного значения, то должно выходить следующее: Sorry, there are no one with your parameters. Bместо этого выходит значение, которое было занесено в формуляр (может быть потому что это значение уже было занесено до этого в формуляр (if($input == true)), но тогда вопрос как его устранить?

    Mожет кто-нибудь подсказать, я думаю что нужно применить WHILE, но не знаю как это сделать на практике.

    Код (Text):
    1. if($input == true)
    2.    {
    3.     $query2 = "SELECT a FROM tabelle WHERE b LIKE '$b' AND c LIKE '$c' ";
    4.    $result2 = mysqli_query($cxn, $query2);
    5.    $solution2 = mysqli_fetch_assoc($result2);
    6.    }
    7.        if ($solution2 == 0)
    8.        {
    9.         echo "Sorry, there are no one with your parameters.";
    10.        }
    11.        else
    12.        {
    13.        echo $solution2 ["a"];
    14.        }
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    http://php.net/manual/ru/mysqli-result.fetch-assoc
    в доках на php.net очень полезные примеры самой справки и куча ништяков в комментариях. читай справку полностью. поищешь на странице слово "while", найдешь то, что надо.
     
  3. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Не факт. Добавьте limit 1 чтобы стало фактом и не пришлось применять while

    И тогда вот так:

    Код (Text):
    1. if($solution2 = mysqli_fetch_assoc($result2))
    2.   echo $solution2['a'];
    3. else
    4.  echo "Sorry, there are nobody with your parameters."
    А точно там должно быть ничтожество? - Sorry, there are nobody with your parameters - Простите, но там ничтожество с вашими характеристиками.
     
  4. dedry

    dedry Новичок

    С нами с:
    2 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    Код (Text):
    1. $query = "SELECT email FROM tabelle WHERE year LIKE '$year'";
    2.  
    3. if ( $result = mysqli_query($cxn, $query) ) {
    4.     while ( $row = mysqli_fetch_assoc($result) ) {
    5.         echo $row['email']."\r\n";
    6.     }
    7.     mysqli_free_result($result);
    8.  
    9.  
    10. } else {
    11.     echo "Sorry, there are no emails";
    12. }
    переделал, но почему-то всё равно не работает

    Код (Text):
    1. if ($result = mysqli_num_rows( $query))
    2.  
    3. {
    4.     while ( $row = mysqli_fetch_assoc($result))
    5.     {
    6.         echo $row['email']."\r\n";
    7.     }
    8.     mysqli_free_result($result);
    так тоже
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    возвращает кол-во строк в результате запроса а не в тексте запроса. внимательнее.
     
  6. dedry

    dedry Новичок

    С нами с:
    2 окт 2014
    Сообщения:
    4
    Симпатии:
    0
    напиши пожалуйста как правильно
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот тут еще логика верная. честно говоря не понимаю зачем проверять был ли результат запроса. если есть результат то фетч_ассоц будет возвращать строки. если нет - ругнется. но для этого можно после выполнения запроса проверять состояние ошибки.
     
  8. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Пустой результат не генерит ошибку, при этом ошибка в запросе и чтении результата генерит свое прерывание, которое не для пользователей, придется отлавливать, разбираться, геморрой. В стопицот раз проще проверить количество строк и сделать свое прерывание, типа

    Код (Text):
    1. if($result->num_rows < 1)
    2.     throw new Exception('Пользователь не найден');
    Добавлено спустя 11 минут 32 секунды:
    UPD, да, можно и так

    Код (Text):
    1. if(!$s = $r->fetch_assoc())
    2.     throw new Exception('Пользователь не найден');
    3. // юзаем $s
    Добавлено спустя 9 минут 46 секунд:
    Посмотрел коды, вспомнил почему можно, но не можно. $s получается буфером, временной переменной, в рабочую null писать нельзя, ибо там, допустим, должен быть Array. Следовательно получив успешно в $s придется переписывать в рабочую. Ну вот, а проверка числа строк избавляет от лишних забот. Полностью получается так

    Код (PHP):
    1. if($result->num_rows < 1)
    2.    throw new Exception('Пользователь не найден');
    3. $work_var = $result->fetch_assoc(); // тут уже стопудово массив
    4. $result->free();
     
  9. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Чтобы лишний раз не обращаться к функции которая генерит строки.
    Хотя на этот счет я думаю не стоит париться, если будет ошибка, она будет и ее лучше исправить.
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вернуть код ошибки быстрее чем посчитать кол-во строк в результате. и менее накладно для СУБД.