Inserimento dati con PDO
Dovo avere fatto la connessione e una classica interrogazione vediamo come aggiungere dati al nostro db.
Prima di tutto leggiamo l'articolo linkato e salviamoci quella classe.
Infatti non andremo creare una nuova classe, ma aggiungeremo solo una funzione riprendendo quella istanza di PDO.
Questo perchè, come detto nell'articolo, quella classe rappresenta il nostro db e li mettermo tutte le operazioni da fare.
Per l'inserimento useremo le istruzioni prepare.
Come vedete queste istruzioni posso essere usate in vari modi; io in genere uso i segnaposti ?.
Vediamo la funzione da aggiungere alla classe:
public function insert($nome, $cognome, $data_nascita, $cel, $tel, $fax, $soc, $carica, $email1, $email2, $sito, $casa, $uff) {
try {
$prepare = $this->pdo->prepare("INSERT INTO contatti (nome, cognome, data_nascita, cellulare, telefono, fax, societa, carica, email_1, email_2, sito_web, indirizzo_casa, indirizzo_uff) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
$prepare->execute(array(
trim($nome),
trim($cognome),
trim($data_nascita),
trim($cel),
trim($tel),
trim($fax),
trim($soc),
trim($carica),
trim($email1),
trim($email2),
trim($sito),
trim($casa),
trim($uff)
));
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
}
Come vedete la funzione richiede diversi parametri, che corrispondono alle voci da inserire nella tabella.
Subito sotto all'apertura del try abbiamo l'istruzione prepare richiamata sull'istanza di PDO.
Come vedete è una classica query di inserimento dove però i valori sono rimpiazzati dai segnaposti ?.
Questo aumenta di gran lunga la sicurezza della query e anche la sua performance.
Subito sotto viene eseguita l'istruzione usando la funzione execute passndogli un array di valori.
I valori corrispondo ai parametri della funzione e devono essere messi nell'ordine preciso in quanto ogni valore andrà a rimpiazzare il segnaposto!!
State attenti quindi a non mettere i valori a caso.
Questi dati li manderemo da un form; quindi create create.php con questo dentro:
<?php
include_once 'config.php';
$obj = new Config();
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$insert = $obj->insert($_POST['txtName'], $_POST['txtSurname'], $_POST['txtData'], $_POST['txtCell'], $_POST['txtTel'], $_POST['txtFax'], $_POST['txtSocieta'], $_POST['txtCarica'], $_POST['email1'], $_POST['email2'], $_POST['sito'], $_POST['indirizzoCasa'], $_POST['indirizzoUff']);
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert</title>
</head>
<body>
<table>
<form action="" method="POST">
<tr>
<td>Nome:</td>
<td><input type="text" name="txtName" value="" /></td>
</tr>
<tr>
<td>Cognome:</td>
<td><input type="text" name="txtSurname" value="" /></td>
</tr>
<tr>
<td>Cellulare:</td>
<td><input type="text" name="txtCell" value="" /></td>
</tr>
<tr>
<td>Telefono:</td>
<td><input type="text" name="txtTel" value="" /></td>
</tr>
<tr>
<td>Fax:</td>
<td><input type="text" name="txtFax" value="" /></td>
</tr>
<tr>
<td>Società</td>
<td><input type="text" name="txtSocieta" value="" /></td>
</tr>
<tr>
<td>Carica:</td>
<td><input type="text" name="txtCarica" value="" /></td>
</tr>
<tr>
<td>Email 1:</td>
<td><input type="text" name="email1" value="" /></td>
</tr>
<tr>
<td>Email 2:</td>
<td><input type="text" name="email2" value="" /></td>
</tr>
<tr>
<td>Sito web:</td>
<td><input type="text" name="sito" value="" /></td>
<td>www.esempio.com</td>
</tr>
<tr>
<td>Indirizzo casa:</td>
<td><input type="text" name="indirizzoCasa" value="" /></td>
</tr>
<tr>
<td>Indirizzo ufficio:</td>
<td><input type="text" name="indirizzoUff" value="" /></td>
</tr>
<tr>
<td>Data di nascita:</td>
<td><input type="text" name="txtData" value="" /></td>
</tr>
<tr>
<td>
<input type="submit" value="submit" name="Submit" />
</td>
</tr>
</form>
</table>
</body>
</html>
Quando si clicca sul tasto viene richiamato il metodo insert sull'oggetto Config() creato qua:
<?php
include_once 'config.php';
$obj = new Config();
if ($_SERVER['REQUEST_METHOD'] == "POST") {
$insert = $obj->insert($_POST['txtName'], $_POST['txtSurname'], $_POST['txtData'], $_POST['txtCell'], $_POST['txtTel'], $_POST['txtFax'], $_POST['txtSocieta'], $_POST['txtCarica'], $_POST['email1'], $_POST['email2'], $_POST['sito'], $_POST['indirizzoCasa'], $_POST['indirizzoUff']);
}
?>
Al metodo si passano i vari parametri che corrispondo ai valori delle textbox.
Niente di trascendentale.
Se avete notato l'unica cosa che ho usato per pulire i dati inviati è trim().
Questo perchè PDO di suo fa già dei controlli e quindi non servono mysql_real_escape_string e funzioni affini.
Però dovete tenere in considerazione che io non ho controllato validità delle email, o dei dati in generale (se ad esempio devono essere numerici) o se i campi sono vuoti.
Nel mio caso è possibile fare un pò tutto, ma perchè a me non serve fare controlli.
E' probabile che debbano essere fatti, quindi teneteli in considerazione!
php pdo mysql prepare insert
Commentami!