| 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: 10 let
|
|||
0