Autor Zpráva
Ruda
Profil
Zdary. Nenašel by se někdo kdo mi poradí kde dělám chybu. Tenhle script používám na svý stránce na stránkování článků. Teď jsem ho chtěl upravit aby tahal z databáze jen články s určitý kategorie, ale nějak to nemůžu rozchodit. Pořád to vypisuje všechny články. Předem dík za radu.
Ruda
Profil
Bože já sem jalovice.Tady je ten script

<?php
require_once "spojeni.php"; //pripojeni k db
mysql_query("SET NAMES 'utf8'") or die('Could not set names');

$radku = mysql_num_rows(mysql_query("SELECT id FROM clanky WHERE kategorie='".($_GET["id"]."'")));
$po = 5; /* počet řádků na stránku */
$max_stranek = ceil($radku / $po); /* počet stránek */
$url_stranka = ($_GET["stranka"] / $po) + 1; /* Aktuální stránka */

if(empty($_GET["stranka"])) {$stranka = 0;} else {$stranka = $_GET["stranka"];}
$vyber = mysql_query("SELECT * FROM clanky ORDER BY id DESC LIMIT ".intval($stranka).",$po");

while($vypis = mysql_fetch_array($vyber)) {

$id=$vypis["id"];
$obrazek=$vypis["obrazek"];
$titulek=$vypis["titulek"];
$text=$vypis["text"];
$datumdb = $vypis["datum"];
$datum = Date("d.n Y",$datumdb);
$kategorie=$vypis["kategorie"];
$autor=$vypis["autor"];

echo "$obrazek";
echo "<h3>$titulek</h3>";
echo "$text";
echo "<div class=autor><br> $autor I $datum I $kategorie</div>";
}

echo '<div class=pod>';
echo(" <div id=pager><br><br>");


for($i=0; $i < $max_stranek; $i++) {
$cislo = ($i + 1);
$url_cislo = ($cislo * $po) - $po;
if($url_stranka != $cislo) {
echo "<a href=\"?stranka=".$url_cislo."\">".($i + 1)."</a>\n";
} else {
echo "<strong>".($i + 1)."</strong>\n";
}
Alphard
Profil
$radku = mysql_num_rows(mysql_query("SELECT id FROM clanky WHERE kategorie='".($_GET["id"]."'")));
méně efektivní je už jenom použití *

$vyber = mysql_query("SELECT * FROM clanky ORDER BY id DESC LIMIT ".intval($stranka).",$po");
tady jsi zapomněl na where ...

kategorie='".($_GET["id"]."'"
přidej nápis: neošetřené sql injection, nedělejte mi prosím bordel v systému :-)
Ruda
Profil
Dík moc jdu to zkusit. A na to ošetření sql inj. Odkaz na nějakej dobrej návod nebo článek by nebyl ? :-) Já moc databázím nerozumim. Co to může spáchat.
Alphard
Profil
řetězce prožeň funkcí mysql_real_escape_string(), u čísel stačí překonvertovat na číslo (int)
WHERE kategorie=".((int) $_GET["id"])));
Ruda
Profil
Tak člověče o tom zabezpečení si jsem toho našel hromadu, tak to proštuduju, ale s tím where je to nějak divný ať to zkouším jak chci tak to nechodí. Pořád mi to hází synt.chybu. Asi to dávam špatně.
Ruda
Profil
Dík Za radu. Hned to udělám. Ty mi radíš rychlejc než se ptám :-)
Alphard
Profil
Pořád mi to hází synt.chybu
jakou?
Ruda
Profil
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\MTB\soubory_mtb\vypiskategorie12.php on line 13
Ruda
Profil
No to není zrovna synt.chyba
Alphard
Profil
chyba je v dotaze
vlož za něj echo mysql_error();

pozor na pořadí, má být select, where, order, limit
Ruda
Profil
tak teď už je tam snad jen nějaká blbina ,ale to snad najdu.
Parse error: syntax error, unexpected T_STRING in C:\wamp\www\MTB\soubory_mtb\vypiskategorie12.php on line 11
Ruda
Profil
Dík moc .Tak jsem to rozchodil. Vzhledem k tomu jaká jsem lamka tak docela brzo. :-) Ještě jednou dík
Alphard
Profil
není zač, při problémech si vypisuj chyby a neustále mysli na efektivitu a bezpečnost
$radku = mysql_num_rows(mysql_query("SELECT id FROM clanky WHERE kategorie='".($_GET["id"]."'")));
lze výhodněji nahradit za:
$radku = mysql_result (mysql_query ("select count(*) from clanky where kategorie = ".((int) $_GET['kategorie'])), 0, 0);
Ruda
Profil
To je na mě zatím moc. Já si tu bastlím svoje stránky a učím se za pochodu. Mám to jen jako koníčka. Nehodlám se tím živit a nehodlam to dělat ani pro kamarády, páč mám jen jedny nervy a ty si už ničim svejma stránkama :-) Tak jsem rád když mi takhle někdo píchne. Dík a třeba zas někdy až tu budu zoufat :-) , ale já než bych votravoval tak radši dlouho zkouším a ještě dýl hledám po netu. Tý jo nějak jsem se rozepsal. Taj ještě jednou Ď a zdary.
Toto téma je uzamčeno. Odpověď nelze zaslat.