я учу 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 столбца (имя столбца, имя столбца, столбец 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 — но я думаю, что вам не хватает некоторых основ программирования, потому что фитон работает аналогично для этого сценария.
Давайте посмотрим на ваш код:
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
так как его единственное размещение 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 и добавлять к нему все время. Просто распечатайте результаты напрямую, и ничто не сможет вас удержать. Наверняка мы могли бы сейчас рассказать об отделении логики & взгляды — но в этом случае на самом деле в этом нет необходимости.
Надеюсь, это помогло 🙂
Других решений пока нет …