Autor Zpráva
Martin011
Profil
Ahoj, už jsem na toto téma základal příspěvek-php stránkování. Řešili jsme to i se „SvvimX“,ale mám s tím menší problém. Díval jsem se, jak to mají vyřešené na linuxsoft.cz, ale píše mi to tuhle chybu:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/m/martins-web/soubory/zaj.php on line 8

skript je zde:


<?php

  define ("ROWS", 50);
mysql_connect("server", "db", "heslo");
mysql_select_db("db-jmeno");
$vysledek=mysql_query("select * from psc");
while ($zaznam=MySQL_Fetch_Array($vysledek)) echo $zaznam["obec"]." ".$zaznam["psc"]."<BR>\n"; Toto je to místo chybu

if (!isset($_GET["celkem"])) 
  {
    $vysledek=mysql_query("select count(*) as pocet from psc");
    $ret=("SELECT * FROM ucast WHERE jmeno like '$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 psc"." limit ".($od-1).", ".ROWS);
      echo "Záznamů: ".$od."-";
    echo (($od+ROWS-1)<=$celkem)?($od+ROWS-1):$celkem;
    echo " z celkem $celkem&nbsp;&nbsp;&nbsp;";
   
       if ($od==1) echo "Začátek&nbsp;|&nbsp;"; 
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=1\">Začátek</a>&nbsp;|&nbsp;";
     
       if ($od<ROWS) echo "Předchozí&nbsp;|&nbsp;"; 
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od-ROWS)."\">Předchozí</a>&nbsp;|&nbsp;";
  
       if ($od+ROWS>$celkem) echo "Následující&nbsp;|&nbsp;"; 
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($od+ROWS)."\">Následující</a>&nbsp;|&nbsp;";
    
  if ($od>$celkem-ROWS) echo "Konec&nbsp;<BR>"; 
      else echo "<a href=\"".$_SERVER["PHP_SELF"]."?celkem=$celkem&od=".($celkem-$celkem%ROWS+1)."\">Konec</a><BR>";
  }


 
  
?>


Budu vděčný za jakoukoliv radu. Díky předem.



A když už jsme u toho, tak ještě tu mám jeden problém se stránkováním. Udělal jsem to přesně, jak mi „SvvimX“ řekl,ale píše mi to parse error. Kód je zde:

<?php
mysql_connect("server", "db-jmeno", "heslo");
mysql_select_db("db");


if(isset($_GET['strana'])){ 

  $strana = is_numeric($_GET['strana'])? $_GET['strana']:1;
}
else $strana = 1;

$pocetradku = mysql_result(mysql_query("SELECT COUNT(*) from diskuze "), 0);
if ($pocetradku>0) { // pokud nějaké jsou -> nezbytné výpočty, mysql dotaz, stránkování, jinak nic
  $pocet = 1;
  $od = ($strana-1) * $pocet;
  $limit = "limit $od, $pocet";
  $cl=mysql_query("SELECT * FROM diskuze $limit;");
  strankovani($pocet, 3, "http://www.neco.wz.cz/index.php?str=zaj&strana=1", $strana, $pocetradku);

function strankovani($pocet_radek, $okolo, $url, $strana, $celkem_radek){
  if ($celkem_radek>$pocet_radek){
    echo "<p class='pages'>";
    if ($strana == 1) {
      echo "Začátek&nbsp;|&nbsp;";
      echo "Předchozí&nbsp;|&nbsp;";
    }
    else {
      echo "<a href=\"".$url."1/\">Začátek</a>&nbsp;|&nbsp;";
      echo "<a href=\"".$url."".($strana-1)."/\">Předchozí</a>&nbsp;|&nbsp;";
    }

    for($i = $okolo; $i > 0; $i--){
      if(($strana-$i)>0) echo "<a href=\"".($url).($strana-$i)."/\">".($strana-$i)."</a>&nbsp;|&nbsp;";;
    }

    echo $strana."&nbsp;|&nbsp;";
    $posledni_strana = ceil($celkem_radek/$pocet_radek);

    for($i = 1; $i <= $okolo; $i++){
      if(($strana+$i)<=$posledni_strana) echo "<a href=\"".($url).($strana+$i)."/\">".($strana+$i)."</a>&nbsp;|&nbsp;";
    }

    if ($posledni_strana == $strana) {
      echo "Následující&nbsp;|&nbsp;";
      echo "Konec";
    }
    else {
      echo "<a href=\"".$url.($strana+1)."/\">Následující</a>&nbsp;|&nbsp;";
      echo "<a href=\"".$url.$posledni_strana."/\">Konec</a>";
    }
    echo "</p>";
  } Tady to hlásí parse error
}
?>
AM_
Profil
supplied argument is not a valid MySQL result resource
viz FAQ

ale píše mi to parse error
Stáhni si nějaký editor se zvýrazněním syntaxe (já preferuji PSPad) a hned uvidíš.
Martin011
Profil
takže co tam mám nahradit místo mysql_fetch_array? Zkoušel jsem něco v tomto smyslu:
$ret=("SELECT * FROM ucast WHERE jmeno like '$vysledek' "); 
. Moc bych to potřeboval, kdyby to fungovalo. Prosím napište mi, co tam přijde.

Dobře a PsPad ihned vyzkouším. Používal jsem ho už předtím, ale nějak jsem od toho opustil. A ten samotný program umí nacházet chyby nebo jak jsi to myslel?
Smokie
Profil
Martin011
ale ten while je v pořádku, špatně je napsaný ten dotaz na databázi. radil bych udělat si ukončení (die) v případě, že se ten skript nepřipojí k DB. Takže zkontroluješ jestli se k databázi skutečně připojíš a potom osekej ten dotaz co nejvíc podle manuálu http://cz2.php.net/manual/en/function.mysql-query.php
AM_
Profil
Martin011
PSPad zvýrazní syntaxi (řetězce jednou barvou, funkce jinou, klíčová slova tučně atd...), takže když budeš mít kus kódu podbarvený jako řetězec, zřejmě jsi zapomněl uvozovku. Také při najetí na závorku zvýrazní její párovou závorku, takže vidíš, kde ti to nesedí.

co se týče toho mysql - ve faq je to dost jasně popsané, a nevšiml jsem si, že by tam bylo něco o nahrazení mysql_fetch_array. Chyba je v dotazu a musíš si vypsat mysql_error
Martin011
Profil
díky za radu, ten PsPad funguje a našel jsem chybu, chyba byla v závorce u 2.příkladu, co jsem uváděl. Teď mi to už nic nepíše, ale nic se mi také nezobrazuje.
Alphard
Profil
Martin011:
Teď mi to už nic nepíše, ale nic se mi také nezobrazuje.
Asi tam bude nějaké chyba. Byl dotaz na databázi úspěšný? Pokud ano, vrátil nějaké řádky? Pokud ne, co říká mysql_error()? Předávají se správně proměnné? Atd.
Martin011
Profil
mě spíše zajímá ten druhý příklad, co jsem uváděl.
Opravil jsem tam závorku, ale nic se mi nezobrazilo.
Je tam ještě nějaká chyba v tom druhém příkladě?
Na stránce mi to nic nepíše, ale žádné stránkování se nezobrazí.
AM_
Profil
Martin011
zkoušel jsi nějaký debugging? tj vypiš si klíčové proměnné, zjisti, kudy program prochází atd...
Pokud se do zdrojáku nevypíše vůbec nic, znamená to, že program zřejmě ani neprojde podmínkou
 if ($celkem_radek>$pocet_radek)
, kterou zjevně hodnotí jako false.

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: