Autor Zpráva
mone
Profil *
ahoj, potreboval bych pomoct s nize uvedenym skriptem. ma za ukol strankovani dotazu sql a uvedeni odkazu na starsi/novejsi clanky. je to delany podle www.interval.cz , kde je neco podobnyho, ale nefunguje to (odkazy nefungujou; kdyz normalne napisu do url ...&strana=xxx..., tak to vypise sparvny veci)


<?php
$zjisteni_poctu_clanku_celkem = MYSQL_QUERY ("SELECT id FROM clanky") OR DIE ($sql_chyba);
$pocet_clanku_celkem = MYSQL_NUM_ROWS ($zjisteni_poctu_clanku_celkem);

$pocet_clanku_na_strance = 2;

IF (!ISSET ($_GET['strana']))
{$vychozi_vypis = 0;}
ELSE
{$vychozi_vypis = $_GET['strana'] * $pocet_clanku_na_strance;}

$celkovy_pocet_stran = CEIL ($pocet_clanku_celkem / $pocet_clanku_na_strance);

IF ($strana != 0)
{$novejsi = "[<a href=\"index.php?ukaz=clanky&id=index&strana=".($strana - 1)."\">novější</a>]";}
ELSE
{$novejsi = "[novější]";}

IF ($celkovy_pocet_stran > $strana + 1)
{$starsi = "[<a href=\"index.php?ukaz=clanky&id=index&strana=".($strana + 1)."\">starší</a>]";}
ELSE
{$starsi = "[starší]";}

$ukaz_clanky = MYSQL_QUERY ("SELECT * FROM clanky ORDER BY id DESC LIMIT $vychozi_vypis, $pocet_clanku_na_strance") OR DIE ($sql_chyba);
$pocet_vybranych_clanku = MYSQL_NUM_ROWS ($ukaz_clanky);

ECHO "<p>".$starsi." ".$novejsi."</p>";
?>
llook
Profil
Co znamená "odkazy nefungujou"? Mohl bys to upřesnit?
Wan-To
Profil *
Pošli sem výsledek skriptu, protože v tom nevidím žádnou chybu...
Hugo
Profil
Problem by mohl byt v tady
IF ($strana != 0)
{$novejsi = "[<a href=\"index.php?ukaz=clanky&id=index&strana=".($strana - 1)."\">novější</a>]";}
ELSE
{$novejsi = "[novější]";}

Misto $strana bych pouzil $_GET['strana']
Lemur
Profil *
$zjisteni_poctu_clanku_celkem = MYSQL_QUERY ("SELECT id FROM clanky") OR DIE ($sql_chyba);
$pocet_clanku_celkem = MYSQL_NUM_ROWS ($zjisteni_poctu_clanku_celkem);

Tenhle kus kódu je neoptimální - donutí MySQL server udělat query úplně zbytečně a výsledek zahodit. Jsou jiné a lepší metody jak zjistit počet položek než tato. Pokud se zjišťuje počet všech položek, lze použít dotaz na kardinalitu (tj. mohutnost = počet prvků indexu), tedy "show indez from tabulka" a kouknout se do row["Cardinality"]. Pokud se musí brát v úvahu nějaká omezení a podmínky, musí se použít count místo selectu, tedy třeba "show count as pocet from tabulka where prvek=hodnota" a kouknout se do row["pocet"].

Použití $strana místo $_GET["strana"] (lépe $_REQUEST["strana"]) nebude fungovat, pokud jsou vypnuté register_globals. Na většině hostingů bývá bohužel zapnuto, ale defaultně je vypnuto, protože je to a) hnusnost jen kvůli kompatibilitě s PHP 3 a b) bezpečnostní díra jak vrata.
mone
Profil *
diky, zkusim to.
ilok: neplive to zadnou hlasku. funguje odkaz z defaultni strany (prvni vysledek limitu), pak uz ne a zobrazuje to tu samou stranu, i kdyz klikam jak blazen.
Toto téma je uzamčeno. Odpověď nelze zaslat.