« 1 2 »
Autor Zpráva
Pavel Vodnář
Profil *
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 *
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
Ne někde výše, ale na tom samém řádku. Ten je nejspíš uvnitř nějakého cyklu.
Kajman_
Profil *
Neincludujete tenhle soubor vícekrát?
Pavel Vodnář
Profil *
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 *
Kajman:
Právě že Neincluduji
Pavel Vodnář
Profil *
Dá se to opravit jinak?
petr 6
Profil
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 *
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'>&lt;&lt;</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)."'>&lt;</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)."'>&gt;</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)."'>&gt;&gt;</a>";  //řádek 146
    }  

}

Maringotka
Profil *
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
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
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 *
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
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 *
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
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
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
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 *
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 *
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
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 *
Dobrá - tabulku jsem prokontroloval, údeje sedí

když vypíšu
echo $by;
vypíše mi to 0 je to ta chyba? Děkuji
Pavel Vodnář
Profil *
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 *
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
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 *
jenikkozak:
Vy víte co je v kódu špatně?
Petr__
Profil *
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 *
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);  
pak to nehlásí chyby, ale proč se mi potom na stránku nevypíše vůbec nic?
Pavel Vodnář
Profil *
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 *
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...
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0