Отображение нескольких строк базы данных с использованием PHP-сессий - PullRequest
0 голосов
/ 02 марта 2019

У меня есть класс PHP, который извлекает данные из базы данных, и другой класс, который отображает извлеченные данные.Код выглядит нормально, за исключением того, что вместо отображения всех строк он отображает только то, что должно быть последней строкой в ​​результате.вот код, который выбирает данные

$getComm->execute();
$result = $getComm->fetchALL(PDO::FETCH_ASSOC);

foreach ($result as $row) {
    $_SESSION['days'] = $row['sales_day'];
    $_SESSION['amount'] = $row['sales_total'];
    $_SESSION['commission'] = $row['sales_comm'];
}

И это код, который отображает данные

<tr>
    <td><label><?php echo $_SESSION['days']; ?></label></td>
    <td><label><?php echo $_SESSION['amount']; ?></label></td>
    <td><label><?php echo $_SESSION['commission']; ?></label></td>
</tr>

Единственная проблема заключается в том, что последняя строка отображается вместо всех строк взапрос.

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

в вашем цикле каждый раз, когда СЕССИЯ с тем же именем получает другое значение, каждый раз, когда ранее значение будет потеряно.Вы можете создать массив, тогда все вставки строк в массив и сеанс будут равны массиву, потому что у вас есть много значений для одного имени сеанса.

$days = array();
$amounts = array();
$commissions = array();
foreach ($result as $row) {
     array_push($days,$row['sales_day']);
     array_push($amounts,$row['sales_total']);
     array_push($commissions, $row['sales_comm']);
}

$_SESSION['days'] = $days;
$_SESSION['amount'] = $amounts;
$_SESSION['commission'] = $commissions;
0 голосов
/ 02 марта 2019

Вы должны обернуть таблицу в цикле.

Сейчас вы запускаете цикл и продолжаете перезаписывать одно и то же значение сеанса, а затем используете ту переменную сеанса, которая содержит последнее перезаписанное значение.

Вы должны сделать что-то вроде этого -

<?php foreach ($result as $row) { ?>

<tr>
    <td><label><?php echo $row['sales_day']; ?></label></td>
    <td><label><?php echo $row['sales_total']; ?></label></td>
    <td><label><?php echo $row['sales_comm']; ?></label></td>
</tr>

<?php } ?>

Я не уверен, зачем вам это делать с сессиями?Если вы просто хотите отобразить строки, вы можете сделать, как я предложил.Но если вы хотите сохранить все эти данные в сеансе, то вы делаете это, сохраняя массив в сеансе, как это-

$i=0;
foreach ($result as $row) {
    $_SESSION['days'][$i] = $row['sales_day'];
    $_SESSION['amount'][$i] = $row['sales_total'];
    $_SESSION['commission'][$i] = $row['sales_comm'];
$i++;
}
0 голосов
/ 02 марта 2019

Я не могу комментировать из-за нехватки повторений, поэтому мне придется написать это как ответ.

Для меня это выглядит нормально, я думаю, что нет данных в $ row ['sales_day'] и $ row ['sales_total'].

Вы проверили правильность запроса к базе данных?также пытались ли вы на странице, которую вы выполняете цикл foreach, напрямую выводить $ row ['sales_day'] или $ row ['sales_total'], чтобы увидеть, содержит ли он данные?

Редактировать: я заметил, что вы пишете fetchAllс двумя заглавными буквами L как: «fetchALL».Не уверен, что это что-то меняет, но, просматривая руководство по PHP, оно должно быть записано как «fetchAll»

...