• 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

Object Storage Arubacloud
0 głosów
334 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 (287,950 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 (287,950 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 (253,100 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ź 149 wizyt
pytanie zadane 15 października 2023 w SQL, bazy danych przez Piotrek2713 Mądrala (5,340 p.)
+2 głosów
3 odpowiedzi 239 wizyt
pytanie zadane 23 grudnia 2022 w SQL, bazy danych przez rycho84 Nowicjusz (230 p.)
0 głosów
0 odpowiedzi 117 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...