Jak wyświetlić wszystkie zdjęcia z bazy danych ?

0

Chcę wyświetlić wszystkie zdjęcia z bazy danych dodane przez użytkownika X. Problem w tym że wyświetla tylko pierwsze pasujące. Dodałem w html pętle foreach ale wyświetla błąd typu photo.jpg Warning: foreach() argument must be of type array|object, null given in C:

<?php

class photo_display
{
    private $database;
    private $userData;


    public function __construct($database)
    {
        $this->database = $database;
    }

    public function display()
    {
        $id = $_SESSION['id'];

        $query = $this->database->connect()->prepare("SELECT photo FROM photo where user_id = :id");
        $query->bindParam(':id',$id, PDO::PARAM_INT);
        $query->execute();

        if($query->rowcount())
        {
            $row = $query->fetch();
        }
        $this->userData = $row;

    }

    public function display_Photos(string $colName)
    {
        echo (isset($this->userData[$colName])) ? $this->userData[$colName] : '';
    }
}


?>
<div class='container-fluid bg-dark' id='profil'>
            <div class='row'>
                <div class=" col-12 col-sm-12 col-md-4 col-lg-4 col-xl-4 order-5 order-12 order-6 order-md-4">
                    <div class="row" id="margin">
                        <div class="col-xl-12 d-flex justify-content-center">
                            <?php foreach ($photo_display->display_Photos('photo') as $value) ?>
                            <img src="<?php echo $value ?>"/>
                        </div>
                    </div>
                </div>
2
if($query->rowcount())
        {
            $row = $query->fetch();
        }
        $this->userData = $row;

Dodajesz tu jeden wiersz z zapytania. Skoro potem chcesz się odwołać do userData jak do tablicy, to albo w pętli dodawaj wiersze albo użyj jakiegoś fetchAll().

https://stackoverflow.com/questions/10940332/how-to-fetch-all-the-row-of-the-result-in-php-mysql/15484638

0

@jurek1980:
Zmodyfikowałem tak. Teraz dalej nie wyświetla zdjęc, ale błedów też nie. Tylko alt. Czy mógłbyś zerknąć czy w kodzie html nie ma błedów ?

 public function display()
    {
        $id = $_SESSION['id'];

        $query = $this->database->connect()->prepare("SELECT photo FROM photo where user_id = :id");
        $query->bindParam(':id',$id, PDO::PARAM_INT);
        $query->execute();

        if($query->rowcount())
        {
            $row = $query->fetchAll();
        }
        $this->userData = $row;

    }
 public function display_Photos(string $colName)
    {
        return (isset($this->userData[$colName])) ? $this->userData[$colName] : [];
    }
}
3

Zobacz co masz w tych wynikach używając var_dump

if($query->rowcount())
        {
            $row = $query->fetchAll();
        }
}
$this->userData = $row;
var_dump($this->userData);
die ('zatrzymano na tej linii');

Jak będziesz wiedział co tu masz, to pewnie będziesz wiedział co zmodyfikować.

0

@jurek1980: Wyświetla teraz coś takiego

array(5) { [0]=> array(2) { ["photo"]=> string(8) "photo1.jpg" [0]=> string(8) "photo1.jpg" } [1]=> array(2) { ["photo"]=> string(11) "Janusz.jpg" [0]=> string(11) "Janusz.jpg" } [2]=> array(2) { ["photo"]=> string(12) "pulpit15.jpg" [0]=> string(12) "pulpit15.jpg" } [3]=> array(2) { ["photo"]=> string(12) "pulpit13.png" [0]=> string(12) "pulpit13.png" } [4]=> array(2) { ["photo"]=> string(12) "pulpit14.jpg" [0]=> string(12) "pulpit14.jpg" } } zatrzymano na tej linii
3

To co to jest według Ciebie? Czy to tablica?
Dlatego dałem Ci linka do Stacka z opisem.
Zobacz co się zmieni jak zrobisz.

//Copy result into a numeric array
$resultArray = $result->fetch_all(MYSQLI_NUM)

Musisz doprowadzić do sytuacji gdzie w następnych funkcjach odwołujesz się do tablicy lub zmodyfikować wyświetlanie do tego co masz w tych danych z wyniku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1