За последние 24 часа нас посетил 57281 программист и 1809 роботов. Сейчас ищут 946 программистов ...

Как можно приравнять значение переменной к функции

Тема в разделе "PHP для новичков", создана пользователем kams, 18 дек 2015.

  1. kams

    kams Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    25
    Симпатии:
    0
    Первая тема на форуме, но уже запарился мучится. Вроде пишу код по уроку, он работает. Но не понимаю логики. В поиск не слать, не нашел ничего, наверно не верно ищу...

    Вопрос такой:
    Делаю по урокам Валака Интернет Магазин.
    И вот затуп, выводим получаем данные из базы:
    1) подключились к базе
    2) сделали запрос, получили таблицу с данными.
    3) Перевели все данные в массив функцией: $massiv = mysql_fetch_array($sql);
    4) Далее проверяю для себя, пишу print_r ($massiv);
    Все норм, выводит первую строку из таблицы.

    Далее по урокам надо все это отправить в массив. И ВОТ ЗАТУП У МЕНЯ.
    Пишут:
    Код (PHP):
    1.     $massiv = array();
    2.     $i = 0;
    3.     while($x = mysql_fetch_array($sql)){
    4.         $massiv[$i] = $x;
    5.         $i++;
    6.     } 
    Во первых зачем создавать пустой массив? нельзя как-то это сразу в цикле прописать? и вообще ведь нам функция mysql_fetch_array($sql) - уже возвращает МАССИВ! Нафиг как-то ещё делать пустой потом туда чета перебирать?
    И самый главный вопрос я не понимаю, по while.
    Структура while такая: while (если что-то скажем равно чему-то то делай то что ниже).
    НО КАК, И ЧТО ТАМ МОЖЕТ БЫТЬ РАВНО?
    В уроках пишут:
    Код (PHP):
    1. while($x = mysql_fetch_array($sql)) 
    т.е пока $x равен по сути массиву полученному запросом из базы, делай то что ниже в цикле.

    НО КАК $X может быть вообще равен этому? чтобы ещё что-то выполнялось...

    Не понимаю:(
     
  2. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Инициализация
    можно

    $i лишняя, читай документацию по массивам
    http://php.ru/manual/language.types.array.html

    $x = mysql_fetch_array($sql) - это присвоение, и while будет проверять по $x.

    while($x = mysql_fetch_array($sql))
    По документации mysql_fetch_array если есть результат, то эта функция вернёт его, $x будет содержать этот результат, while посмотрит на $x если там будет что-то кроме false, null, 0 то это true и выполняем код внутри while, когда в $sql закончатся результаты, то mysql_fetch_array вернёт false, $x станет false и while получит false, программа пойдёт работать ниже while() {}

    Прогони код через отладку интерактивную https://netbeans.org/kb/docs/php/debugging_ru.html многое станет понятно. Если что xdebug есть в open-server.ru

    Добавлено спустя 4 минуты 26 секунд:
    Уроки похоже очень низкого качества, лучше просто книг за 2015 год по HTML, CSS, PHP, MySQL, JavaScript для начинающих.
    Пишешь на PHP7?
     
  3. zahermaher

    zahermaher Новичок

    С нами с:
    27 сен 2014
    Сообщения:
    169
    Симпатии:
    14
    аг
    да наверно у него учебник старый , под устаревшие версии пхп
     
  4. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    fetchAll работает толлько если mysqlnd установлен. в доках есть примечание об этом.
     
  6. kams

    kams Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    25
    Симпатии:
    0
    А что можно почитать чтобы нормально про это понять? Что чему равно, что возвращают функции, и как проверить что они возвращают, и в каком случае меняется их ответ.
    Это уже третья попытка изучаения php) без акцента на версию. Просто врубиться что к чему. сейчас скачал актуальную версию, но там нет примеров - я как бы синтаксис вроде понимаю, но не понимаю как его использовать. Те понимаю переменны, массивы, (вроде циклы), операторы и т.п и.т.д - но как это все вместе использовать не понимаю.
    Скачал Никсон Р. Н64 Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд. — СПб.: Питер, 2015. — 688 с.: ил. — (Серия «Бестселлеры O’Reilly»).

    Вроде 2015 год, нормально?
     
  7. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    В документации.
    https://secure.php.net/manual/ru/function.mysql-fetch-array.php
    https://secure.php.net/manual/ru/ всё остальное

    Добавлено спустя 1 минуту 48 секунд:
    Нормально, но хорошо бы книгу для начинающих.

    Ну так пару месяцев практики 1000 страниц книг и статей, после этого будет понятно, твоё или не твоё.
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Т.е. не понимаете, что такое алгоритм. https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%8 ... 1%82%D0%BC

    У вас есть исходные данные, есть задача преобразовать их в выходные данные (к примеру, в вёрстку HTML, в случае с PHP), вот вы и должны из этих переменных, массивов, операторов и прочей дребедени :) составить последовательность шагов, которая исходные данные преобразует в выходные
     
  9. kams

    kams Новичок

    С нами с:
    18 дек 2015
    Сообщения:
    25
    Симпатии:
    0
    И так ещё два учебника пролистал, все что в учебнике понимаю.
    Че в коде не понимаю.. если у кого будет время можете ответить развернуто, но простыми словами, ниже напишу свои эксперименты:
    Эксперимент:
    1)Подключился к базе.
    2)сделал
    Код (PHP):
    1. $sql = mysql_query("SELECT * FROM shop_products ORDER BY id DESC"); 
    3)сделал функцию
    Код (PHP):
    1. $massiv = mysql_fetch_array($sql); 
    4)Пытаюсь че нить вывести: print_r ($massiv);
    5)Выводит
    Код (PHP):
    1. Array ( [0] => 8 [id] => 8 [1] => CvitPe4at 001C [title] => CvitPe4at 001C [2] => Описание [description] => Описание [3] => 999.99 [price] => 999.99 [4] => 8.png [image] => 8.png [5] => print [cat] => print )  
    6) УРа значит все работает.

    Эксперементирую дальше, пробую разные ключи:
    1)
    Код (PHP):
    1. echo $massiv[id]; 
    2) Все работает отлично, вывод последний id строки (т.к в запросе с последнего начинается выборка.).

    А ТЕПЕРЬ ТО ЧТО Я НЕ ПОНИМАЮ НЕДЕЛЮ.(ТУПОЙ НАВЕРНО)....
    Хочу вывести ВСЮ таблицу.
    Пишу и не понимаю что пишу:
    Например вариант 1:
    Код (PHP):
    1.     while ($a = mysql_fetch_array($sql)){
    2.     echo $massiv[id];
    3.     } 
    Выводит мне восем восмерок? какого фига?

    Вариант 2:
    Код (PHP):
    1.     $massiv = mysql_fetch_array($sql);
    2.     while ($a = $massiv){
    3.     echo $massiv[id];
    4.     } 
    Зацикливается вообще. ХОТЯ ВЕДЬ ТОЖЕ САМОЕ НАПИСАННО?

    Не понимаю...
    И вообще не понимаю как while ($a = $massiv) - этой строки.
    тут инструкция такова: пока $a равен $massiv (а $massiv у нас равен mysql_fetch_array($sql) - то что возращает нам строку из таблицы, выводи echo $massiv[id];.

    КАК $a (несуществующая переменная) может в принципе быть равна строке массива? вот как?

    Ведь если проверить: print $massiv - то вернет нам слово array, а если проверить print $a - то вернет нам пустоту.
    Как можно по этой инстуркции чета делать? ведь она изначально не может быть равна?

    И вообще, как проверить что возвращает функция, переменная, массив или что-то ещё, т.е true или false. Есть универсальный способ проверки?


    (Мне кажется я такой бред спросил), но нет в учебниках этого понимания. Везде готовый код вывода данных из базы данных, но как это работает не нашел.

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделать? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т.д.
     
  10. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот это пять... тебе алгоритмизацию программирования надо подтянуть.
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    а какого фига ты используешь не ту переменную для вывода?

    really?
    в первом случае ты на каждом проходе цикла читал из базы.
    во втором случае ты один раз прочитал перед циклом, потом присваиваешь одно и то же неизменное значение в другую переменную.
    одинаковы они только тем, что оба ошибочны. но каждый по своему )
     
  12. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ты присваиваешь результат переменной $a, но выводишь результат из переменной $massiv, надо из $a.

    $a = $massiv если $a будет содержать, что-то кроме false, null, 0 то $a будет для while как true (булева логика) значит он будет выполняться пока $a не станет false, но там нету варианта когда $a станет false, вот по этому бесконечно будет выполняться каждый раз.

    Обычно по документации есть несколько вариантов, например функция возвращает только массив, но если что-о пошло не так или она вернула все значения, то вернёт false, это используют в while, if.

    учебник должен быть для начинающих, ну там ещё задумана, что ты знаешь математику, что такое функции например.