@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А. Знаю что не очень понятно.

Кто нибудь может объяснить почему в первом случае оно работает , но если сделаю две проверки то выводится только одно.
  • Вопрос задан
  • 142 просмотра
Решения вопроса 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>

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

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

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

Войти через центр авторизации
Похожие вопросы