在数组中显示 PHP/MySQL 查询的循环

Display loop over PHP/MySQL query in array

我正在学习 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>';

到目前为止,我 return 只查询了第一行。我以前从未在 PHP 中编程过,我想知道如何将查询中的每一行显示到我的数组中?

我必须将 fetch_row 更改为 fetch_array ?

或者,也许更好,将我的数组分成 3 列(列名、列名字、列 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>';

但是数组显示的不好:

你好:)

首先我不得不说你的错误与你是新手无关 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。这在植物中的工作方式相同。所以你实际上有两个选择:

  1. 将打印放在 forloop 中。
  2. 在循环内直接输出结果。

我不会为 1 做一个例子,因为它只将 print $LastLogin 放在 foreach 循环中——你不需要一个例子。

下面我将向您展示的是我将如何编写您的代码:

$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 中并一直附加到它。只需直接打印结果,没有任何阻碍。当然,我们现在可以讨论分离逻辑和视图——但在这种情况下,实际上并不需要它。

希望对您有所帮助:)