web-dev-qa-db-fra.com

Comment imprimer un résultat sur une seule ligne sous forme de tableau html?

J'effectue une requête de base de données comme celle-ci:

$db = JFactory::getDbo();
$user = JFactory::getUser();
$query = $db->getQuery(true);
$query->select('*');
$query->from($db->quoteName('#__table_name'));
$query->where($db->quoteName('username') . " = ". $db->quote($user->username));
$db->setQuery($query);

$result = $db->loadResult();

$row = $db->loadrow();
print_r($row); </pre>

La sortie que je reçois ressemble un peu à ceci:

Tableau ([0] => any_username [1] => val_of_col1 [2] => val_of_col2 [3] => val_of_col3)

Comment le convertir en tableau HTML?

3
saibbyweb

Essaye ça:

$rows = $db->loadrow();

echo '<table>';
echo '<tr>';  
   foreach($rows as $row) {
       // display your results here
   }
echo '</tr>';
echo '</table>';

Vous commencez par faire écho à la structure de la table de base, puis affichez vos résultats

10
Lodder

Juste pour éclaircir une idée fausse possible sur le script dans la question ...

$result = $db->loadResult(); n'a pas de rôle actif/nécessaire à jouer dans le processus. $result N'est pas utilisé après sa déclaration et il ne "configure" pas loadRow().

En ce qui concerne la résolution de chaque valeur de colonne, je vous recommande la méthode la plus concise: implode(). Ce faisant, peu importe si vous construisez votre jeu de résultats à partir de loadRow() ou loadAssoc(), car implode() ignorera les clés. Ce qui importe, ce sont les colonnes que vous écrivez dans votre clause SELECT - cela dictera exactement quelles colonnes sont présentées. Il est peu probable que vous souhaitiez afficher TOUTES les colonnes. Par conséquent, * Doit être remplacé par des déclarations de colonne littérales (sous forme de chaîne séparée par des virgules ou d'un tableau de chaînes). L'extrait à suivre fonctionnera parfaitement même si vous ne sélectionnez qu'une seule colonne (et générez un ensemble de résultats unidimensionnel).

$db->loadRow() avec implode():

if (!$row = $db->loadRow()) {  // declare and check
    echo "No Row Found";
} else {
    echo '<table>';
        echo '<tr>';
            echo '<td>' , implode('</td><td>', $row) , '</td>';
        echo '</tr>';
    echo '</table>';
}

Si vous souhaitez afficher une ligne d'en-têtes de colonne, utilisez loadAssoc() pour générer le jeu de résultats. Si vous souhaitez ajuster un ou plusieurs en-têtes de colonne à imprimer à l'écran, utilisez un "alias de colonne" le cas échéant dans la clause SELECT de votre requête.

if (!$row = $db->loadAssoc()) {  // declare and check
    echo "No Row Found";
} else {
    echo '<table>';
        echo '<tr>';
            echo '<th>' , implode('</th><th>', array_keys($row)) , '</th>';
        echo '</tr>';
        echo '<tr>';
            echo '<td>' , implode('</td><td>', $row) , '</td>';
        echo '</tr>';
    echo '</table>';
}
0
mickmackusa