Я делаю волонтерский листок для нашего хоккейного клуба. Я показываю результаты в таблице, используя цикл while.
Все работает хорошо, но теперь я хочу сделать вывод более удобным для пользователя. Я заказываю запрос по дате и показываю его в одной таблице. Я бы хотел показать новую таблицу для каждой другой даты. Заголовок этой таблицы – это дата, и строки будут иметь все события для этой даты, упорядоченные по времени. Я думаю, что это облегчит людям поиск событий в определенную дату.
Вот как настроена моя таблица: id, date, time, game, name1, name2, name3, name4, name5
Вот запрос на моей главной странице:
<?php //displays the table $result = mysql_query("SELECT * FROM namestable ORDER BY date, time ASC"); displayTable($result); ?>
Это моя функция:
<?php function displayTable($result){ echo " <table border='1'> <tr class='top'> <th class='date'>Date</th> <th class='time'>Time</th> <th class='game'>Game</th> <th class='name'>Name</th> <th class='name'>Name</th> <th class='name'>Name</th> <th class='name'>Name</th> <th class='name'>Name</th> <th class='sign'>Sign Up</th> </tr>"; while($row = mysql_fetch_array($result)) { //change the date format here $fdate = date('M jS, Y l', strtotime($row['date'])); echo "<tr>"; echo "<td class='date'>" . $fdate . "</td>"; echo "<td class='time'>" . $row['time'] . "</td>"; echo "<td class='game'>" . $row['game'] . "</td>"; echo "<td class='nameA'>" . $row['name1'] . "</td>"; echo "<td class='nameB'>" . $row['name2'] . "</td>"; echo "<td class='nameA'>" . $row['name3'] . "</td>"; echo "<td class='nameB'>" . $row['name4'] . "</td>"; echo "<td class='nameA'>" . $row['name5'] . "</td>"; $id = $row['id']; echo "<td class='sign'>" . "<form name='input' action='process.php' method='POST'> <input type='text' name='name' maxlength='25' value='Enter Name' onfocus=\"if(this.value=='Enter Name') this.value='';\"/> <input type='hidden' name='id' value='$id'/> <input type='submit' value='Sign Up' /> <input type='submit' name='dname' value='Remove Name' /></form>" . "<form name='delete' action='delete.php' method='POST'> <input type='hidden' name='id' value='$id'/>"; if(isset($_SESSION['user_id'])){ echo "<input type='submit' name='delete' value='Delete Event' /></form>" . "</td>"; }else{ echo "</form>" . "</td>"; } echo "</tr>"; } echo "</table>"; echo "<br />"; } ?>
Пользователи могут вводить имя для регистрации и удаления своего имени.
Администраторы могут добавлять и удалять события.
Какие-либо предложения?
$getdates = mysql_query("SELECT DISTINCT date FROM namestable ORDER BY date DESC"); $dates = mysql_num_rows($getdate); if($dates > 0){ echo "<table width='100%' cellspacing='0' cellpadding='0'>"; while ($rowdates = mysql_fetch_assoc($getdates)) { $date = $rowdates['date']; $getevents = mysql_query("SELECT * FROM namestable WHERE date = '$date' ORDER BY time ASC"); $events = mysql_num_rows($getevents); if($events > 0){ echo "<tr><td>$date</td></tr>"; while ($rowevents = mysql_fetch_assoc($getevents)) { $event_time = $rowevents['time']; // all other info you want to pull here echo "<tr><td>ROW WITH EVENT INFO HERE</td></tr>"; } // end event loop } // end if events > 0 echo "</table>"; } // end if dates > 0 } // end date loop
Поскольку ваши результаты уже упорядочены по дате, вы можете просто сохранить предыдущую дату в переменной и создать новую таблицу каждый раз, когда это изменится.
$olddate = ''; while($row = mysql_fetch_array($result)) { $fdate = date('M jS, Y l', strtotime($row['date'])); if ( $olddate != $fdate ) { // date has changed: // end the previous table (if it exists) if ( $olddate != '' ) { echo "</table>" } // start the new table. Do something with $fdate here if you like echo " <h3>$fdate</h3> <table border='1'> <tr class='top'> ... </tr>"; } // print a row as before. echo "<tr>"; .... } // end the last table echo "</table>";
В основном единственное, что изменилось, это то, что $fdate
хранится также в $olddate
. Когда мы обрабатываем новую строку, если дата изменилась (т.е. $olddate != $fdate
), мы создаем новую таблицу.
Для каждой строки результата mysql мы по-прежнему генерируем строку таблицы, как и раньше (вы можете внести некоторые изменения, например, не включая столбцы Date).