it-swarm.dev

単一行の結果セットをHTMLテーブルとして印刷する方法は?

私はこのようなデータベースクエリを実行しています:

$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>

私が取得する出力は、次のようになります。

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

変換する方法HTMLテーブル?

3
saibbyweb

これを試して:

$rows = $db->loadrow();

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

最初にベーステーブル構造をエコーし​​、次に結果を表示します。

10
Lodder

問題のスクリプトについて考えられる誤解を解消するためだけに...

$result = $db->loadResult();には、プロセスで実行するアクティブ/必要な役割がありません。 _$result_は宣言後は使用されず、loadRow()を「セットアップ」しません。

各列の値をエコーする方法については、最も簡潔な方法としてimplode()をお勧めします。その際、loadRow()はキーを無視するため、loadAssoc()またはimplode()から結果セットを構築しても問題はありません。重要なのは、SELECT句に書き込む列です。これにより、表示される列が正確に決まります。すべての列を表示することはほとんどないので、_*_をリテラル列宣言と交換する必要があります(コンマ区切りの文字列または文字列の配列として)。以下のスニペットは、単一の列のみを選択した場合(および1次元の結果セットを生成した場合)でも問題なく機能します。

$db->loadRow() with 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>';
}
_

列見出しの行を表示する場合は、loadAssoc()を使用して結果セットを生成します。画面に出力されるように1つ以上の列見出しを調整する場合は、クエリのSELECT句で適切な場所に「列のエイリアス」を使用します。

_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