Вывод значений полей из SQL(phpmyadmin) в ячейках обычной собственноручно созданной т
В процессе обучения создал базу данных под названием "kinomonster", в которой, в свою очередь, - BDшную таблицу "movie" с полями "id", "name", "description", "year", "add_date".
Решил проявить инициативу и в качестве домашнего задания к основному коду с помощью обычных html-тегов ("<table><tr><th>...</th></tr><tr><td>...</td></tr></table>") добавить таблицу, в которой должны отображаться значения всех нужных мне полей из BD (значения полей я вроде как изначально получил, работая над PHP-шным фрагментом кода, В ВИДЕ 4-Х МАССИВОВ (проверено с помощью встроенной функции "print_r()") )... Мой код такой: =============================================== $mysqli = new mysqli('localhost', 'root', '', 'kinomonster'); if (mysqli_connect_errno()) { printf("Соединение не установлено!", mysqli_connect_error()); exit; } $mysqli->set_charset('utf8'); $query = $mysqli->query('SELECT * FROM movie'); while ($row = mysqli_fetch_assoc($query)) { echo "<pre>"; print_r($row); echo "</pre>"; } $mysqli->close(); <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> [css] <style> table { border: 1px solid black; border-collapse: collapse; width: 100%; } th { border: 1px solid black; padding: auto; } td { border: 1px solid olive; padding: auto; } </style> [/css] </head> <body> <table> <tr> <th>id</th> <th>name</th> <th>description</th> <th>year</th> <th>add_date</th> </tr> <tr> <td>[php] echo $row['id']; [/php]</td> <td>[php] echo $row['name']; [/php]</td> <td>[php] echo $row['description']; [/php]</td> <td>[php] echo $row['year']; [/php]</td> <td>[php] echo $row['add_date']; [/php]</td> </tr> </table> </body> </html> =============================================== Вопрос: ПОЧЕМУ Я НЕ МОГУ ТАКИМ СПОСОБОМ ВЫВЕСТИ ЗНАЧЕНИЯ ВСЕХ НУЖНЫХ МНЕ ПОЛЕЙ В СООТВЕТСТВУЮЩИХ ЯЧЕЙКАХ ТАБЛИЦЫ??? Ответ прошу дать максимально подробный, развёрнутый (в общем, объясняйте как блондинке)! ЗАРАНЕЕ БЛАГОДАРЮ ЗА ОКАЗАННУЮ МНЕ ПОМОЩЬ!!!!!! |
<?php $mysqli = new mysqli('localhost', 'root', '', 'kinomonster'); if (mysqli_connect_errno()) { printf("Соединение не установлено!", mysqli_connect_error()); exit; } $mysqli->set_charset('utf8'); $query = $mysqli->query('SELECT * FROM movie'); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> table { border: 1px solid black; border-collapse: collapse; width: 100%; } th { border: 1px solid black; padding: auto; } td { border: 1px solid olive; padding: auto; } </style> </head> <body> <table> <tr> <th>id</th> <th>name</th> <th>description</th> <th>year</th> <th>add_date</th> </tr> <?php while ($row = mysqli_fetch_assoc($query)) { ?> <tr> <td><?php echo $row['id']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['description']; ?></td> <td><?php echo $row['year']; ?></td> <td><?php echo $row['add_date']; ?></td> </tr> <?php } $mysqli->close(); ?> </table> </body> </html> У вас сначала все фильмы выводятся в <pre>, а затем последний в таблицу. Вместо <pre> надо тогда выводить строки таблицы, с точки зрения PHP это просто текст |
В продолжение диалога......
Цитата:
Аааааа...... Вы мой код уже исправили, как я вижу :) Спасибо Вам большое, ПРОФЕССОР!!! |
там, где у вас фильмы выводятся в <pre>, у вас есть цикл(поэтому и всё выводится)
там, где вывод в <table>, у вас берётся последний фильм, записанный в $row, у вас там нет цикла (поэтому только он и выводится) Который я код привёл он делает то, что надо? Или я не понял? |
В продолжение диалога......
Ваш код подошёл, за что Вам низкий поклон! :-)
Только теперь я пытаюсь понять свою ошибку, на которую Вы указываете, сравнивая Ваш код и свой первоначальный, а также вникая в то, что Вы мне пишете. Сложно это всё на самом деле! ((( |
Цитата:
while ($row = mysqli_fetch_assoc($query)) ) { //это тело цикла - где тут вывод строк таблицы? echo "<pre>"; print_r($row); echo "</pre>"; } Вообще же, прежде чем выводить <table><tr><th>id</th> ... и строки таблицы, нужно проверить вернул ли что-то запрос. Если вернул ряды, вот тогда вывод таблицы, строки которой можно вывести и так: while ($row = $query->fetch_assoc()) $tbl .= '<tr><td>'.implode('</td><td>', $row).'</td></tr>'; если порядок полей в sql таблице такой же как и в выводе перечислением. А далее в html выводе после заголовка вставить: <table> <tr> <th>id</th> <th>name</th> <th>description</th> <th>year</th> <th>add_date</th> </tr><?=$tbl?></table> |
Цитата:
Все эти циклы у меня просто не укладываются в голове :((( |
Цитата:
|
В продолжение диалога......
А как мне понять, что, НАПРИМЕР, этим участком кода: "<?php echo $row['id']; ?>" я вызываю значение именно нужного мне поля "id"?
Ведь, мой ранее применённый метод "print_r" показал, что каждый наш фильм в программистском представлении является отдельным массивом (в нижеприведённом результате работы встроенной функции "print_r" именно 4 слова "Array" и каждый имеет по одному "id" со своим индивидуальным значением): =============================================== Array ( [id] => 1 [name] => Матрица [description] => Жизнь Томаса Андерсона разделена на 2 части: днём он самый-самый обычный офисный работник, получающий нагоняи от руководства, а ночью преобразуется в хакера по имени Нео, и нет места в сети, куда он не смог бы достать. Но однажды всё изменяется — герой, сам того не желая, выяснит ужасную правду: всё, что его окружает — не наиболее, чем иллюзия. [year] => 1999 [add_date] => 2019-01-13 16:05:00 ) Array ( [id] => 2 [name] => Интерстеллар [description] => Когда засуха приводит человечество к продовольственному кризису, коллектив исследователей и учёных отправляется сквозь червоточину (которая предположительно соединяет области пространства-времени через большое расстояние) в путешествие, чтобы превзойти прежние ограничения для космических путешествий человека и переселить человечество на другую планету. [year] => 2014 [add_date] => 2019-01-13 16:45:00 ) Array ( [id] => 3 [name] => Безумный Макс [description] => Прошло не так много времени, после того как Макс Рокатански покинул ряды «Основного силового патруля». Теперь он в одиночку скитается по миру, который медленно умирает от последствий нефтяного кризиса и глобальной войны, унесшей жизни большинства жителей Земли. Сможет ли он сохранить свою жизнь в смертельной схватке с отъявленными головорезами?.. [year] => 2015 [add_date] => 2019-01-13 17:06:27 ) Array ( [id] => 4 [name] => Облачный атлас [description] => События фильм будут одновременно развиваться в нескольких исторических периодах, как в прошлом так и в будущем. Начнется все с простого и короткого рассказа пастуха, а затем вы будете поэтапно переносится из века девятнадцатого в сторону сильно потрепанного из-за глобальной катастрофы будущего. [year] => 2012 [add_date] => 2019-01-13 21:01:58 ) =============================================== Вопрос: НУ ТАК, КАК ЖЕ МНЕ ПОНЯТЬ ИЗ КАКОГО ИМЕННО ИЗ ВСЕХ 4-Х ВЫШЕПРИВЕДЁННЫХ МАССИВОВ ("Array") БЕРЁТСЯ ЗНАЧЕНИЕ ПОЛЯ "id" И ВЫЗЫВАЕТСЯ УЧАСТКОМ КОДА "<?php echo $row['id']; ?>" ??? |
Цитата:
<?php $mysqli = new mysqli('localhost', 'root', '', 'kinomonster'); if (mysqli_connect_errno()) { printf("Соединение не установлено!", mysqli_connect_error()); exit; } $mysqli->set_charset('utf8'); $query = $mysqli->query('SELECT * FROM movie'); while ($row = mysqli_fetch_assoc($query)) { echo "<pre>"; print_r($row); echo "</pre>"; } $mysqli->close(); ?> Каждый фильм представлен отдельным массивом, который присваивается переменной $row. Присвоение происходит в той строке, где написано while ($row = mysqli_fetch_assoc($query)) {. Давайте посмотрим, что тут происходит. Сначала у вас вызывается $query = $mysqli->query('SELECT * FROM movie'); Функция $mysqli->query выполняет запрос к базе данных. Возвращает FALSE в случае неудачи. В случае успешного выполнения запроса SELECT вернёт объект mysqli_result. Это можно представить как коробку с фильмами. 🎦 Вот, что в ней находится: ❌Матрица ❌Интерстеллар ❌Безумный Макс ❌Облачный атлас Далее идёт вызов функции mysqli_fetch_assoc. Эта функция извлекает результирующий ряд в виде ассоциативного массива или NULL, если других рядов не существует. Т. е. из той коробки с фильмами берёт следующий не просмотренный фильм. Как выглядит этот ассоциативного массив вы уже видели при помощи print_r. Так как же выполняется ... while ($row = mysqli_fetch_assoc($query)) { echo "<pre>"; print_r($row); echo "</pre>"; }❓❓❓ Нужно проверить, надо ли заходить внутрь цикла. Мы при помощи функции mysqli_fetch_assoc вытаскиваем первый не просмотренный фильм ( 🎞 Матрица 🎞 ) и присваиваем его переменной $row, далее проверяем условие, нужно ли зайти внутрь цикла, и поскольку фильм есть (TRUE), то мы заходим! Вот, что на данный момент творится в коробке: ✔Матрица ❌Интерстеллар ❌Безумный Макс ❌Облачный атлас Мы внутри тела цикла! В переменной $row у нас хранится информация о фильме 🎞 Матрица 🎞 и мы можем делать с ней всё, что хотим! (print_r($row); или $row['name']; ) Вот мы и подошли к концу тела цикла. Нужно проверить, надо ли заходить внутрь цикла опять. Вот, что на данный момент творится в коробке: ✔Матрица ❌Интерстеллар ❌Безумный Макс ❌Облачный атлас Мы при помощи функции mysqli_fetch_assoc вытаскиваем первый не просмотренный фильм ( 🎞 Интерстеллар 🎞 ) и присваиваем его переменной $row, далее проверяем условие, нужно ли зайти внутрь цикла, и поскольку фильм есть (TRUE), то мы заходим! Вот, что на данный момент творится в коробке: ✔Матрица ✔Интерстеллар ❌Безумный Макс ❌Облачный атлас Мы внутри тела цикла! В переменной $row у нас хранится информация о фильме 🎞 Интерстеллар 🎞 и мы можем делать с ней всё, что хотим! Вот мы и подошли к концу тела цикла. Нужно проверить, надо ли заходить внутрь цикла опять. Вот, что на данный момент творится в коробке: ✔Матрица ✔Интерстеллар ❌Безумный Макс ❌Облачный атлас Мы при помощи функции mysqli_fetch_assoc вытаскиваем первый не просмотренный фильм ( 🎞 Безумный Макс 🎞 ) и присваиваем его переменной $row, далее проверяем условие, нужно ли зайти внутрь цикла, и поскольку фильм есть (TRUE), то мы заходим! Вот, что на данный момент творится в коробке: ✔Матрица ✔Интерстеллар ✔Безумный Макс ❌Облачный атлас Мы внутри тела цикла! В переменной $row у нас хранится информация о фильме 🎞 Безумный Макс 🎞 и мы можем делать с ней всё, что хотим! Вот мы и подошли к концу тела цикла. Нужно проверить, надо ли заходить внутрь цикла опять. Вот, что на данный момент творится в коробке: ✔Матрица ✔Интерстеллар ✔Безумный Макс ❌Облачный атлас Мы при помощи функции mysqli_fetch_assoc вытаскиваем первый не просмотренный фильм ( 🎞 Облачный атлас 🎞 ) и присваиваем его переменной $row, далее проверяем условие, нужно ли зайти внутрь цикла, и поскольку фильм есть (TRUE), то мы заходим! Вот, что на данный момент творится в коробке: ✔Матрица ✔Интерстеллар ✔Безумный Макс ✔Облачный атлас Мы внутри тела цикла! В переменной $row у нас хранится информация о фильме 🎞 Облачный атлас 🎞 и мы можем делать с ней всё, что хотим! Вот мы и подошли к концу тела цикла. Нужно проверить, надо ли заходить внутрь цикла опять. Вот, что на данный момент творится в коробке: ✔Матрица ✔Интерстеллар ✔Безумный Макс ✔Облачный атлас Мы при помощи функции mysqli_fetch_assoc вытаскиваем первый не просмотренный фильм ( такого нету ) и присваиваем его переменной $row, далее проверяем условие, нужно ли зайти внутрь цикла, и поскольку фильма нету (FALSE), то мы не заходим! А идём дальше по коду и выполняем $mysqli->close(); |
Часовой пояс GMT +3, время: 19:25. |