Avatar
billy
Člen
Avatar
billy:

Cau, tak jsem to zkusil takhle, je to odolne vuci MySQL injection?

$id = 1;

$dsn = 'mysql:dbname=ne­co;host=local­host';
$user = 'user';
$password = 'heslo';

try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Spojeni selhalo' . $e->getMessage();
}
$dbh->exec("use tab"); // tohle asi neni treba...

do {
$stmt = $dbh->prepare("SELECT * FROM tab WHERE id='$id'");
$stmt->execute();
$stmt->setfetchmode(PDO::FET­CH_ASSOC);

while($row = $stmt->fetch()) {

if ($id == $id) {

$idv[$id] = $row['id'];
echo htmlspecialchar­s($idv[$id]);
echo "
";
$url[$id] = $row['url'];
echo htmlspecialchar­s($url[$id]);
echo "
";
$len[$id] = $row['len'];
echo htmlspecialchar­s($len);
echo "
";
$nam[$id] = $row['nam'];
echo htmlspecialchar­s($nam[$id]);
echo "
";
$im[$id] = $row['im'];
echo htmlspecialchar­s($im[$id]);
echo "

";

};

}
$id++;
} while ($id<=10);
$dbh = null; // Odpojeni od DB

 
Odpovědět 4.3.2015 0:20
Avatar
billy
Člen
Avatar
billy:

htmlspecialchars(); bych asi takhle nemel pouzivat => pouze jako soucast html kodu?

 
Nahoru Odpovědět 4.3.2015 1:01
Avatar
IT Man
Redaktor
Avatar
Odpovídá na billy
IT Man:

Příště použij tlačítko code, prosím. Takhle se to luštit nedá.

Nahoru Odpovědět  +1 4.3.2015 6:09
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na billy
Daniel Vítek:

No tak to teda není. Konkrétně v tomto místě

$stmt = $dbh->prepare("SELECT * FROM tab WHERE id='$id'");

Zadáváš tam proměnnou $id přímo!
Místo toho použij

$stmt = $dbh->prepare("SELECT * FROM tab WHERE id=?", array($id));

A přečti si tutoriály, které tu máme, je to tam vysvětlené.

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět  +2 4.3.2015 8:53
Avatar
billy
Člen
Avatar
Odpovídá na Daniel Vítek
billy:

jo diky, PDO mi absolutne nic nerika. Tohle jsem dal dohromady narychlo vcera s pomoci internetu, takze samozdrejme neznam souvislosti.

No opravil jsem to takhle, funguje to. Na ty tutorialy se mrknu.


$stmt = $dbh->prepare("SELECT * FROM tab WHERE id=?", array($id));
$stmt->execute(arra­y($id));

 
Nahoru Odpovědět 4.3.2015 13:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.