$autidc=(int)$GLOBALS["adresat"];
$adresatidcmail=phprs_sql_query("select idc,email from ".$rspredpona."ctenari where idc='$autidc'",$dbspojeni);
Len zbežne - tu je namieste byť opatrný. Funkcia
(int) zabezpečí ochranu pred SQL injection, nepustí to vykonať dotaz na databázu s podstrčeným kódom z URL. Ak skladáš SQL dotaz, je nutné mysieť na to, že časť dotazu berieš z URL a táto časť môže mať neočakávaný obsah ;-) Vieme, že čakáme číslo, takže funkciou (int) si zaistíme to, že nám nič iné ako číslo zo vstupu do SQL príkazu neprejde. Dobrým zvykom je spraviť pred vykonaním SQL dotazu overenie obsahu a v prípade problému zareagovať.
if (isset($GLOBALS['adresat']) && (ereg("^[0-9]+$",$GLOBALS['adresat']))) {
// vstup je cislo, vsetko je OK, zlozim dotaz a vykonam SQL
} else {
// nieco sa deje, na vstupe nie je ocakavana hodnota (cislo)
// zastavim beh scriptu, vypisem nejaky error a dalej sa nebavim, pripadne vykonam nieco ine
die('input error');
}
Prečo $GLOBALS miesto $_GET? To už je trocha zložitejšie, ale v princípe preto, aby pri zapnutom automatickom escapovaní vstupu nevznikalo dvojité zbytične escapovanie vstupných reťazcov. V phpRS máš GET/POST vopred spracovaný, deje sa to použitím include("config.php");. Ide o to, že php je možné nastaviť v konfigurácii tak, aby vstup automaticky escapoval - tzv. magic_quotes. phpRS ti to escapovanie zjednotí a nemusíš sa starať o testy nastavenia serveru (
magic_quotes_gpc) - staráš sa len o kontrolu hodnôt a správne escapovanie vstupného reťazca pomocou phprs_sql_real_escape_string, kód by mohol vyzerať takto:
$autidc=phprs_sql_real_escape_string($GLOBALS["adresat"]);
Ak by si chcel použiť vstup priamo z $_GET / $_POST, vyzeralo by to takto:
<?php
echo get_magic_quotes_gpc(); // 1
echo $_POST['lastname']; // O\'reilly
echo addslashes($_POST['lastname']); // O\\\'reilly
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
echo $lastname; // O\'reilly
$sql = "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>