Вывести все различные переменные из запроса SELECT в цикле while - PullRequest
0 голосов
/ 25 мая 2020

Я хочу SELECT три случайных и уникальных строки из MySQL базы данных и заполнить три HTML "карточных" элемента некоторыми уникальными данными. Теперь я могу SELECT данные из трех случайных строк в моей базе данных, и у меня есть PHP for-loop, который создает три HTML карты.

Проблема, с которой я столкнулся, заключается в том, что последние значения из запроса SELECT перезаписывают различные переменные ($username, $fullName и $age), поэтому одно и то же значение переменной печатается три раза вместо печати три уникальных и разных достоинства карт. Есть ли лучшее решение для l oop через переменные из запроса SELECT и присвоение разных значений трем карточкам?

Полагаю, моя проблема в том, что я SELECT и fetch_assoc карты, но значения последней строки используются для переменных, которые я затем echo трижды выхожу в for-loop.

Код PHP:

<?php require_once '../../php/core/init.php';

$sql       = 'SELECT username, name, age FROM app ORDER BY RAND() LIMIT 3';
$result    = $conn->query($sql);

if($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        $username   = $row['username'];
        $fullName   = $row['name'];
        $age        = $row['age'];
    }

} else {
    echo '<p>No posts to show...</p>';
}

$conn->close();

?>

<div class="card-wrapper --center-align">
 <?php for ($i = 0; $i < 3; $i++) { 
   echo '
    <div class="card">
        <div class="card__title">
           <h5>'.$fullName.', <span class="card__title--age">'.$age.'</span></h5>
           <p class="card__title--username">('.$username.')</p>
        </div>
    </div>';
 } ?>
</div>

1 Ответ

2 голосов
/ 25 мая 2020

Попробуйте сохранить каждый вывод из db в основной массив и прочитать из него:

    <?php require_once '../../php/core/init.php';

    $sql       = 'SELECT username, name, age FROM app ORDER BY RAND() LIMIT 3';
    $result    = $conn->query($sql);


    if($result->num_rows > 0) {
         $username = [];
         $fullName = [];
         $age = [];
         $n = 0;

        while($row = $result->fetch_assoc()) {
            $username[$n]   = $row['username'];
            $fullName[$n]   = $row['name'];
            $age[$n]        = $row['age'];
           $n++;
        }

    } else {
        echo '<p>No posts to show...</p>';
    }

    $conn->close();

    ?>

    <div class="card-wrapper --center-align">
     <?php for ($i = 0; $i < $n; $i++) { 
       echo '
        <div class="card">
            <div class="card__title">
               <h5>'.$fullName[$n].', <span class="card__title--age">'.$age[$n].'</span></h5>
               <p class="card__title--username">('.$username[$n].')</p>
            </div>
        </div>';
     } ?>

    </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...