Autor | Zpráva | ||
---|---|---|---|
Trickle Profil |
Ahoj
Prosil bych o rady. Pro někoho to bude asi prkotina. Mám kód pro výpis novinek a následně i stránkování. První problém je když mám v DB méně novinek než co udám v rows (třeba rows"10" ale novinek mám v DB jen 5) tak se skript zblázní a nic nevykonává.Prosím jak to lze ošetřit? A druhá věc je když se tvoří poslední odkaz Konec. Mám v DB třeba 6 novinek tak jak lze vyčíst z kódu zobrazuje se prázdná stránka s pořadovým číslem 7. Za případné rady Děkuji a přidávám i kód: <?php define ("ROWS",2 ); if (!isset($_GET["celkem"])) { $vysledek=mysql_query("select count(*) as pocet from clanky"); $zaznam=mysql_fetch_array($vysledek); $celkem=$zaznam["pocet"]; } else { $celkem=$_GET["celkem"]; } if ($celkem>ROWS) { if (!isset($_GET["od"])) $od=1; else $od=$_GET["od"]; $vysledek=mysql_query("select * from clanky order by id desc"." limit ".($od-1).", ".ROWS); while ($zaznam=@MySQL_Fetch_Array($vysledek)){ echo "<table>"; echo "<tr><b>".$zaznam["titulek"]."</b></tr>"; echo "<td>".$zaznam["text"]."</td>"; echo "</table>"; } if ($od==1) echo ""; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=1\">Začátek</a> | "; if ($od<ROWS) echo ""; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od-ROWS)."\">Předchozí</a> | "; if ($od+ROWS>$celkem) echo ""; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od+ROWS)."\">Následující</a> | "; if ($od>$celkem-ROWS) echo "<BR>"; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($celkem-$celkem%ROWS+1)."\">Konec</a><BR>"; } ?> Zkoušel jsem něco v tom smyslu že : if ($od>$celkem-ROWS) echo "<BR>"; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$konecnylimit=$celkem%ROWS==0?$celkem-ROWS+1:$celkem-$celkem%ROWS+1 \">Konec</a><BR>"; } |
||
tiso Profil |
#2 · Zasláno: 28. 10. 2015, 15:50:27
Tento skript zo stránky PHP (39) - Zobrazujeme a stránkujeme data obsahuje chyby, riešenie nájdeš v diskusii pod ním.
|
||
Alphard Profil |
// Tohle je trochu duplicita, ale navrhuji myslím lepší řešení, tak už to pošlu.
Poznávám kód ze seriálu o PHP na linuxsoftu, tento konkrétní díl se zvlášť nepovedl :-) U té podmínky na 15. řádku chybí else větev, která vypíše výsledky, pokud jich je méně než limit (v komentářích u daného dílu je to napsané od roku 2006). Já bych doporučoval ten script aspoň trochu přeorganizovat: $query = "select * from clanky order by id desc"; if ($celkem>ROWS) { if (!isset($_GET["od"])) $od=1; else $od=$_GET["od"]; $query .= " limit ".($od-1).", ".ROWS; } $vysledek=mysql_query($query); while ($zaznam=MySQL_Fetch_Array($vysledek)) { echo "<table>"; echo "<tr><b>".$zaznam["titulek"]."</b></tr>"; echo "<td>".$zaznam["text"]."</td>"; echo "</table>"; } Důležité je, že takhle se nebude duplikovat celý select dotaz a výpis výsledků. |
||
Trickle Profil |
#4 · Zasláno: 28. 10. 2015, 16:18:46
Alphard:
Děkuji ale pořád mám černou obrazovku:-D. Komentáře jsem samo sebou četl zkoušel jsem tam to else dopsat ale píše mi to chybu syntax error neočekávané else. |
||
Alphard Profil |
#5 · Zasláno: 28. 10. 2015, 16:26:16
Vzhledem k tomu, že váš kód nevidíme, je to, jako byste [#4] vůbec nenapsal...
|
||
Trickle Profil |
Alphard:
<?php $query=""; $celkem=""; $od=""; define ("ROWS",10 ); if (!isset($_GET["celkem"])) { $vysledek=mysql_query("select count(*) as pocet from clanky"); $zaznam=mysql_fetch_array($vysledek); $celkem=$zaznam["pocet"]; } else { $query = "select * from clanky order by id desc"; if ($celkem>ROWS) else { if(mysql_num_rows($vysledek) > 0) { $vysledek = mysql_fetch_object($vysledek); $rows = $vysledek->rows; } } if (!isset($_GET["od"])) $od=1; else $od=$_GET["od"]; $query .= " limit ".($od-1).", ".ROWS; $vysledek=mysql_query($query); while ($zaznam=MySQL_Fetch_Array($vysledek)) { echo "<table>"; echo "<tr><b>".$zaznam["titulek"]."</b></tr>\n"; echo "<td>".$zaznam["text"]."</td>"; echo "</table>"; } if ($od==1) echo ""; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=1\">Začátek</a> | "; if ($od<ROWS) echo ""; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od-ROWS)."\">Předchozí</a> | "; if ($od+ROWS>$celkem) echo ""; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od+ROWS)."\">Následující</a> | "; if ($od>$celkem-ROWS) echo "<BR>"; else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($celkem-$celkem%ROWS+1)."\">Konec</a><BR>"; } ?> Byl to boj ale dotáhl jsem to do zdárného konce. |
||
Časová prodleva: 4 dny
|
|||
Trickle Profil |
#7 · Zasláno: 1. 11. 2015, 14:52:45
Mám ještě jeden dotaz ohledně kodu
define ("ROWS" 10); . Chci ovládat počet článků přes administraci. Jak zakomponovat proměnou do define takto? define ("ROWS",$zaznam["pocet_clanku"]);
děkuji za odpovědi. |
||
Fisir Profil |
#8 · Zasláno: 1. 11. 2015, 15:03:44
Reaguji na Trickle:
Brání ti něco v tom, abys to vyzkoušel? |
||
Dan Charousek Profil |
#9 · Zasláno: 1. 11. 2015, 15:06:03
Trickle:
define ("ROWS" 10); vytváří konstantu ROWS s hodnotou 10. Už podle toho jména (konstanta) je jasné, že by její hodnota měla být neměnná, tudíž do ní nemůžeš uložit proměnný obsah z proměnné. Místo konstanty použij klasickou proměnnou:
$pocetRadku = $zaznam["pocet_clanku"]; ROWS na řádcích 17, 28, 45, 48, 51 dej $pocetRadku
|
||
Trickle Profil |
Fisir:
Zkoušel jsem to ale nereaguje. Díky za postřeh. Dan Charousek: Super díky. |
||
Alphard Profil |
#11 · Zasláno: 1. 11. 2015, 15:34:04
Dan Charousek:
„ define ("ROWS" 10); vytváří konstantu ROWS (...) tudíž do ní nemůžeš uložit proměnný obsah z proměnné“
Technicky může, není to vůbec žádný problém*. Zápis define("ROWS", $zaznam["pocet_clanku"]); *Možná si to pleteš s „třídními“ konstantami const . Ty jsou vyhodnocované během parsování a lze do nich vyhodnotit pouze konstantní výrazy. define se vykonává v run-time fázi a proměnné tedy nejsou problém. Konstantní jsou až po svém vytvoření (i když ani to není úplně pravda).
Trickle: Rozhodně souhlasím s tím, že řešení [#9] Dan Charousek je lepší. |
||
Časová prodleva: 9 let
|
0