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

时间:2017-10-25 14:56:57

标签: php dolibarr

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

enter image description here

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

我必须将fetch_row更改为fetch_array

或者,或许更好,将我的数组拆分为3列(列名,列名,列datelastlogin)

这样的事情:

enter image description here

我真的不明白我该怎么做。

感谢您的帮助

编辑:

我编辑了我的剧本:

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

但阵列没有很好地展示:

enter image description here

1 个答案:

答案 0 :(得分:1)

Helloo再次:)

首先,我必须说你的错误与你刚接触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. 直接在循环内输出结果。
  3. 我不会为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中并且一直追加到它。只需直接打印结果,没有什么可以阻止你。当然,我们现在可以解决逻辑分离问题。观点 - 但在这种情况下,并不需要它。

    希望它有所帮助:)