У меня есть таблица в базе данных SQL со следующими полями: ID, Имя, Электронная почта, Университет, Языки и Опыт. Я хочу создать таблицу html, которая извлекает данные из SQL и выводит последние 10 результатов? Как мне это сделать?
Извините, если это очень простой вопрос, у меня очень мало знаний в PHP и SQL.
Вот код, который я имею прямо сейчас, который просто отображает имя, а не в таблице:
<html> <head> <title>Last 5 Results</title> </head> <body> <?php $connect = mysql_connect("localhost","root", "root"); if (!$connect) { die(mysql_error()); } mysql_select_db("apploymentdevs"); $results = mysql_query("SELECT * FROM demo"); while($row = mysql_fetch_array($results)) { echo $row['Name'] . "</br>"; ?> </body> </html>
Вот что должно помочь вам создать таблицу и получить больше знаний о php и mysql ..
Также вы должны перенести логику подключения и запрос в начало вашего процесса, избегая при этом ошибок при загрузке страницы и отображая более точную ошибку, чем просто mysql_error.
Изменить: если ваши идентификаторы увеличиваются, вы можете добавить предложение ORDER BY, изменить: SELECT * FROM demo LIMIT 10 для: SELECT * FROM demo LIMIT 10 ORDER BY id
<html> <head> <title>Last 10 Results</title> </head> <body> <table> <thead> <tr> <td>Id</td> <td>Name</td> </tr> </thead> <tbody> <?php $connect = mysql_connect("localhost","root", "root"); if (!$connect) { die(mysql_error()); } mysql_select_db("apploymentdevs"); $results = mysql_query("SELECT * FROM demo LIMIT 10"); while($row = mysql_fetch_array($results)) { ?> <tr> <td><?php echo $row['Id']?></td> <td><?php echo $row['Name']?></td> </tr> <?php } ?> </tbody> </table> </body> </html>
Опция, требующая, чтобы вы кодировали данные в базе данных в JSON: http://www.jeasyui.com/documentation/datagrid.php
Но это выглядит намного более перспективным: http://phpgrid.com/
table( $result );
вызова table( $result );
в результатах вашего запроса будет создана таблица на основе html, независимо от размера массива sql, который вы его кормите. Надеюсь, это поможет 🙂
<?php function table( $result ) { $result->fetch_array( MYSQLI_ASSOC ); echo '<table>'; tableHead( $result ); tableBody( $result ); echo '</table>'; } function tableHead( $result ) { echo '<thead>'; foreach ( $result as $x ) { echo '<tr>'; foreach ( $x as $k => $y ) { echo '<th>' . ucfirst( $k ) . '</th>'; } echo '</tr>'; break; } echo '</thead>'; } function tableBody( $result ) { echo '<tbody>'; foreach ( $result as $x ) { echo '<tr>'; foreach ( $x as $y ) { echo '<td>' . $y . '</td>'; } echo '</tr>'; } echo '</tbody>'; }
Я очень разозлился, добавляя один и тот же код снова и снова, чтобы создавать HTML-таблицы из SQL-запросов.
Итак, здесь мы переходим к функции, которая принимает результаты mysqli
и складывает их вместе в обычную простую таблицу HTML, которая имеет имена столбцов в соответствии с данными в базе данных:
function sql_to_html_table($sqlresult, $delim="\n") { // starting table $htmltable = "<table>" . $delim ; $counter = 0 ; // putting in lines while( $row = $sqlresult->fetch_assoc() ){ if ( $counter===0 ) { // table header $htmltable .= "<tr>" . $delim; foreach ($row as $key => $value ) { $htmltable .= "<th>" . $key . "</th>" . $delim ; } $htmltable .= "</tr>" . $delim ; $counter = 22; } // table body $htmltable .= "<tr>" . $delim ; foreach ($row as $key => $value ) { $htmltable .= "<td>" . $value . "</td>" . $delim ; } $htmltable .= "</tr>" . $delim ; } // closing table $htmltable .= "</table>" . $delim ; // return return( $htmltable ) ; }
Пример использования:
$DB = new mysqli("host", "username", "password", "database"); $sqlresult = $DB->query( "SELECT * FROM testtable LIMIT 1 ;" ) ; echo sql_to_html_table( $sqlresult, $delim="\n" ) ;
Вам может быть интересно получить с помощью mysql_fetch_assoc()
(чтобы вы получили данные в ассоциативном массиве: keys => value). В ключах указаны ваши имена столбцов; поэтому для каждой строки вы можете array_keys()
каждый столбец (с помощью array_keys()
) и печатать его значение.
$results = mysql_query("SELECT * FROM demo"); while($row = mysql_fetch_assoc($results)) { foreach (array_keys($row) as $column) { echo $row[$key] . "</br>"; } }
(После этого вы можете кэшировать array_keys ($ row) в переменной, которая устанавливается только один раз, поскольку ее значение не изменится при прохождении результатов.)
Несмотря на то, что это было какое-то время, я собираюсь поставить свои 2 цента: использовать функции (даже лучше – классы). Создание таблиц из результатов mysql – очень распространенная задача.
<!DOCTYPE html> <html> <head><title>Create Tables from MySQL using functions</title></head> <body> <?php db_connect(); // assuming you have an auto increment id as the first column $result = mysql_query("SELECT * FROM demo ORDER BY 1 DESC LIMIT 10"); print createTable(array_result($result)); ?> </body> </html> <?php /** * Quick mysql result function * * @param $result * @return array */ function array_result($result) { $args = array(); while ($row = mysql_fetch_assoc($result)) { $args[] = $row; } return $args; } /** * Connect to db * * @param string $db_host * @param string $db */ function db_connect($db_host = "localhost", $db = "apploymentdevs") { $connect = mysql_connect($db_host,"root", "root"); if (!$connect) { die(mysql_error()); } mysql_select_db($db); } /** * Create a table from a result set * * @param array $results * @return string */ function createTable(array $results = array()) { if (empty($results)) { return '<table><tr><td>Empty Result Set</td></tr></table>'; } // dynamically create the header information from the keys // of the result array from mysql $table = '<table>'; $keys = array_keys(reset($results)); $table.='<thead><tr>'; foreach ($keys as $key) { $table.='<th>'.$key.'</th>'; } $table.='</tr></thead>'; // populate the main table body $table.='<tbody>'; foreach ($results as $result) { $table.='<tr>'; foreach ($result as $val) { $table.='<td>'.$val.'</td>'; } $table.='</tr>'; } $table.='</tbody></table>'; return $table; }
Надеюсь, вы знаете, как сделать таблицу в HTML, с <table>, <tr> and <td>.
Исправьте таблицу с помощью этого цикла while и используйте "SELECT * FROM demo LIMIT 10"
качестве SQL-запроса.