Autor Zpráva
Adam501
Profil
Ahoj. Potřebuji na svých stránkách udělat stránkování z mysql pomocí php, tak jsem prohledal toto fórum a našel jsem kód, který jsem i poměrně chápal.
Jenže u tohoto řádku:
 if ( $_GET['strana'] > 1 ) {echo "<a href=\"vypis.php?strana=".$_GET['strana']-1."\">&lt;</a>";}


Vypisuje chybu:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in /3w/wz.cz/v/vkmadeta/NEW/jnovinky.php on line 55

Nejdříve jsem to letmo přeložil, že mám někde neescapovanou uvozovku, ale je tam poněkud jiné slovo. V tématu z kterého jsem to kopíroval tazatel píše, že kód mu funguje. Nevíte kam se vloudila chybička? Díky
Joker
Profil
Adam501:
Nejspíš chybí středník o řádek výš.
Adam501
Profil
Joker:
To právě nikde nechybí.
$pocet = $pocet / $clanku_na_stranku;

  if ( $_GET['strana'] > 1 ) {echo "<a href=\"vypis.php?strana=".$_GET['strana']-1."\">&lt;</a>";}
Str4wberry
Profil
Neměla by spíš ta matematická operace $_GET['strana']-1 být třeba v závorkách?
peta
Profil
Str4wberry: Taky si myslim :)
Adam501 php kod muzes rozdelit na vic radku. Ta chyba rika, ze je problem v neukoncemen retezci. Na kterem radku ti to skonci po uprave? Mozna ti to prijde jako hloupy zpusob, ale uz jsem par chyb takto odhalil.
if (
 $_GET['strana'] 
> 
1
 )
 {
echo 
"<a href=\"vypis.php?strana="
. // s tou teckou si ted nejdem uplne jisty, zda muze byt na radku samostatne
$_GET['strana']
- // podobne znamenko
1
.
"\">&lt;</a>";
}

"V tématu z kterého jsem to kopíroval tazatel píše, že kód mu funguje. "
Dej odkaz na tema? Je mozne, ze jsi to upravoval nebo je problem na jinem radku.
Adam501
Profil
Str4wberry, peta:
Ano. Problém byl v závorkách u výpočtu. Použil jsem rady z této stránky: stránky konkrétně [#7] Louka a [#8] Louka.

A teď se mi ale vykytl další problém. Mám v tabulce dva záznamy a protože jsem chtěl to stránkování otestovat, dal jsem do proměnné clanku_na_stranku hodnotu 1. Sice se zobrazí pouze 1 clanek na stránku, ale místo dvou odkazů na stránky 1 a 2 se zobrazí 8 odkazů(1,2,3....). Stará se o toto funkce for
for ($i = 1; $i <= $pocets; $i++ ) 
{
  echo '<a href="jnovinky.php?strana='.$i.'">'.$i.'</a>';
}


Nevíte jak to upravit, aby se vypisovalo tolik stránek, kolik je třeba?
Str4wberry
Profil
Zřejmě hodnota proměnné $pocets neodpovídá podílu všech článků a článků na stránku.
Adam501
Profil
Str4wberry:
Měly by odpovídat. Je to zase kopírované ->
$pocet = mysql_query("select count(*) from clanky WHERE `kategorie` = 'jky'");
  
  $pocets = $pocet / $clanku_na_stranku;
Tori
Profil
Adam501:
Chybí mysql_result nebo obdobná funkce. (Když si vypíšete
var_dump($pocet);
, tak uvidíte nejspíš "resource(8) of type (mysql result)", což se pak přetypuje na celé číslo 8.)
edit: Zvýrazněna odpověď.
Adam501
Profil
Tori:
No a jak to opravit, aby se vypisovalo tolik, kolik má?
Adam501
Profil
No, nevím co to má přesně dělat. Ale teď to vypisuje:
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 1 on MySQL result index 6 in /3w/wz.cz/v/vkmadeta/NEW/jnovinky.php on line 40

Ano. Vypisuje to "resource(8) of type (mysql result)".

A zapsnáno mám:
if (!$vysledek) {
    die('Could not query:' . mysql_error());
}
echo mysql_result($vysledek, 1);
Tori
Profil
Adam501:
Řádky jsou číslované od nuly.
$result = mysql_query("select count(*) from clanky WHERE `kategorie` = 'jky'");
$pocet = mysql_result($result, 0);
Adam501
Profil
Áha. Takže to vypíše počet řádků? Dalo by se tedy použít i mysql_num_rows?

EDIT: Vyzkoušeno. Jde to.
Joker
Profil
Adam501:
Dalo by se tedy použít i mysql_num_rows?
Dalo, ale když jde jen o počet řádků, je efektivnější nechat databázi spočítat řádky a vrátit číslo, než nechat databázi vybrat a vrátit všechny řádky a pak počítat kolik jich je.
Funkce mysql_num_rows je užitečná v případě, kdy jsou potřeba i data z těch řádků, ale kromě toho ještě i informace kolik jich je.
peta
Profil
mysql_num_rows pouzivam pri listovani, kdyz vypisuji treba 30 radku a chci vedet, zda existuje jeste dalsi stranka. Tak pozadam sql o 31 radku, posledni radek pak smazu, ulozim si do promenne, ze dalsi stranka existuje a zobrazim 30 radku do tabulky.
Joker
Profil
peta:
Na to ani není potřeba mysql_num_rows, na to stačí prostě jen zkontrolovat, zda ten 31. řádek existuje.
Tori
Profil
peta:
Viz Joker, anebo používat SELECT SQL_CALC_FOUND_ROWS.
peta
Profil
Joker:
Ano, to je ale dalsi sql dotaz.
dotaz1 = SELECT ... 0,30
dotaz2 = SELECT ... 31
Kdezto elegantne vytahnu jednim dotazem data i informaci o 31 radku. Pak pres mysql_num_rows zjistim pocet a az pak z toho while+fetch skladam tabulku.
Joker
Profil
peta:
Není, je to jeden dotaz.

Algoritmus:
SELECT data FROM tabulky WHERE podmínky LIMIT (velikost stránky + 1)
Cyklus- dokud existuje další záznam a není plná stránka, vypiš záznam.
Za cyklem, pokud existuje další záznam, je další stránka.

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