-1

PHPいくつかのモジュールをソフトウェアに開発するために学習しDolibarrています。クエリ結果をループして、配列の各行を表示する方法を知りたいです。

これは私のスクリプトです:

/*
 * View
 */

$query = "SELECT u.lastname as nom, u.firstname as prenom, u.datelastlogin as lastlogin";
$query.= " FROM ".MAIN_DB_PREFIX."user as u";
$query.= " ORDER BY lastlogin DESC LIMIT 2";

$resql = $db ->query($query);
$num = $db->fetch_row($resql);

print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("Affichage des 2 dernières connexions").'</th></tr>';
if (! empty($conf->user->enabled))
{
        $LastLogin = '<tr class="oddeven">';
        $LastLogin.= '<td><a href="index.php">'.$langs->trans("Utilisateur").'</a></td><td align="right">'.$num[0]." ".$num[1]." ".$num[2].'</td>';
        $LastLogin.= "</tr>";
}

print $LastLogin;
print '</table>';

ここに画像の説明を入力

これまで、クエリから最初の行のみを返しました。PHP でプログラミングしたことがないので、クエリの各行を配列に表示する方法を知りたいです。

?に変更fetch_rowする必要があります。fetch_array

または、配列を 3 つの列 (列名、列 firstname、列 datelastlogin) に分割することをお勧めします。

このようなもの :

ここに画像の説明を入力

どうすればそれができるのかよくわかりません。

ご協力ありがとうございました

編集 :

スクリプトを編集しました:

$query = "SELECT u.lastname as nom, u.firstname as prenom, u.datelastlogin as lastlogin";
$query.= " FROM ".MAIN_DB_PREFIX."user as u";
$query.= " ORDER BY lastlogin DESC LIMIT 2";

$resql = $db ->query($query);
//$num = $db->fetch_array($resql);
while($num = $resql->fetch_assoc())
{
    $nums[] = $num;
}

print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("Dernières connexions").'</th></tr>';
if (! empty($conf->user->enabled))
{
    foreach($nums as $num)
    {
        $LastLogin = '<tr class="oddeven">';
        $LastLogin.= '<td><a href="index.php">'.$num['nom'].'</a></td><td>'.$num['prenom'].'</td><td>'.$num['lastlogin'].'</td>';
        $LastLogin.= "</tr>";
    }
}
print $LastLogin;
print '</table>';

しかし、配列はうまく表示されません:

ここに画像の説明を入力

4

1 に答える 1

1

こんにちは再び:)

まず第一に、あなたのエラーは、あなたが PHP を初めて使うという事実とは何の関係もないことを言わなければなりません。しかし、このシナリオでは phyton が同じように機能するため、プログラミングの基本がいくつか欠けていると思います。

あなたのコードを見てみましょう:

if (! empty($conf->user->enabled))
{
    foreach($nums as $num)
    {
        $LastLogin = '<tr class="oddeven">';
        $LastLogin.= '<td><a href="index.php">'.$num['nom'].'</a></td><td>'.$num['prenom'].'</td><td>'.$num['lastlogin'].'</td>';
        $LastLogin.= "</tr>";
    }
}
print $LastLogin;

ここでの問題は、$LastLogin常に上書きすることです。それはフィトンでも同じように機能します。したがって、実際には次の 2 つの選択肢があります。

  1. forloop 内に print を配置します。
  2. ループ内で結果を直接出力します。

1foreach ループ内に配置するだけなので、例print $LastLoginは示しません。そのための例は必要ありません。

ここで以下に示すのは、あなたの場合にどのように書くかというコードです:

$query = "SELECT u.lastname as nom, u.firstname as prenom, u.datelastlogin as lastlogin";
$query.= " FROM ".MAIN_DB_PREFIX."user as u";
$query.= " ORDER BY lastlogin DESC LIMIT 2";

$resql = $db ->query($query);
//$num = $db->fetch_array($resql);

print '<table class="noborder" width="100%">';
print '<tr class="liste_titre"><th colspan="2">'.$langs->trans("Dernières connexions").'</th></tr>';

if (! empty($conf->user->enabled)) {

    while($num = $resql->fetch_assoc()) {
        print '<tr class="oddeven">';
        print '<td><a href="index.php">'.$num['nom'].'</a></td><td>'.$num['prenom'].'</td><td>'.$num['lastlogin'].'</td>';
        print '</tr>';
    }
}

print '</table>';

実際には、すべての結果を var に保存して、常に追加する必要はありません。結果を直接印刷するだけで、何の妨げにもなりません。確かに、ロジックとビューの分離について話すことはできますが、この場合、実際にはその必要はありません。

それが役に立ったことを願っています:)

于 2017-10-26T07:42:46.753 に答える