| 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