$query = sprintf("SELECT email FROM clients WHERE email='$email'",
mysql_real_escape_string($email));
$result = mysql_query($query) or die ('Invalid query: ' . mysql_error());
j'utilise aussi sur d'autres requetes lors de l'enregistrement d'un nouvel utilisateur.if(isset($_POST['email']))
{
$email = mysql_real_escape_string(htmlentities($_POST['email'], ENT_QUOTES));
if(!empty($email))
{
$sql = mysql_query("INSERT INTO table VALUES($email)");
}
else
{
echo "Erreur : champs non remplis";
}
}
Tu comprends maintenant ? En fait on sécurise la variable $email ^^ pour l'insérer par la suite dans la BDD
Salut,par contre je me suis aussi dit que pour se premunir contre les injection sql:
- limiter le nombre de carateres
- rejeter automatiquement certains caracteres (via javascript par exemple)
- verifier que la syntaxe de l'email est bonne
Code : Tout sélectionner
<input type="text" name="email" maxlenght="30" />$email = substr($_POST['email'], 0, 30); // Pareil tu changes 30 par le nombre que tu veux
Pour la syntaxe de l'email tu peux utiliser une regex avec preg_match() if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['email']))
{
// Bon email
}
else {
// Mauvais email
}
Et pour interdire les caractères je sais pas ... Mis à part les regex peut-être if(preg_match("#[ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ\!\?\:\.]#i", $_POST['email']))
{
echo "Votre email ne doit pas contenir de caractères spéciaux";
}
Ou tu remplaces tout simplement les caractères spéciaux avec la fonction strtr()<?php
// Tentative d'injection SQL
$identifiant = "Pierre' -- ";
$mdp = '';
$pdo = new PDO ('mysql:host=localhost;dbname=ma_base', 'root', 'mdp');
$requete_preparee = "SELECT identifiant FROM table WHERE identifiant=:identifiant AND mdp=:mdp";
$requete = $pdo -> prepare ($requete_preparee);
$requete -> execute (array (
':identifiant' => $identifiant,
':mdp' => md5 ($mdp);
));
$resultat = $requete -> fetch ();
// La dernière ligne aura de fortes chances de retourner un tableau vide (aucun résultat trouvé)
// L'injection SQL est donc voué à l'échec
?>
Cet exemple montre bien que, sans préparation de requête ou d'échappement de chaînes, j'enverrais la requête suivante :
Code : Tout sélectionner
SELECT identifiant FROM table WHERE identifiant='Pierre' -- AND mdp=''Ouai en effet suis-je bête! Sinon on devrait écrire tout les caractères spéciaux que l'on ne veut pas... Juste un peu longPour l'email il serait plus simple de vérifier les caractères autorisés que ceux interdit.
[A-Za-z0-9.@-]