@SemyonDyachenko

Почему php выводит из базы что то одно?

Вообще делаю сайт , база всех учеников моей школы , в базе данных mysql , лежат данные, мне пока надо вывести только имена, вот код:
$query = "SELECT * FROM `pupils`";

header('Content-Type: text/html; charset=utf8');

 
$res = mysqli_query($dbc, $query);


<div id="main">
		<div id="classes">
		<div class="cl">
			<h3>11А</h3>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>

		</div>
		<div class="cl">
			<h3>11Б</h3>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
		</div>
		<div class="cl">
			<h3>10А</h3>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
			<h4>Семён</h4>
		</div>
		<div class="cl">
			<h3>9А</h3>
        
			 
		</div>
		<div class="cl">
			<h3>9Б</h3>
			<?php 

 while($row = mysqli_fetch_array($res)):;;
 if($row[3] == "9Б"):;;
 ?>	
 
    <a style ="color:black;" href="#"><?php  echo $row[2];?></a><br>

            
    
	<?php 
   endif;;  
endwhile ; ;
	?>
			 
		</div>


Вот в этом участке кода :
<?php 

 while($row = mysqli_fetch_array($res)):;;
 if($row[3] == "9Б"):;;
 ?>	
 
    <a style ="color:black;" href="#"><?php  echo $row[2];?></a><br>

            
    
	<?php 
   endif;;  
endwhile ; ;
	?>


Я в цикле проверяю данные на совпадение с названием класса, и если оно такое же как в заголовке h3 (пока я вручнужю ввожу) он выводит имена. Все работает но если я этот же код , вставлю в блок вверху в классе 9А и там сделаю проверку: if($row[3] == "9А"):;;, то будут отображаться только именна из 9А. Знаю что не очень понятно.

Кто нибудь может объяснить почему в первом случае оно работает , но если сделаю две проверки то выводится только одно.
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
Подозреваю что на выходе , после цикла
while($row = mysqli_fetch_array($res))
Result set - $res становится ПУСТЫМ! поэтому второй while его не отрабывает.
и либо
- его необходимо наполнить заново, повторно выполнив запрос
$res = mysqli_query($dbc, $query);

либо, что более корректно:

1) заполнить из result set некий массив, далее по коду уже работать с массивом.

2) на каждом номере класса выполнять запрос
SELECT * FROM `pupils` WHERE class = 'НОМЕРКЛАССА' -- я допустил что колонка у вас называется class

и далее делать вывод анологично.

3) что еще более правильное:
получить из базы список классов, например
SELECT DISTINCT class FROM `pupils` -- я допустил что колонка у вас называется class


далее цикл по резалтсету
выводим
<div class="cl">
      <h3>НОМЕРКЛАССА</h3>


делаем запрос вида
SELECT * FROM `pupils` WHERE class = 'НОМЕРКЛАССА' -- я допустил что колонка у вас называется class


далее цикл по резалтсету
выводим
<h4>ФИО</h4>
конец вложенного цикла

выводим закрывающий тэг </div>

конец первого цикла.

как-то так... ну код сами напишете ;)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 160 000 руб.
SaveTime Москва
от 100 000 руб.
Teamlead Ставрополь
от 25 000 до 50 000 руб.
20 нояб. 2019, в 14:32
3000 руб./за проект
20 нояб. 2019, в 14:26
500 руб./в час
20 нояб. 2019, в 14:22
150 руб./за проект