Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Modyfikacja pobierania ścieżki obrazków
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Witam, mam u siebie pobieranie avatarów użytkowników z bazy forum smf na portal. Kod przedstawiający to:
  1. while ($row = $smcFunc['db_fetch_assoc']($request) AND $row['id_attach']>0)
  2. $return[] = array(
  3. 'id' => $row['id_member'],
  4. 'name' => $row['real_name'],
  5. 'href' => '?action=profile;u=' . $row['id_member'],
  6. 'link' => '<a href="http://localhost/smf/index.php?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '<img src="http://localhost/smf/index.php?action=dlattach;attach='. $row['id_attach'] .';type=avatar" align="right" alt="avatar"/></a>',
  7. );
  8. $smcFunc['db_free_result']($request

trochę pokombinowałem, warunek, że id_attach musi być wieksze od 0, ale mam problem z dodaniem else. próbowałem zrobić to idąc tym tropem: http://richardkmiller.com/95/php-needs-a-w...-else-statement jednak wyświetlał mi się błąd niezdefiniowanego else. Czy powinienem zamieścić tego while w ifa?
Jak to rozwiązać?
z rozpędu zapomniałbym powiedzieć o co mi chodzi: mianowicie:
Ten kod działa, jesli uzytkownik własnoręcznie wgra avatar do swojego profilu. Zainstalowałem moda, ktory daje default avatary, jednak nie jest to ta sama ścieżka i właśnie tutaj mam problem. Chciałbym tak zmodyfikować ten skrypt, żeby jeśli id_attach>0, to wyświetla avatar (to ten wgrany będzie wtedy) i do tego else do wyświetlania default avatara. Jakby to rozwiązać? Jakieś pomysły wink.gif ?
kill15
dać pętle w ifa questionmark.gif
tzn


  1. if($row['id_attach']>0)
  2. {
  3. while($row = $smcFunc['db_fetch_assoc']($request))
  4. {
  5. // Zawartość pętli
  6. }
  7. }
  8.  
Pcbecaw
  1. if($row['id_attach']>0)
  2. {
  3. while ($row = $smcFunc['db_fetch_assoc']($request))
  4. $return[] = array(
  5. 'id' => $row['id_member'],
  6. 'name' => $row['real_name'],
  7. 'href' => '?action=profile;u=' . $row['id_member'],
  8. 'link' => '<a href="http://localhost/smf/index.php?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '<img src="http://localhost/smf/index.php?action=dlattach;attach='. $row['id_attach'] .';type=avatar" align="right" alt="avatar"/>',
  9. )
  10.  
  11.  
  12. ;}else{echo'asdas';}
  13. $smcFunc['db_free_result']($request);

Coś jest nie tak, bo wyświetla mi else, a powinno avatar, ponieważ wartość rekordu (jedynego) id_attach wynosi: 1
kill15
może coś źle pobierasz questionmark.gif ;>
Pcbecaw
Znaczy, bez tego warunku kod działa. Po dodaniu warunku wyświetla else, a nie powinno. Jakby to zmienić?

Zmieniłem na tak:
  1. if($row = $smcFunc['db_fetch_assoc']($request) AND $row['id_attach']>0)
  2. {
  3.  
  4. $return[] = array(
  5. 'id' => $row['id_member'],
  6. 'name' => $row['real_name'],
  7. 'href' => '?action=profile;u=' . $row['id_member'],
  8. 'link' => '<a href="http://localhost/smf/index.php?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '<img src="http://localhost/smf/index.php?action=dlattach;attach='. $row['id_attach'] .';type=avatar" align="right" alt="avatar"/>',
  9. )
  10.  
  11.  
  12. ;}else{echo'asdas';}
  13. $smcFunc['db_free_result']($request);

i wyświetla zwykły kod, else jakby nie istniało. Co z tym jest nie tak?

Zauważyłem, że w bazie jeśli użytkownik nie dodałe avatara, to w ogóle nie widnieje w tej tabeli, gdzie "id_attach". Jak to inaczej rozwiązać?
korex
sprobuj tak:
  1. $row = $smcFunc['db_fetch_assoc']($request);
  2. if($row['id_attach']>0)
  3. {
  4. while ($row)
  5. $return[] = array(
  6. 'id' => $row['id_member'],
  7. 'name' => $row['real_name'],
  8. 'href' => '?action=profile;u=' . $row['id_member'],
  9. 'link' => '<a href="http://localhost/smf/index.php?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '<img src="http://localhost/smf/index.php?action=dlattach;attach='. $row['id_attach'] .';type=avatar" align="right" alt="avatar"/>' );
  10. } else
  11. {
  12. echo'asdas';
  13. }
  14. $smcFunc['db_free_result']($request);


edit: sprobuj teraz -blad w linni 1
nie wiem dokladnie o co chodzi przerobilem tylko kod ktory podales.
Pcbecaw
Wyskakuje błąd w ifie, ale to i tak jest zły warunek, ponieważ jeśli uzytkownik własnoręcznie nie doda avatara do swojego profilu, to w ogóle nie widnieje w tej tabeli, w której jest id_attach, a co za tym idzie - wszystkie id_attach są wieksze od zera.

Po dołączeniu left join kod wygląda tak:
Kod
// Find the latest poster.
    $request = $smcFunc['db_query']('', '
        SELECT m.id_member as id_member, m.real_name as real_name, m.posts as posts, karma_good, id_attach
FROM smf_members as m
LEFT JOIN smf_attachments as a
ON m.id_member = a.id_member
ORDER BY posts DESC
        LIMIT ' . $topNumber,
        array(
        )
    );
    $return = array();
    while ($row = $smcFunc['db_fetch_assoc']($request))
        $return[] = array(
            'id' => $row['id_member'],
            'name' => $row['real_name'],
            'href' => '?action=profile;u=' . $row['id_member'],
            'link' => ($row['id_attach'] ? '<a href="http://localhost/smf/index.php?action=profile;u=' . $row['id_member'] . '">' . $row['real_name'] . '<img src="http://localhost/smf/index.php?action=dlattach;attach='. $row['id_attach'] .';type=avatar" align="right" alt="avatar"/>' : '<img src="http://forum.bloodwars.interia.pl/images/avatars/avatar-1062.gif"/>')
        );
    $smcFunc['db_free_result']($request);

i wyświetla się błąd:
"Bład bazy danych
Spróbuj ponownie. Jeśli powrócisz do tego komunikatu, zgłoś błąd administratorowi.
Wróć". Co może być jego przyczyną? Z tego co zdołałem zauważyć, to błąd tkwi w zapytaniu SELECT.
Jeśli uzytkownik nie wgra avatara, nie powstaje jego wiersz w tabeli "attachment", a w tabeli "members" niczym się nie wyróznia (nie ma info, że nie ma avataru). Po prostu jeśli doda avatar, to tworzy sie do attachment, jesli nie doda - attachment jest puste.
Jak to rozwiązać?

Dla przejrzystego układu zamieszczam eksporty dla attachment i members. Może teraz coś na te błędy da się poradzić:
smf_attachments:
http://www.wklejto.pl/100458
smf_members:
http://wklejto.pl/100457

Przepraszam, że bezsensownie podbijam, ale chciałbym tylko zapytać, czy to jest możliwe do zrobienia? Nie wiem czy kombinować i czy jest sens się z tym męczyć, ponieważ i bez tego strona może funkcjonować. Chciałbym wiedzieć, czy męczyć się, żeby to jakoś wykombinować, czy po prostu spasować? Co byście zrobili na moim miejscu?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.