Первая тема на форуме, но уже запарился мучится. Вроде пишу код по уроку, он работает. Но не понимаю логики. В поиск не слать, не нашел ничего, наверно не верно ищу... Вопрос такой: Делаю по урокам Валака Интернет Магазин. И вот затуп, выводим получаем данные из базы: 1) подключились к базе 2) сделали запрос, получили таблицу с данными. 3) Перевели все данные в массив функцией: $massiv = mysql_fetch_array($sql); 4) Далее проверяю для себя, пишу print_r ($massiv); Все норм, выводит первую строку из таблицы. Далее по урокам надо все это отправить в массив. И ВОТ ЗАТУП У МЕНЯ. Пишут: Код (PHP): $massiv = array(); $i = 0; while($x = mysql_fetch_array($sql)){ $massiv[$i] = $x; $i++; } Во первых зачем создавать пустой массив? нельзя как-то это сразу в цикле прописать? и вообще ведь нам функция mysql_fetch_array($sql) - уже возвращает МАССИВ! Нафиг как-то ещё делать пустой потом туда чета перебирать? И самый главный вопрос я не понимаю, по while. Структура while такая: while (если что-то скажем равно чему-то то делай то что ниже). НО КАК, И ЧТО ТАМ МОЖЕТ БЫТЬ РАВНО? В уроках пишут: Код (PHP): while($x = mysql_fetch_array($sql)) т.е пока $x равен по сути массиву полученному запросом из базы, делай то что ниже в цикле. НО КАК $X может быть вообще равен этому? чтобы ещё что-то выполнялось... Не понимаю
Инициализация можно $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?
код можно заменить на вызов 1 функции: Код (PHP): $x = $sth->fetchAll(); http://php.ru/manual/pdostatement.fetchall.htmlhttp://phpfaq.ru/pdohttp://php.ru/manual/mysqli-result.fetch-all.htmlmysql_* удалили в PHP7 переходи на PDO или MySQLi.
А что можно почитать чтобы нормально про это понять? Что чему равно, что возвращают функции, и как проверить что они возвращают, и в каком случае меняется их ответ. Это уже третья попытка изучаения php) без акцента на версию. Просто врубиться что к чему. сейчас скачал актуальную версию, но там нет примеров - я как бы синтаксис вроде понимаю, но не понимаю как его использовать. Те понимаю переменны, массивы, (вроде циклы), операторы и т.п и.т.д - но как это все вместе использовать не понимаю. Скачал Никсон Р. Н64 Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд. — СПб.: Питер, 2015. — 688 с.: ил. — (Серия «Бестселлеры O’Reilly»). Вроде 2015 год, нормально?
В документации. https://secure.php.net/manual/ru/function.mysql-fetch-array.php https://secure.php.net/manual/ru/ всё остальное Добавлено спустя 1 минуту 48 секунд: Нормально, но хорошо бы книгу для начинающих. Ну так пару месяцев практики 1000 страниц книг и статей, после этого будет понятно, твоё или не твоё.
Т.е. не понимаете, что такое алгоритм. https://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%8 ... 1%82%D0%BC У вас есть исходные данные, есть задача преобразовать их в выходные данные (к примеру, в вёрстку HTML, в случае с PHP), вот вы и должны из этих переменных, массивов, операторов и прочей дребедени составить последовательность шагов, которая исходные данные преобразует в выходные
И так ещё два учебника пролистал, все что в учебнике понимаю. Че в коде не понимаю.. если у кого будет время можете ответить развернуто, но простыми словами, ниже напишу свои эксперименты: Эксперимент: 1)Подключился к базе. 2)сделал Код (PHP): $sql = mysql_query("SELECT * FROM shop_products ORDER BY id DESC"); 3)сделал функцию Код (PHP): $massiv = mysql_fetch_array($sql); 4)Пытаюсь че нить вывести: print_r ($massiv); 5)Выводит Код (PHP): 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): echo $massiv[id]; 2) Все работает отлично, вывод последний id строки (т.к в запросе с последнего начинается выборка.). А ТЕПЕРЬ ТО ЧТО Я НЕ ПОНИМАЮ НЕДЕЛЮ.(ТУПОЙ НАВЕРНО).... Хочу вывести ВСЮ таблицу. Пишу и не понимаю что пишу: Например вариант 1: Код (PHP): while ($a = mysql_fetch_array($sql)){ echo $massiv[id]; } Выводит мне восем восмерок? какого фига? Вариант 2: Код (PHP): $massiv = mysql_fetch_array($sql); while ($a = $massiv){ echo $massiv[id]; } Зацикливается вообще. ХОТЯ ВЕДЬ ТОЖЕ САМОЕ НАПИСАННО? Не понимаю... И вообще не понимаю как 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 и т.д.
а какого фига ты используешь не ту переменную для вывода? really? в первом случае ты на каждом проходе цикла читал из базы. во втором случае ты один раз прочитал перед циклом, потом присваиваешь одно и то же неизменное значение в другую переменную. одинаковы они только тем, что оба ошибочны. но каждый по своему )
ты присваиваешь результат переменной $a, но выводишь результат из переменной $massiv, надо из $a. $a = $massiv если $a будет содержать, что-то кроме false, null, 0 то $a будет для while как true (булева логика) значит он будет выполняться пока $a не станет false, но там нету варианта когда $a станет false, вот по этому бесконечно будет выполняться каждый раз. Обычно по документации есть несколько вариантов, например функция возвращает только массив, но если что-о пошло не так или она вернула все значения, то вернёт false, это используют в while, if. учебник должен быть для начинающих, ну там ещё задумана, что ты знаешь математику, что такое функции например.