Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.01.2019, 19:28
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Вывод значений полей из 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>


===============================================

Вопрос:
ПОЧЕМУ Я НЕ МОГУ ТАКИМ СПОСОБОМ ВЫВЕСТИ ЗНАЧЕНИЯ ВСЕХ НУЖНЫХ МНЕ ПОЛЕЙ В СООТВЕТСТВУЮЩИХ ЯЧЕЙКАХ ТАБЛИЦЫ???
Ответ прошу дать максимально подробный, развёрнутый (в общем, объясняйте как блондинке)!

ЗАРАНЕЕ БЛАГОДАРЮ ЗА ОКАЗАННУЮ МНЕ ПОМОЩЬ!!!!!!

Последний раз редактировалось garrip91, 13.01.2019 в 20:26. Причина: Форматирование кода!
Ответить с цитированием
  #2 (permalink)  
Старый 13.01.2019, 19:49
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,125

<?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 это просто текст

Последний раз редактировалось Malleys, 13.01.2019 в 19:56.
Ответить с цитированием
  #3 (permalink)  
Старый 13.01.2019, 20:10
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

В продолжение диалога......
Цитата:
У вас сначала все фильмы выводятся в <pre>, а затем последний в таблицу. Вместо <pre> надо тогда выводить строки таблицы, с точки зрения PHP это просто текст
Я специально вывел все фильмы в "<pre><print_r></pre>", чтобы увидеть получаемый мной массив и дальше над ним работать.

Аааааа...... Вы мой код уже исправили, как я вижу Спасибо Вам большое, ПРОФЕССОР!!!

Последний раз редактировалось garrip91, 13.01.2019 в 20:15. Причина: Уточнение...
Ответить с цитированием
  #4 (permalink)  
Старый 13.01.2019, 20:16
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,125

там, где у вас фильмы выводятся в <pre>, у вас есть цикл(поэтому и всё выводится)
там, где вывод в <table>, у вас берётся последний фильм, записанный в $row, у вас там нет цикла (поэтому только он и выводится)

Который я код привёл он делает то, что надо? Или я не понял?
Ответить с цитированием
  #5 (permalink)  
Старый 13.01.2019, 20:34
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

В продолжение диалога......
Ваш код подошёл, за что Вам низкий поклон! :-)

Только теперь я пытаюсь понять свою ошибку, на которую Вы указываете, сравнивая Ваш код и свой первоначальный, а также вникая в то, что Вы мне пишете. Сложно это всё на самом деле! (((
Ответить с цитированием
  #6 (permalink)  
Старый 13.01.2019, 21:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,654

Сообщение от garrip91
Только теперь я пытаюсь понять свою ошибку, на которую Вы указываете
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>

Последний раз редактировалось laimas, 13.01.2019 в 21:08.
Ответить с цитированием
  #7 (permalink)  
Старый 13.01.2019, 21:05
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Цитата:
У вас сначала все фильмы выводятся в <pre>, а затем последний в таблицу. Вместо <pre> надо тогда выводить строки таблицы, с точки зрения PHP это просто текст
А существует ли какой-то альтернативный способ это сделать (чтобы без цикла как-нибудь и более простой)?
Все эти циклы у меня просто не укладываются в голове ((
Ответить с цитированием
  #8 (permalink)  
Старый 13.01.2019, 21:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 10,654

Сообщение от garrip91
А существует ли какой-то альтернативный способ это сделать (чтобы без цикла как-нибудь и более простой)?
Существует, но в недрах его все равно цикл, да и проще ли он для понимания, это еще вопрос.
Ответить с цитированием
  #9 (permalink)  
Старый 13.01.2019, 21:29
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

В продолжение диалога......
А как мне понять, что, НАПРИМЕР, этим участком кода: "<?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']; ?>" ???
Ответить с цитированием
  #10 (permalink)  
Старый 14.01.2019, 08:57
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,125

Сообщение от garrip91
НУ ТАК, КАК ЖЕ МНЕ ПОНЯТЬ ИЗ КАКОГО ИМЕННО ИЗ ВСЕХ 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();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск