Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z wyświetlaniem danych z bazy
Forum PHP.pl > Forum > PHP
liMp
Witam

  1. <?php
  2. $zapytanie = mysql_query("SELECT * FROM rekordy ");
  3. $resultat=mysql_fetch_array($zapytanie);
  4.  
  5. $data=$resultat['data'];
  6.  
  7. function utnij($tekst,$ile) {
  8. $licz = strlen($tekst);
  9. if ($licz>=$ile) {
  10. $tnij = substr($tekst,0,$ile);
  11. $uciete = $tnij."...";
  12. }
  13. else {
  14. $uciete = $tekst;
  15. }
  16. return $uciete;
  17. }
  18.  
  19. $tekst = $resultat['opinia'];
  20. $opinia= utnij($tekst,115);
  21.  
  22.  
  23.  
  24. $ile = mysql_num_rows($zapytanie);
  25. $rekordow_na_strone = 5;
  26. $strony = ceil ($ile / $rekordow_na_strone);  
  27. for ($i = 0; $i < $strony; $i++) echo ' <a href="?strona='.($i+1).'"> ['.($i+1).']</a> ';  
  28. if (!isset($_GET['strona'])) $strona = 1; else $strona = (int)$_GET['strona'];
  29. $zapytanie = mysql_query("SELECT * FROM rekordy LIMIT ".(($strona-1)*$rekordow_na_strone).','.$rekordow_na_strone);
  30. while($resultat=mysql_fetch_array($zapytanie));
  31. {
  32. '
  33. <div id="szama">
  34. '.$data.'<br>
  35. '.$opinia.
  36. </div>
  37. }
  38. ?>


Problem jest następujący - f while nie wyświetla wszystkich wpisów z bazy danych tylko jeden (pierwszy). W kodzie zawarte jest również porcjowanie danych na strony ale ono na pewno działa gdyż przy ustawieniu 1 rokurdu na stronę tworzy drugą (co prawda nic się nie zmienia) ale sam mechanizm znaczy ,że działa jak również num_rows który prawidłowo pokazuje 2.
Wydaje mi się, że problem tkwi w drugim fetch_array dokładnie tu "while($resultat=mysql_fetch_array($zapytanie));"
gdy dam do echo np. '.$resultat[2].' to nie wyświetla nic. Zaś gdy dam dokładnie to samo ponad linie z while - działa.
Za grom nie mogę sobie z tym poradzić, proszę o pomoc.
nospor
  1. <?php
  2. while($resultat=mysql_fetch_array($zapytanie));
  3. {
  4. '
  5. <div id="szama">
  6. '.$data.'<br>
  7. '.$opinia.
  8. </div>
  9. }
  10. ?>

Przeciez tutaj wyswietlasz $data i $opinia, ktore wyliczasz poza pętlą, dla wczesniej pobranego jednego rekordu. Olewasz callkowicie rekordy, przez ktore iterujesz w tej wlasnie petli
liMp
Ah wybacz źle to trochę wkleiłem, ja to cały czas piszę i jest bardzo roboczy kod dlatego mogłem wprowadzić Cię w błąd. Niżej w poście napisałem ,ze dodanie do niego np. '.$resultat[2].' nie powoduje zmian.

  1. <?php
  2. while($resultat=mysql_fetch_array($zapytanie));
  3. {
  4. '
  5. <div id="szama">
  6. '.$data.'<br>
  7. '.$resultat[2].'
  8. </div>'
  9. }
  10. ?>


Swoją drogą dane danymi ale pustego diva powinien stworzyć skoro są 2 rekordy ? Bynajmniej tak mnie się wydaje.
tmka
Czyli masz coś nie tak z zapytaniem
  1. <?php
  2. $zapytanie = mysql_query("SELECT * FROM rekordy LIMIT ".(($strona-1)*$rekordow_na_strone).','.$rekordow_na_strone);
  3. ?>


posprawdzaj wartości zmiennych, które wykorzystujesz w zapytaniu, możliwe że tu leży przyczyna.
Kasyx
Coś strasznie tu namieszałeś.

Polecam uzywać myql_fetch_assoc() zamiast mysql_fetch_array()

Jak napisał kolega powyżej, nie używasz nowo pobranych danych. While sobie leci i nic z tego nie wynika. Kolejny problem wynikający z takiego rozwiązania: całkowicie niepotrzebnie pobierasz 2 krotnie to samo zapytanie. Raz bez LIMIT raz z LIMIT. Problem da się spokojnie rozwiązać pobierając to raz.

Ale idąc Twoim sposobem kod powinien być taki:

  1. <?php
  2. while($resultat=mysql_fetch_assoc($zapytanie));
  3. {
  4. '
  5. <div id="szama">
  6. '.$resultat['data'].'<br>
  7. '.$resultat['opinia'].
  8. </div>
  9. }
  10. ?>
Fifi209
Zamiast mieszać z limitem lepiej chyba dać BETWEEN ...

W dodatku zobacz mysql_error" title="Zobacz w manualu PHP" target="_manual
liMp
Sprawdzałem wszystko dokładnie, zresztą gdy zrobię w ten sposób :
  1. <?php
  2. $zapytanie = mysql_query("SELECT * FROM rekordy LIMIT ".(($strona-1)*$rekordow_na_strone).','.$rekordow_na_strone);
  3. echo $resultat[3];
  4. while($resultat=mysql_fetch_array($zapytanie));
  5. {
  6. ?>


To echo poprawnie wyświetla odpowiednie dane z rekordu, więc wina zapytania wydaje mi się ,że nie jest. Linijka niżej i już pustka..

Kasyx

No wiem wiem tak wynika z kodu, źle opisałem już się poprawiłem smile.gif.
Wpierw pobieram bez limitu ,żeby poprawnie wyliczył num_rows, a drugi raz dla poprawnego porcjowania danych.
Niestety Twój kod nic nie zmienia sad.gif.
Co najgorsze wykasuję te pierwsze fetch_array wraz z zmiennymi niżej i funkcją utnij i dalej jest bez zmian...

fify2009 mysql_error zwraca mi 0;
Kasyx
Jak chcesz pobrać tylko ilość rekordów to nie ma sensu wszystkich danych pobierać. O wiele szybciej zrobisz to tak:

  1. <?php
  2. $zapytanie = mysql_query('SELECT COUNT(*) FROM rekordy ');
  3. $resultat=mysql_fetch_array($zapytanie);
  4. $ile = $resultat[0]; //ta linia zbedna w zasadzie mozesz od razu $strony = ceil ($resultat[0] / $rekordow_na_strone);
  5. ?>
liMp
Otrzymuję taki komunikat

Warning: Division by zero in c:\usr\krasnal\www\wiem\index2.php on line 40
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\usr\krasnal\www\wiem\index2.php on line 44


linia 40
  1. <?php
  2. $strony = ceil ($resultat[0] / $rekordow_na_strone);
  3. ?>


linia 44
  1. <?php
  2. while($resultat=mysql_fetch_array($zapytanie));
  3. ?>



To pobieranie ilości rekordów to i tak nic, bo najważniejsze dla mnie jest poprawne wyświetlanie czego dalej niestety nie robi sad.gif
fander
Kod
<?php
   $strona = 10;
   $rekordow_na_strone = 5;
  
   mysql_connect('localhost','user','pass');
   mysql_select_db('baza');
  
   $zapytanie = 'SELECT * FROM rekordy LIMIT '.(($strona-1)*$rekordow_na_strone).','.$rekordow_na_strone;
  
   $zapytanie = mysql_query($zapytanie);
  
   while($r = mysql_fetch_array($zapytanie)){
       echo '<div>'.$r[2].'</div>';
   }
  
   ?>


Zobaczy czy taki kod ci zadziałaoczywiście pozmieniaj sobie dane do połączenia z bazą
Fifi209
Mi nasuwa się pytanie czemu posługując się: mysql_fetch_array" title="Zobacz w manualu PHP" target="_manual
Robicie coś na miarę tego:
  1. <?php
  2. while($r = mysql_fetch_array($zapytanie)){
  3.     echo '<div>'.$r[2].'</p>';
  4. }
  5. ?>


Po 1. Lepiej użyć mysql_fetch_assoc" title="Zobacz w manualu PHP" target="_manual po drugie macie ładną tablicę...
$handle['nazwapola']
etc.

Co do

Cytat(Kasyx @ 29.07.2009, 13:53:16 ) *
Jak chcesz pobrać tylko ilość rekordów to nie ma sensu wszystkich danych pobierać. O wiele szybciej zrobisz to tak:

  1. <?php
  2. $zapytanie = mysql_query('SELECT COUNT(*) FROM rekordy ');
  3. $resultat=mysql_fetch_array($zapytanie);
  4. $ile = $resultat[0]; //ta linia zbedna w zasadzie mozesz od razu $strony = ceil ($resultat[0] / $rekordow_na_strone);
  5. ?>


Zgadzam się, aczkolwiek ja dodałbym po count(*) as count lub ilosc czy jak tam kto chce.

Cytat(fander @ 29.07.2009, 14:10:21 ) *
Kod
  $zapytanie = 'SELECT * FROM rekordy LIMIT '.(($strona-1)*$rekordow_na_strone).','.$rekordow_na_strone;


Mówiłem wcześniej o BETWEEN, w dodatku używaj poprawnego bbcode.
liMp
O ja niemogeeeeeeeeeee sciana.gif

while($resultat=mysql_fetch_array($zapytanie));
{
echo
'
<div id="szama">
'.$data.'<br>
'.$opinia.
</div>
}


Cholerny ";"... już działa.. przez php kiedyś osiwieje... przepraszam Wszystkich i wielkie dzięki za pomoc.
Fifi209
Cytat(liMp @ 29.07.2009, 14:15:22 ) *
O ja niemogeeeeeeeeeee sciana.gif

while($resultat=mysql_fetch_array($zapytanie));
{
echo
'
<div id="szama">
'.$data.'<br>
'.$opinia.
</div>
}
Cholerny ";"... już działa.. przez php kiedyś osiwieje... przepraszam Wszystkich i wielkie dzięki za pomoc.


Co nie znaczy, że masz zostawić skrypt w tak beznadziejnej postaci.
Po 1. Edytuj zapytania tak jak doradzałem z kolegą.
Po 2. Przebuduj ten skrypt bo wygląda i tak okropnie.
Po 3. Włącz sobie wyświetlanie błędów.
Kofel
Cytat(fifi209 @ 29.07.2009, 15:14:58 ) *
Zgadzam się, aczkolwiek ja dodałbym po count(*) as count lub ilosc czy jak tam kto chce.

Po co? ;s
Jak już to SELECT count( jakieś_pole ) FROM blabla; potem dostęp do tego: $result[0];
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.