-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_rowfetch_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>';

但是数组显示不好:

在此处输入图像描述

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一直在覆盖。这将在 phyton 中以相同的方式起作用。所以你实际上有两个选择:

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

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

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

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