Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z wyświetlaniem danych z bazy
liMp
post
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 22.03.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
liMp
post
Post #3





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 22.03.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
tmka
post
Post #4





Grupa: Zarejestrowani
Postów: 27
Pomógł: 9
Dołączył: 9.02.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kasyx
post
Post #5





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 29.04.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Fifi209
post
Post #6





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Zamiast mieszać z limitem lepiej chyba dać BETWEEN ...

W dodatku zobacz mysql_error" title="Zobacz w manualu PHP" target="_manual


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
liMp
post
Post #7





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 22.03.2007

Ostrzeżenie: (0%)
-----


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;

Ten post edytował liMp 29.07.2009, 13:43:44
Go to the top of the page
+Quote Post
Kasyx
post
Post #8





Grupa: Zarejestrowani
Postów: 45
Pomógł: 7
Dołączył: 29.04.2009
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował Kasyx 29.07.2009, 13:54:57
Go to the top of the page
+Quote Post
liMp
post
Post #9





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 22.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
fander
post
Post #10





Grupa: Zarejestrowani
Postów: 231
Pomógł: 22
Dołączył: 6.10.2008

Ostrzeżenie: (0%)
-----


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ą

Ten post edytował fander 29.07.2009, 14:14:56
Go to the top of the page
+Quote Post
Fifi209
post
Post #11





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
liMp
post
Post #12





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 22.03.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Fifi209
post
Post #13





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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.

Ten post edytował fifi209 29.07.2009, 14:17:18


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
Kofel
post
Post #14





Grupa: Zarejestrowani
Postów: 99
Pomógł: 22
Dołączył: 14.12.2007
Skąd: Wyszków

Ostrzeżenie: (0%)
-----


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];
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 05:24