Вывод значений полей из 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, время: 05:23. |