Отображение данных MySQL на веб-странице - PullRequest
0 голосов
/ 23 октября 2019

Мои данные успешно отображаются на веб-странице с помощью цикла foreach, однако я хочу применить уникальное изображение и цвет к каждому блоку, который содержит данные из базы данных. Это будет предотвращено циклом foreach, который будет повторять поля, чтобы иметь одинаковый цвет и изображение. Я чувствую, что массивы были бы полезны для того, чтобы у меня были коробки с разными изображениями и цветом, но я хотел знать, как это сделать.

<?php

//check connection

if(!$conn){
    echo 'connection error: ' . mysqli_connect_error();
}

//write  query for all pizzas

$sql = 'SELECT * FROM pizzas ORDER BY created_at';

//Make query and get result

$result = mysqli_query($conn, $sql);

//fecth the resulting rows as an array

$pizzas = mysqli_fetch_all($result, MYSQLI_ASSOC);

//free result from memory

mysqli_free_result($result);

//close connnection

mysqli_close($conn);
?>

<!DOCTYPE html>
<html>
    <head>
        <title>
        PHP File
        </title>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>

    </head>

    <body>

        <h4 class="text-center">Project Archives</h4>

        <div class="container">
        <div class="row">
            <?php foreach($pizzas as $pizza){ ?>            
            <div class="col-sm-4 case-studies" data-modal="modal5">


                <div class="intro-block five">
                    <h3 class="case-study title"><?php echo htmlspecialchars($pizza['title']);?></h3>
                    <p class="case-study summary"><?php echo htmlspecialchars($pizza['case_text']);?></p>
                    <a class="brand-text" href="#">More info</a>            
                </div>

            </div>

            <?php } ?>

            </div>

        </div>
    </body>
</html>

1 Ответ

0 голосов
/ 23 октября 2019

Есть много способов выполнить эту задачу, возможно, следующие могут быть интересны, так как вы упомянули array ~, но неясно, как вы собираетесь применять цвет и изображение - так что я догадался.

Этот подход ограничен тем, что вам нужно определить массив цветов / изображений перед итерацией по набору записей, и, как и в настоящее время, произойдет сбой, когда будет достигнут конец массива, если будет больше записей.

<?php

    $sql = 'SELECT * FROM pizzas ORDER BY created_at';
    $result = mysqli_query($conn, $sql);
    $pizzas = mysqli_fetch_all($result, MYSQLI_ASSOC);
    mysqli_free_result($result);
    mysqli_close($conn);



    $styles=array(
        ['colour'=>'red','image'=>'/images/pizza/p1.jpg'],
        ['colour'=>'yellow','image'=>'/images/pizza/p2.jpg'],
        ['colour'=>'green','image'=>'/images/pizza/p3.jpg'],
        ['colour'=>'blue','image'=>'/images/pizza/p4.jpg'],
        ['colour'=>'brown','image'=>'/images/pizza/p5.jpg'],
        ['colour'=>'pink','image'=>'/images/pizza/p6.jpg'],
        ['colour'=>'orange','image'=>'/images/pizza/p8.jpg']/* etc */
    );
?>
<!DOCTYPE html>
<html>
    <head>
        <title>PHP File</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
    </head>

    <body>

        <h4 class="text-center">Project Archives</h4>

        <div class="container">
        <div class="row">
            <?php 

            foreach( $pizzas as $index => $pizza ){ 
                $style=$styles[ $index ];
                $colour=$style['colour'];
                $image=$style['image'];


            ?>          
            <div class="col-sm-4 case-studies" data-modal="modal5" style="color:<?php echo $colour;?>">

                <img src='<?php echo $image;?>' />

                <div class="intro-block five">
                    <h3 class="case-study title"><?php echo htmlspecialchars($pizza['title']);?></h3>
                    <p class="case-study summary"><?php echo htmlspecialchars($pizza['case_text']);?></p>
                    <a class="brand-text" href="#">More info</a>            
                </div>

            </div>

            <?php } ?>

            </div>

        </div>
    </body>
</html>

Как упомянуто выше. Если у набора записей все еще есть дополнительные записи, но в массиве $ styles больше нет элементов, произойдет ошибка. В этот момент вы могли бы повторно использовать массив $ styles каким-то образом, возможно, так:

$index=0;
foreach( $pizzas as $pizza ){

    if( $index > count( $styles ) - 1 ) {
        shuffle( $styles );
        $index=0;
    }

    $style=$styles[ $index ];
    $colour=$style['colour'];
    $image=$style['image'];                 

    /* etc as before ... */



    /* content */


    /* content */

    $index++;
}//end loop
...