Ciao a tutti,
settimana scorsa stavo realizzando a scopo didattico un semplice sistema di registrazione/login alla vecchia maniera (no OOP e funzioni mysql).. poi stesso qui sul forum mi è stato consigliato di passare a PDO e magari anche a scrivere codice oop, per cui seguendo le varie guide qui sul sito, ho trasformato questo:
Codice PHP:
$db_user = 'root';
$db_password = '123456';
$db_host = 'localhost';
$link = msqly_connect("db_host","$db_user","$db_password") or die ("Errore connessione");
$db = mysql_select_db("SVILUPPO") or die ("Errore selezione DB");
$loginform = mysql_real_escape_string($_POST["login"]);
$passwordform = mysql_real_escape_string($_POST["password"]);
$emailform = mysql_real_escape_string($_POST["email"]);
if (strpbrk($loginform, ",;'-+()=><@[]{} ") || strpbrk($passwordform, ",;'+()=><@[]{} ") || strpbrk($loginform, ",;'+()=><[]{} ")) {
echo "caratteri non validi";
header("Refresh: 2, URL:http//localhost/registrati.html");
return;
}
/*---query di inserimento---*/
in questo:
Codice PHP:
$db_user = 'root';
$db_password = '123456';
$db_host = 'localhost';
$db_name = 'SVILUPPO';
$col = "mysql:host=$db_host; dbname=$db_name";
try {
$db = new PDO($col, "$db_user", "$db_password");
}
catch(PDOException $e) {
echo "Errore: ".$e->getMessage();
}
$loginform = ($_POST["login"]);
$passwordform = ($_POST["password"]);
$emailform = ($_POST["email"]);
$sql = $db->prepare("SELECT * FROM utenti WHERE login = '".$loginform."'");
$sql->execute();
$sql2 = $db->prepare("SELECT * FROM utenti WHERE email = '".$emailform."'");
$sql2->execute();
if ($sql->fetchAll()) {
echo "Username già presente";
}elseif ($sql2->fetchAll()) {
echo "Email già registrata";
}else{
/*registrazione nel db*/
Sembra che tutto funzioni, ma non avendo mai utilizzato PDO, non so se manca qualcosa...
Ad esempio, se elimino il blocco "catch{...} mi viene segnalato un errore di sintassi; è perchè il blocco è obbligatorio o perchè ho toppato qualche apice?
Inoltre, leggevo da vari commenti qui sul forum che PDO mette al riparo automaticamente dai problemi legati all'SQL-Injection... ma in che modo? I controlli effettuati tramite mysql_real_escape_string e dall'espressione regolare per eliminare apici e altri caratteri potenzialmente dannosi nel primo codice, come sono gestiti in PDO?
Altra cosa, sto cercando di passare man mano alla oop e riconosco nel secondo esempio la sintassi tipica, ma mi aspettavo anche di trovare definizioni di classi, metodi ecc che invece non vedo da nessuna parte e l'unica cosa che mi viene in mente è che possano già essere definite di default in qualche altro posto... dove?