web-dev-qa-db-fra.com

Créer une table HTML à partir d'une table SQL

J'ai une table dans une base de données SQL avec les champs suivants: ID, Nom, Email, Université, Langues et Expérience. Je veux créer une table html qui récupère les données à partir de SQL et affiche les 10 derniers résultats? Comment je ferais ça?

Je suis désolé, s’il s’agit d’une question très simple, j’ai peu de connaissances en PHP et en SQL. 

Voici le code que j'ai actuellement qui affiche simplement le nom et non dans un tableau:

    <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>
9
Aloke Desai

Voici quelque chose qui devrait vous aider à créer la table et à mieux connaître php et mysql .

De plus, vous devez déplacer votre logique de connexion et votre requête au début de votre processus, évitant ainsi les erreurs de chargement de la page et affichant une erreur plus précise que celle de mysql_error.

Edit: Si vos identifiants sont incrémentés, vous pouvez ajouter la clause ORDER BY,
changement: SELECT * FROM demo LIMIT 10to: 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>
10
Josejulio

Une option vous obligeant à encoder les données de la base de données au format JSON: http://www.jeasyui.com/documentation/datagrid.php

Mais cela semble beaucoup plus prometteur: http://phpgrid.com/

6
peterrus

L'appel de table( $result ); sur les résultats de votre requête génèrera une table HTML, quelle que soit la taille du tableau SQL que vous lui transmettez. J'espère que ça aide :)

<?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>';
}
4
Brandon

Je me suis énervé de coller sans cesse le même code pour construire des tables HTML à partir de requêtes SQL. 

Nous allons donc avec une fonction qui prend mysqli résultats et les colle ensemble dans un tableau HTML simple qui a des noms de colonne correspondant à ceux de la base de données:

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 ) ; 
}

Exemple d'utilisation:

$DB = new mysqli("Host", "username", "password", "database");
$sqlresult = $DB->query( "SELECT * FROM testtable LIMIT 1 ;" ) ; 

echo sql_to_html_table( $sqlresult, $delim="\n" ) ; 
3
petermeissner

L'extraction avec mysql_fetch_assoc() pourrait vous intéresser (pour que vous obteniez les données dans un tableau associatif: clés => valeur). Les noms de colonne sont dans les clés. ainsi, pour chaque ligne, vous pouvez parcourir chaque colonne (avec array_keys()) et en imprimer la valeur.

$results = mysql_query("SELECT * FROM demo");
while($row = mysql_fetch_assoc($results)) {
    foreach (array_keys($row) as $column) {
        echo $row[$key] . "</br>";
    }
}

(Après cela, vous pouvez mettre en cache array_keys ($ row) dans une variable qui n'est définie qu'une fois, car sa valeur ne changera pas tant que vous parcourrez les résultats.)

1
mdup

Même si ça fait un moment que je vais mettre mes 2 centimes dans: utiliser des fonctions (encore mieux - classes). La création de tables à partir de résultats mysql est une tâche très courante.

<!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;
}
1
Paul Carlton

J'espère que vous savez comment faire un tableau en HTML, avec <table>, <tr> and <td>.

Corrigez une table avec cela dans votre boucle while et utilisez "SELECT * FROM demo LIMIT 10" comme requête SQL.

0
Sgarz