Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wyświetlanie rekordów z bazy
Forum PHP.pl > Forum > Przedszkole
emSon
Długo szukałem problemu i wstrzymywałem się z napisaniem tego tematu mając nadzieję ,że sam się błędu doszukam. Ale tak się nie stało.



Góra screenshota przedstawia jak to wygląda na stronie. Po odczytaniu właściwych postów dodaje nieskończoną ilość wzorów html , kompletnie bez danych z bazy.
Dół przedstawia wynik zapytania w bazie, tego samego ,którego użyłem w skrypcie. Jak widać, wyświetla poprawnie.

  1. $sql = "SELECT posty.*, users.imie, users.nazwisko, users.ranga, users.kolor, users.avatar FROM posty, users WHERE users.id = posty.autorid ORDER BY posty.data DESC, posty.godzina DESC";
  2.  
  3. if($rezultat = $polaczenie->query($sql)){
  4.  
  5. $ile = $rezultat->num_rows;
  6.  
  7. for($i=1; $i++; $i<=rezultat){
  8. $wiersz = $rezultat->fetch_assoc();
  9. $id = $wiersz['id'];
  10. $autorid = $wiersz['autorid'];
  11. $data = $wiersz['data'];
  12. $godzina = $wiersz['godzina'];
  13. $polubienia = $wiersz['polubienia'];
  14. $tresc = $wiersz['tresc'];
  15.  
  16. $imie = $wiersz['imie'];
  17. $nazwisko = $wiersz['nazwisko'];
  18. $ranga = $wiersz['ranga'];
  19. $kolor = $wiersz['kolor'];
  20. $avatar = $wiersz['avatar'];
  21. [...]


Dalej jest już kod html, Podejrzewam ,że błąd jest w konstrukcji pętli. Próbowałem wszelkich możliwości i sposobów , lecz nie trafiłem. Mam nadzięje, że ktoś wskaże przyczynę problemu. Zapewne tak prostą ,że aż śmieszną smile.gif
Bejkrools
Spróbuj taką metodą:

  1. $zapytanie = mysql_query("SELECT posty.*, users.imie, users.nazwisko, users.ranga, users.kolor, users.avatar FROM posty, users WHERE users.id =
  2. posty.autorid ORDER BY posty.data DESC, posty.godzina DESC'")
  3.  
  4. if(mysql_num_rows($zapytanie) > 0)
  5. {
  6. while($wiersz = mysql_fetch_assoc($zapytanie))
  7. {
  8. $id = $wiersz['id'];
  9. $autorid = $wiersz['autorid'];
  10. $data = $wiersz['data'];
  11. $godzina = $wiersz['godzina'];
  12. $polubienia = $wiersz['polubienia'];
  13. $tresc = $wiersz['tresc'];
  14. $imie = $wiersz['imie'];
  15. $nazwisko = $wiersz['nazwisko'];
  16. $ranga = $wiersz['ranga'];
  17. $kolor = $wiersz['kolor'];
  18. $avatar = $wiersz['avatar'];
  19. }
  20. }


Jeśli nie miałbyś źle skonstruowane zapytanie to pętla nie wykona się ani razu.
emSon
No niestety teraz nic się nie wyświetla. Żaden post, pustka.
Bejkrools
Ale pętle się wykonują tyle razy, ile masz wpisów? Wyświetlają Ci się jakiekolwiek dane z bazy?
emSon
Tym twoim sposobem nic sie nie wyswietla. Moim natomiast pokazane było to co chciałem , a potem bardzo dużo pustych postów jak na obrazku. Tyle ,że nie sposób było policzyć.
Bejkrools
Moim sposobem nic Ci się wcześniej nie wyświetliło, bo nie iałeś pewnie połączenia z bazą :-)

  1. $sql = "SELECT posty.*, users.imie, users.nazwisko, users.ranga, users.kolor, users.avatar FROM posty, users WHERE users.id = posty.autorid ORDER BY posty.data DESC, posty.godzina DESC";
  2.  
  3. if($rezultat = $polaczenie->query($sql)){
  4.  
  5. while($wiersz = mysql_fetch_assoc($rezultat))
  6. {
  7. $id = $wiersz['id'];
  8. $autorid = $wiersz['autorid'];
  9. [...]
  10. }


Jak porównasz sobie to zobaczysz zmodyfikowany zapis pętli
Raito
Spróbuj albo zrobić to na pętli while, albo poprawnie skonstruować for. Poza tym to $ile zawiera ilość rekordów
Bejkrools
Przeoczyłem to, popatrz...
for($i=1; $i++; $i<=rezultat)
a ilość rekordów przechowujesz w $ile

*sorry Raito, nie zauważylem, że napisales
emSon
Szlag mnie trafia. Bejkrools, nie pominąłem połączenia z bazą. Twój sposób nie działa, ani jeden, ani drugi. Różnica polegała na zmianie $zapytanie na $rezultat . Zamiana $rezultat na $ile w pętli też nie daje żadnych rezultatów. W ogóle to wygląda tak ,jakby pętla w skrypcie nie brała żadnych liczb do warunku. Próbowałem i z 2, i z 10, i ze zmienną określoną. Nic.

  1. $sql = "SELECT posty.*, users.imie, users.nazwisko, users.ranga, users.kolor, users.avatar FROM posty, users WHERE users.id = posty.autorid ORDER BY posty.data DESC, posty.godzina DESC";
  2.  
  3. if($rezultat = $polaczenie->query($sql)){
  4.  
  5. $ile = $rezultat->num_rows;
  6. $i = 1;
  7.  
  8. while($i < $ile){
  9.  
  10. $wiersz = $rezultat->fetch_assoc();
  11. $id = $wiersz['id']; [...]


Obecnie to wygląda tak , i nic się nie zmieniło od mojego pierwszego postu.
Raito
Spróbuj tak:
  1. while($row = $rezultat->fetch_assoc()){
  2. $wiersz = $row["dane"];
  3. [...]
  4. }
emSon
Nie rozumiem tego. Raitio, teraz wychodzi środkowy post i jeden pusty...
Bejkrools
A może wyświetl sobie echo $ile;
Zobacz czy masz "dobrą" wartość.
Potem wyświetl sobie zawartośc obiektu var_dump($rezultat);

Upwnij się jakie dane przetwarzasz. Może problem tkwi w tym co obrabiasz w pętli, a nie to jak to robisz?
emSon

3 - wartość liczby ile , to sie akurat zgadza.
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(11) ["lengths"]=> NULL ["num_rows"]=> int(3) ["type"]=> int(0) } - no i obiekt. czy się zgadza, nie wiem.
Bejkrools
var_dump($wiersz)
(tylko już po pętli)
emSon
NULL
Raito
Jeśli masz phpmyadmin, to spróbuj w nim wykonać to zapytanie.
emSon
Już to zrobiłem, mówiłem w pierwszym poście.
Raito
Mógłbyś pokazać jeszcze raz całość po zmianach?
IProSoft
A co to za tworek :
  1. for($i=1; $i++; $i<=rezultat){


Spójrz najpierw na składnię: http://php.net/manual/en/control-structures.for.php
emSon
Przepisałem kod. Tamten miał chyba 5 klamer na końcu, ten miał trzy. O dziwo wszystko działa jak powinno. Mimo tego calutki kodzik wklejam poniżej:

  1. <?php
  2.  
  3. require_once "dane.php";
  4.  
  5. $polaczenie = @new mysqli($host, $user, $password, $db_name);
  6. $polaczenie-> query ('SET NAMES utf8');
  7. $polaczenie -> query ('SET CHARACTER_SET utf8_unicode_ci');
  8.  
  9. if($polaczenie->connect_errno !=0){
  10.  
  11. echo "Error: ".$polaczenie->connect_errno;
  12. exit();
  13.  
  14. } else { // pierwsza klamra
  15.  
  16. $sql = "SELECT posty.*, users.imie, users.nazwisko, users.ranga, users.kolor, users.avatar FROM posty, users WHERE users.id = posty.autorid ORDER BY posty.data DESC, posty.godzina DESC";
  17.  
  18. if($rezultat = $polaczenie->query($sql)){ //druga klamra
  19.  
  20. $ile = $rezultat->num_rows;
  21. $i = 1;
  22.  
  23. while($ile > $i){ //trzecia klamra
  24. $wiersz = $rezultat->fetch_assoc();
  25. $id = $wiersz['id'];
  26. $autorid = $wiersz['autorid'];
  27. $data = $wiersz['data'];
  28. $godzina = $wiersz['godzina'];
  29. $polubienia = $wiersz['polubienia'];
  30. $tresc = $wiersz['tresc'];
  31. $imie = $wiersz['imie'];
  32. $nazwisko = $wiersz['nazwisko'];
  33. $ranga = $wiersz['ranga'];
  34. $kolor = $wiersz['kolor'];
  35. $avatar = $wiersz['avatar'];
  36.  
  37. echo"<div class=\"wpis\">
  38. <div class=\"avatar\">
  39. <img src=\"$avatar\" width=\"60px\" height=\"60px\">
  40. </div>
  41. <div class=\"autor\">
  42. $imie $nazwisko";
  43.  
  44. if(strlen($ranga)>0) {
  45. echo '<span style="color:'.$kolor.'"> ['.$ranga.']</span>';
  46. }
  47.  
  48. echo <<<END
  49. </div>
  50. <div class="data">
  51. $data | $godzina
  52. </div>
  53. <div class="tresc">
  54. $tresc
  55. </div>
  56. <div class="like">
  57. END;
  58. echo <<< END
  59. </div>
  60. </div>
  61. END;
  62. $i++;
  63. } //koniec trzeciej klamry
  64. } //koniec drugiej klamry
  65. exit();
  66. } //koniec pierwszej klamry
  67. $polaczenie->close();
  68.  
  69. ?>
  70.  


PS: Zarówno na localhoście jak i na serwerze zewnętrznym urywa wszystko co jest po body. Nie chce tworzyć kolejnego tematu, wie ktoś może czemu tak się dzieje?
untorched
Linia 65: exit();
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.