• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Powielanie zdjęć przy pobieraniu z bazy danych

VPS Starter Arubacloud
0 głosów
364 wizyt
pytanie zadane 31 maja 2022 w PHP przez bartolomeusz80 Nowicjusz (140 p.)

Witam ponownie,

Stworzyłem taki kod, który po przesłaniu danych do bazy pobiera zdjęć, które znajduje się w tej bazie. 
 

<?php 
include("functions.php");

if (!isAdmin()) {
    $_SESSION['msg'] = "You must log in first";
    header('location:index.php');
}

if (isset($_GET['logout'])) {
    session_destroy();
    unset($_SESSION['user']);
    header("location:index.php");
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Strona zarządzania</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <style>
    .header {
        background: #003366;
    }
    button[name=register_btn] {
        background: #003366;
    }
    </style>
</head>
<body>
    <div class="header1">
        <h2>Dietetyk - <strong><?php echo $_SESSION['user']['imie']; ?> <?php echo $_SESSION['user']['nazwisko']; ?></strong> </h2>
    </div>
    <div class="content">
        <!-- notification message -->
        <?php if (isset($_SESSION['success'])) : ?>
            <div class="error success" >
                <h3>
                    <?php 
                        echo $_SESSION['success']; 
                        unset($_SESSION['success']);
                    ?>
                </h3>
            </div>
        <?php endif ?>

        <!-- logged in user information -->
        <div class="profile_info">
        <?php
        $result = mysqli_query($db, "SELECT * FROM users");
while($data = mysqli_fetch_array($result))
{
 
      ?>
<img src="image/<?php echo $_SESSION['user']['filename']; ?>">
 
<?php
}
?>

            </div>
                <?php  if (isset($_SESSION['user'])) : ?>
                    <strong><?php echo $_SESSION['user']['username']; ?></strong>

                    <small>
                        <i  style="color: #888;">(<?php echo ucfirst($_SESSION['user']['user_type']); ?>)</i> 
                        <br>
                        <a href="home.php?logout='1'" style="color: #262626
                        ;">Wyloguj się</a>
                       &nbsp; <a href="create_user.php"> + add user</a>
                    </small>

                <?php endif ?>
            </div>
        </div>
    </div>
</body>
</html>

Niestety gdzieś popełniam błąd, ponieważ za każdym razem jak dodam nowego użytkownika, po zalogowaniu do konta powiela mi to samo zdjęcie.

Gdzie popełniam błąd ? Analizowałem kod kilkukrotnie i nie mogę znaleźć przyczyny. 

Z góry dziękuję za pomoc. 

1 odpowiedź

0 głosów
odpowiedź 31 maja 2022 przez Arkadiusz Waluk Ekspert (289,150 p.)
Trochę się pogubiłem w tym, gdzie tak naprawdę jest problem. Mówisz, że powiela to samo zdjęcie dla zalogowanego użytkownika. Wg kodu wyświetlasz za to w pętli wiele zdjęć i z początku myślałem, że zamysł był taki, aby wyświetlić zdjęcia wszystkich użytkowników, ale po spojrzeniu okazało się, że zdjęcie w tym miejscu zawsze bierzesz z sesji, czyli zapewne dla aktualnie zalogowanego.

Tak więc jaki jest oczekiwany efekt, co ma robić ta pętla while po wynikach z bazy i czemu pętla jest po danych z bazy, choć ścieżka zdjęcia zawsze jest z sesji?
komentarz 31 maja 2022 przez bartolomeusz80 Nowicjusz (140 p.)
Zamysł jest taki że zdjęcie, które jest wyświetlane dla użytkownika po zalogowaniu ma być zdjęciem profilowym.

 

W momencie rejestracji, użytkownik wybiera zdjęcie z komputera i w momencie rejestracji to nazwa zdjęcia zapisuje się w bazie, a samo zdjęcie w folderze .../image .

Chciał bym żeby po zalogowaniu wyświetlało się jedno zdjęcie, które użytkownik wybrał w momencie rejestracji .

A jak bym całkowicie wyeliminował pętle ?

Czy problem leży w sesji ?
komentarz 31 maja 2022 przez Arkadiusz Waluk Ekspert (289,150 p.)
Skoro tak, to wg mnie pętla jest w ogóle niepotrzebna, wystarczy wyświetlić jedno zdjęcie, zdjęcie pobrane z sesji lub ewentualnie wykonać zapytanie do bazy po dane tylko tego jednego użytkownika. Jeśli chodzi o sesję to kwestia sprawdzenia czy na logowaniu jest ono poprawnie przypisywane, tzn. czy ścieżka tego, kto się zalogował, jest pobierana z bazy i przypisywana do sesji.
komentarz 31 maja 2022 przez VBService Ekspert (255,840 p.)
edycja 31 maja 2022 przez VBService

Tak jak napisał Tobie @Arkadiusz Waluk, pętla

while($data = mysqli_fetch_array($result)) { ... }

jest zbędna, ponieważ za jej pomocą nie "wyświetlasz" żadnych danych po za tym, że pętla wykona kod w tym przypadku

<img src="image/<?php echo $_SESSION['user']['filename']; ?>">

tyle razy ile wierszy zwróci sql (np. dla 10 user-ów w bazie, 10 razy iteruje, pojawi się 10 obrazków)

SELECT * FROM users

 

 

zapisz po prostu tak

<!-- logged in user information -->
<div class="profile_info">
    <img src="image/<?php echo $_SESSION['user']['filename']; ?>">
</div>

 

nawet jakbyś z bazy danych pobierał dane, to i tak będą się tyczyć jednego użytkownika, więc pętla dalej jest zbędna (jeden zwrócony wiersz).

BTW, PHP and MySQL Select a Single Value

Podobne pytania

0 głosów
1 odpowiedź 170 wizyt
pytanie zadane 15 października 2023 w SQL, bazy danych przez Piotrek2713 Mądrala (5,500 p.)
+2 głosów
3 odpowiedzi 299 wizyt
pytanie zadane 23 grudnia 2022 w SQL, bazy danych przez rycho84 Nowicjusz (230 p.)
0 głosów
0 odpowiedzi 127 wizyt

93,028 zapytań

141,991 odpowiedzi

321,294 komentarzy

62,375 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...