Autor | Zpráva | ||
---|---|---|---|
Pavel Vodnář Profil * |
#1 · Zasláno: 11. 2. 2011, 12:48:52
Dobrý den, snažím se vytvořit stránkování, potřebuji pomoci jak dořešit chybky, děkuji vám
mám tento kód: $countQ = mysql_query("SELECT COUNT(*) as max FROM inzeraty"); if(mysql_num_rows($countQ) > 0) { $count = mysql_fetch_object($countQ); $max = $count->max; } //echo $max; // vypíše počet inzerátů define ("ON_PAGE", 5); function right_int($arg) { // řádek78 $arg = (int) $arg; if (is_numeric($arg)) { return $arg; } // v případě, že $arg neprojde kontrolou, bude naše $page 1 => začátek return 1; } if(!isset($_GET["page"])) $page = 1; else $page = right_int($_GET["page"]); píše mi to chybu: Fatal error: Cannot redeclare right_int() (previously declared in /var/www/web5/prochazeni-inzeratu.php:78) in /var/www/web5/prochazeni-inzeratu.php on line 78 Proč tato chyba? Děkuji Vám |
||
Maringotka Profil * |
#2 · Zasláno: 11. 2. 2011, 12:55:04
Funkce "right_int" už je definována někde výše... Píše to sama chyba, a dokonce i v jakém souboru.
|
||
xmark Profil |
#3 · Zasláno: 11. 2. 2011, 12:57:39
Ne někde výše, ale na tom samém řádku. Ten je nejspíš uvnitř nějakého cyklu.
|
||
Kajman_ Profil * |
#4 · Zasláno: 11. 2. 2011, 12:57:40
Neincludujete tenhle soubor vícekrát?
|
||
Pavel Vodnář Profil * |
#5 · Zasláno: 11. 2. 2011, 12:58:23
Právě že jsem tuto funkci "right_int" výše nedeklaroval - může to být něčím jiným? Děkuji
|
||
Pavel Vodnář Profil * |
#6 · Zasláno: 11. 2. 2011, 13:12:02
Kajman:
Právě že Neincluduji |
||
Pavel Vodnář Profil * |
#7 · Zasláno: 11. 2. 2011, 13:20:06
Dá se to opravit jinak?
|
||
petr 6 Profil |
#8 · Zasláno: 11. 2. 2011, 13:20:18
Moc nechápu, jak dotaz souvisí se stránkováním, ale budiž...
Pavel Vodnář: Podívejte se, co ta funkce dělá. Pokud ji nevyužijete jinak než jako v tom kusu kódu uvedeném v [#1], tak ji nepotřebujete. |
||
Pavel Vodnář Profil * |
#9 · Zasláno: 11. 2. 2011, 14:10:34
Celý kód stránkování vypadá takto:
Vypisuje mi to 3 chyby, na které nemůžu přijít: Nevíte jak na to?: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/web5/prochazeni-inzeratu.php on line 97 Warning: Division by zero in /var/www/web5/prochazeni-inzeratu.php on line 146 Fatal error: Cannot redeclare right_int() (previously declared in /var/www/web5/prochazeni-inzeratu.php:78) in /var/www/web5/prochazeni-inzeratu.php on line 78 //////////////// stránkování inzerátů $countQ = mysql_query("SELECT COUNT(*) as max FROM inzeraty"); if(mysql_num_rows($countQ) > 0) { $count = mysql_fetch_object($countQ); $max = $count->max; } //echo $max; define ("ON_PAGE", 5); function right_int($arg) { // řádek 78 $arg = (int) $arg; if (is_numeric($arg)) { return $arg; } // v případě, že $arg neprojde kontrolou, bude naše $page 1 => začátek return 1; } if(!isset($_GET["page"])) $page = 1; else $page = right_int($_GET["page"]); $by = ($on_page * ($page - 1)); $articles = mysql_query("SELECT id_inzeratu, box, nadpis, text, datum, zadavatel, picture, cas FROM inzeraty ORDER BY clanek DESC LIMIT ".ON_PAGE." OFFSET " . $by); if(mysql_num_rows($articles) > 0) { //97 while($article = mysql_fetch_object($articles)){ echo $article->inzeraty . "<br />"; /// řádek 99 } } if(ON_PAGE < $max){ // NA ZAČÁTEK // pokud nejsme na začátku, udělat odkaz na začátek... if($page > 1) { echo "<a href='prochazeni-inzeratu.php/?page=1'><<</a>"; } // PŘEDCHOZÍ // pokud nejsme na začátku, zobrazit odkaz na předchozí a cyklus na předchozí if($page > 1) { echo "<a href='prochazeni-inzeratu.php/?page=".($page-1)."'><</a>"; // PŘEDCHOZÍ - CYKLUS // vypíše 3 předchozí stránky for($i = 4; $i > 0; $i--) { if(($page - $i) >= 1){ echo "<a href='detail-inzeratu.php/?page=".($page-$i)."'>".($page-$i)."</a>"; } } } for($i = 4; $i > 0; $i--) if(($page - $i) >= 1) if($page < ($max / ON_PAGE)) { // DALŠÍ - CYKLUS // vypíše 3 následující stránky for($i = 1; $i < 4; $i++) { if(($page + $i) <= ceil($max / ON_PAGE)) { echo "<a href='prochazeni-inzeratu.php/?page=".($page+$i)."'>".($page+$i)."</a>"; } } // další echo "<a href='prochazeni-inzeratu.php/?page=".($page+1)."'>></a>"; } if(($page + $i) <= ceil($max / ON_PAGE)) // KONEC // pokud nejsme na konci, udělat odkaz na konec if($page < ceil($max / $on_page)) { echo "<a href='prochazeni-inzeratu.php/?page=".ceil($max / $on_page)."'>>></a>"; //řádek 146 } } |
||
Maringotka Profil * |
#10 · Zasláno: 11. 2. 2011, 14:19:19
if(mysql_num_rows($countQ) > 0) { nahraďte za if (mysql_result($countQ, 0) > 0) { Druhý warning znamená, že dělíš nulou - kde inicializujete proměnnou $page? No a třetí chybu jsme řešili výše... |
||
petr 6 Profil |
#11 · Zasláno: 11. 2. 2011, 14:20:55
Pavel Vodnář:
Takže znova: Fuknci right_int používáš zřejmě v celém kódu jen jednou, a sice na řádku 25 v [#1] Tudíž nahraď v kódu z příspěvku [#1] řádky 11 až 26 tímto: if(!isset($_GET["page"]) || !is_numeric($_GET["page"]) ) $page = 1; else $page = $_GET["page"]; Bude to dělat totéž, co před tím, jen nebudeš deklarovat zbytečnou funkci (tudíž ti to nebude vyhazovgat chybu o deklaraci, pokud nám stále něco z kódu netajíš). |
||
Neas Profil |
#12 · Zasláno: 11. 2. 2011, 14:23:18
kde je deklarovaná proměnná $on_page ? chyba "Division by zero" znamená, že dělíš nulou. Na řádku 146 dělíš proměnou $on_page, ketará nikde v kódu není deklarovaná.
funkce right_int() mi přijde nanejvíš zbytečná, neboť ji využíváš jen jednou. |
||
Pavel Vodnář Profil * |
#13 · Zasláno: 13. 2. 2011, 11:08:46
Opravím - li začátek kódu viz:
$countQ = mysql_query("SELECT COUNT(*) as max FROM inzeraty"); if(mysql_num_rows($countQ, 0) > 0) { $count = mysql_fetch_object($countQ); //řádek 69 $max = $count->max; } //echo $max; define ("ON_PAGE", 5); if(!isset($_GET["page"]) || !is_numeric($_GET["page"]) ) $page = 1; else $page = $_GET["page"]; $by = ($on_page * ($page - 1)); $articles = mysql_query("SELECT id_inzeratu, box, nadpis, text, datum, zadavatel, picture, cas FROM inzeraty ORDER BY clanek DESC LIMIT ".ON_PAGE." OFFSET " . $by); if(mysql_num_rows($articles) > 0) { while($article = mysql_fetch_object($articles)){ // řádek 87 echo $article->inzeraty . "<br />"; } } stále se dostávám do chybových hlášení: Warning: Wrong parameter count for mysql_num_rows() in /var/www/web5/prochazeni-inzeratu.php on line 69 Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/web5/prochazeni-inzeratu.php on line 87 jak opravit špatný parametr na řádku 69? proč není dodávaný argument platný a řádku 87? Děkuji |
||
pcmanik Profil |
#14 · Zasláno: 13. 2. 2011, 11:17:52 · Upravil/a: pcmanik
Tak za 1. na tomto riadku neni chyba $count = mysql_fetch_object($countQ); //řádek 69
Sa pozri co ti to aj pise v tych chybach. 69 - Naco preboha tahas z databazy count? a potom davas num rows? sak to ti potom vzdy vrati len jeden riadok..... Cize to prepis na if (mysql_result($countQ, 0) > 0) Najjednoduchsie by si to ale mal $pocet = mysql_fetch_array($countQ); if ($pocet['max'] > 0) echo $max; 87 - nemas dobre ten sql dotaz, spusti to na sql servery a pozri sa ci ti to vracia to co cakas |
||
Pavel Vodnář Profil * |
#15 · Zasláno: 14. 2. 2011, 07:59:15
Chyba z řádku 69 opravena, ale pořád se mi nedaří přijít na chybu z řádku 87, ještě jednou přidávám kód:
chyba z řádku 87 vypadá takto: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/web5/prochazeni-inzeratu.php on line 87 $countQ = mysql_query("SELECT COUNT(*) as max FROM inzeraty"); if(mysql_result($countQ, 0) > 0) { $count = mysql_fetch_object($countQ); //řádek 69 $max = $count->max; } //echo $max; define ("ON_PAGE", 5); if(!isset($_GET["page"]) || !is_numeric($_GET["page"]) ) $page = 1; else $page = $_GET["page"]; $by = ($on_page * ($page - 1)); $articles = mysql_query("SELECT id_inzeratu, box, nadpis, text, datum, zadavatel, picture, cas FROM inzeraty ORDER BY inzeraty DESC LIMIT ".ON_PAGE." OFFSET " . $by); if(mysql_num_rows($articles) > 0) { while($article = mysql_fetch_object($articles)){ // řádek 87 echo $article->inzeraty . "<br />"; } } Kde by mohla být ještě chyba? Díky |
||
panther Profil |
#16 · Zasláno: 14. 2. 2011, 11:46:35
Pavel Vodnář:
„Kde by mohla být ještě chyba?“ překvapivě na ř. 87. Vypiš si mysql_error(). Myslím, že bys měl začít trochu studovat. |
||
jenikkozak Profil |
#17 · Zasláno: 14. 2. 2011, 12:37:29 · Upravil/a: jenikkozak
panther:
„překvapivě na ř. 87.“ Chyba v podstatě je na řádku 84, kde je uveden SQL dotaz. „Myslím, že bys měl začít trochu studovat.“ To není dobré psát, protože Pavel v takovém případě ignoruje celý příspěvek, tudíž se ani nedoví, že by si měl nechat vypsat chybu... Pavle, víš o tom, že se na tebe zlobí víc lidí? |
||
panther Profil |
#18 · Zasláno: 14. 2. 2011, 12:54:56 · Upravil/a: panther
jenikkozak:
„To není dobré psát, protože Pavel v takovém případě ignoruje celý příspěvek“ to ale není můj problém. Dále to, prosím, nerozebírej - v tomto vlákně se má řešit něco jiného. K té chybě: je na ř. 87, ale způsobuje ji ř. 84. |
||
Pavel Vodnář Profil * |
#19 · Zasláno: 14. 2. 2011, 14:16:03
Děkuji, když se pokusím vypsat chybu:
echo mysql_error($by); echo mysql_error($articles); vypíše mi to chyby: Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in /var/www/web5/prochazeni-inzeratu.php on line 87 (jaký argument není platný z řádku 87?) Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/web5/prochazeni-inzeratu.php on line 88 (jaký počet není správný z řádku 88?) Díky |
||
Pavel Vodnář Profil * |
#20 · Zasláno: 14. 2. 2011, 14:21:54
jaká by mohla být chyba tohoto řádku?
$articles = mysql_query("SELECT id_inzeratu, box, nadpis, text, datum, zadavatel, picture, cas FROM inzeraty ORDER BY inzeraty DESC LIMIT ".ON_PAGE." OFFSET " . $by); díky |
||
xmark Profil |
#21 · Zasláno: 14. 2. 2011, 14:25:36
Pavel Vodnář:
„jaká by mohla být chyba tohoto řádku?“ Požadavek na neexistující tabulku nebo neexistující sloupec v tabulce, nečíselné ON_PAGE nebo $by. |
||
Pavel Vodnář Profil * |
#22 · Zasláno: 14. 2. 2011, 14:31:21
Dobrá - tabulku jsem prokontroloval, údeje sedí
když vypíšu echo $by; |
||
Pavel Vodnář Profil * |
#23 · Zasláno: 14. 2. 2011, 14:34:56
Vypsáním echo ON_PAGE; získám číslo 5 podle define ("ON_PAGE", 5); tak by ON_PAGE mělo pracovat dobře.
|
||
Pavel Vodnář Profil * |
#24 · Zasláno: 15. 2. 2011, 19:29:42
Proč to vypisuje chybu sql dotazu? překontroloval sem tabulku, ON_PAGE, i $by a všechno to vypisuje jak má nemůže být chyba v kódu v něčem jiném?
|
||
jenikkozak Profil |
#25 · Zasláno: 15. 2. 2011, 19:49:25
Pavel Vodnář:
Neopakuj své dotazy dokola. Když ti někdo bude chtít odpovědět, udělá to. Takhle si jen vlákno zapleveluješ a nikdo se v něm nebude chtít hrabat. |
||
Pavel Vodnář Profil * |
#26 · Zasláno: 15. 2. 2011, 19:52:11
jenikkozak:
Vy víte co je v kódu špatně? |
||
Petr__ Profil * |
#27 · Zasláno: 15. 2. 2011, 20:10:30
Pavel Vodnář:
Vážně máte v tabulce inzeraty sloupec nazvany inzeraty? ORDER BY inzeraty Řadit můžete podle sloupce, ne podle názvu tabulky. Ostatně už to zmínil [#21] xmark: Požadavek na neexistující tabulku nebo neexistující sloupec v tabulce, nečíselné ON_PAGE nebo $by. |
||
Pavel Vodnář Profil * |
#28 · Zasláno: 15. 2. 2011, 20:24:55
Petr_:
Nejspíše máte pravdu zkoušel sem dříve zapsat řádek takto: $articles = mysql_query("SELECT nadpis, text, datum, zadavatel FROM inzeraty ORDER BY id_inzeratu DESC LIMIT ".ON_PAGE." OFFSET " . $by); |
||
Pavel Vodnář Profil * |
#29 · Zasláno: 15. 2. 2011, 20:54:23
Petr__ díky
ok už to vypisuje, 5 inzerátů, ale teď mám problém, proč to nevypisuje to stránkování u #9 od řádku 39? |
||
Petr__ Profil * |
#30 · Zasláno: 15. 2. 2011, 21:04:09
Pavel Vodnář:
Problém je, že zjevně nemáte tušení co děláte a jen slepě lepíte kód dohromady. Ale poradím oklikou. Zkuste se podívat zde http://jonatan.spse.pilsedu.cz/doc/php-man/function.mysql-fetch-object.html a popřemýšlet co máte špatně. Souvisí to částečně s tím mým předchozím příspěvkem. Nevím kolik dalších chyb tam ještě je, a jaká je momentálně finální verze toho kódu (vycházím ze [#13]). Každopádně by to chtělo trošku vlastní invence a znát alespoň základy PHP a MySQL... |
||
Téma pokračuje na další straně.
|
0