Súgó - Keresés - Tagok - Naptár
Teljes változat: Rekordok kiíratása táblából
PC WORLD Segélyvonal > WEBSAROK > Webszerkesztés, programozás > PHP
google
Sajnos nekem meggyűlt a bajom ezzel. Pedig rém egyszerű script, de valamiért nem működik úgy, ahogy kellene. Megszámolja a rekordokat egy táblában, majd kiíratja őket, de 1 oldalra csak 1 darabot belőle. Létrehoz linkeket, amelyekkel vissza, tovább, illetve az adott számú oldalra lehet ugrani.

KÓD
$szam = "SELECT * FROM munkak";
     $res = mysql_query($szam,$kapcsolat);
     $sorszam = mysql_num_rows($res);
     $limit = 1;
     
   if(empty($lap))
   {
   $lap = 1;
   }
   
     $limitval = $lap * $limit - ($limit);
     $qu = "SELECT * FROM munkak LIMIT $limitval, $limit";
     $result = mysql_query($qu,$kapcsolat) or die ("Nem sikerült a lekérdezés!");
     
   if(mysql_num_rows($result) == 0 )
   {
   echo "Nincs munka az adatbázisban.";
   }
   
     while($sorez = mysql_fetch_assoc($result))
     {
     //kiíratások stb.
     }
     
   if($lap != 1)
   {
   $lapprev = $lap-1;
   echo "<a href='websites.php?lap=$lapprev'>Előző</a>";
   }
   else
   {
   echo "Előző";
   }
     
     for($i=1; $i<=$sorszam; $i++)
     {
     if($i == $lap)
   {
   echo $i." ";
   }
   else
   {
   echo "<a href='websites.php?lap=$i'>$i</a>";
   }
     }
     
     if(($sorszam - ($limit * $lap))>0)
     {
     $lapkov = $lap+1;
     echo "<a href='websites.php?lap=$lapkov'>Következő</a>";
     }
     else
     {
     echo "Következő";
     }


Ehelyett azt csinálja, hogy fogja a legelső rekordot és kiírja, és hiába ugrálok tovább, ugyanazt a rekordot írja ki mindig, illetve az előző feliratból nem csinál linket. annoyed.gif question.gif
ocsi
A scriptnek csak az első néhány sorát olvastam el. Tanácstalan vagyok, mivel még soha sem használtam a LIMIT SQL parancsot.... Viszont nem értem, hogy te miért teszed ezt?

1.lépésben lekérdezed az egész táblát, csak azért hogy megszámold a sorokat. Erre elég lenne csak 1 'oszlopot' lekérdezni....

Majd a 2. lépésben újra lekérdezel egy olyan sort, amit már egyszer lekértél.. Fölösegesen terheled az SQL szervert.

Ahogy én csinálom:
Lekérdezek mindent ( ahogy te az első lépésben)
és a mysql_data_seek -el pozícionálok.
( ez ugyan úgy működik mint a mysql_fetch_array csak egy számmal tudsz lépkedni benne)
És így kiválasztod a neked kellő sort!

( a többit most nincs energiám átnézni...)
google
A limit nagyon hasznos dolog, sokat használom. biggrin.gif

Ámde. Már többféle megoldást próbáltam a sorszámozásra. Egyik sem akar működni. annoyed.gif
Ha lesz energiád ( ani_wink.gif ), akkor megtennéd nekem, hogy beidézel egy olyan scriptet, ami működik is? Egy tábla rekordjait íratja ki, de minden oldalra csak egyet, a további oldalakat "virtuálisan" hozza létre.
ocsi
A kódodban nem találtam hibát, de én ilyet még nem használtam:
IDÉZET
    if(empty($lap))
   {
   $lap = 1;
   }

Próbáld meg így:
IDÉZET
if($lap ==0)
{$lap=1;}


Ha így sem műküdik akkor nem tudom hol lehet a hiba....
google
Az empty az ugyanazt csinálja. Azért megpróbálom, jó volna, ha így működne... roll.gif
ocsi
Próbáljuk meg megkeresni a hiba helyét:
Próbáld meg ezt a címet:
websites.php?lap=2

Ha itt is az első lapot hozza ki akkor az oldal felépítésénél van a gond, ha nem akkor a navigációnál...
google
Persze, már próbáltam. A lap kijön (sőt, még a 6-os, 126-os is, ami az adatbázis alapján nem is létezhet...), az eredmény ugyanaz: első rekord kiíratva, előző link nincs.
ocsi
Szúrd be a while ciklus elé hogy:

IDÉZET
print $limit;
print $limitval;
print $lap


és még ami van változó( mármint olyan amit használsz, és nem olyan ami a MYSQL hez kell)

Így próbálunk debugg olni...
Kovács Dávid ( Davs )
A limit mire való?

Lehet, hogy pont erre, de én a mysql_fetch_rows-t szoktam használni a queryk kiírására...Így egy tömböt kapunk(ha jól emléákszem...Már nem is tudom, hogy mikor web-programztam utoljára...)

$res=mysql_query(query) ;
$x=mysql_fetch_row($res) ;
google
A limit azt szabja meg, hogy a lekérdezett rekordok közül hányat íratunk ki, bővített formájában (1, 1) pedig azt, hogy - jelen esetben - a másodiktól indulunk, és egyet írunk ki.
Én asszociatív tömböt használok (az is egy tömb), de nem a tömbnél van a bibi, hanem a $lap változónál. Valamiért annak minding 1 az értéke. annoyed.gif
ocsi
Próbaképpen csináld meg ezt:
IDÉZET
if(empty($lap))
  {
  $lap = 2;
  }


Mert én csak arra tudok gondolni hogy itt a bibi. Ha az így kapott eredmény ugyanaz mint eddig, csak a 2. lapal... akkor meg van a bibi
Ez a tartalom egy lebutítottváltozata. A teljes változat képekkel kiegészült megtekintéséhez kérünk, kattints ide.