Alors en fait, le magic_quotes va protéger les apostrophes et guillemets dans les variables que tu récupères par get et post en les backslashant. L'intérêt étant de pouvoir utiliser immédiatement ces variables à l'intérieur de chaines, typiquement des requêtes sql où les chaines de caractères doivent être délimitées par des apostrophes. Cela évite donc que les apostrophes saisies par l'utilisateur n'interfèrent avec celles qui doivent délimiter la chaine :
Si dans ton formulaire tu saisies le texte : " L'apostrophe " pour l'input field
Avec magic quotes tu vas obtenir $_POST['field'] = " L\'apostrophe "
Sans magic quotes tu auras $_POST['field'] = " L'apostrophe "
Ainsi la requête SQL suivante donnerait :
"SELECT ... WHERE champ = '".$_POST['field']."'"
// avec magic quotes
"SELECT ... WHERE champ = ' L\'apostrophe ' " // l'apostrophe est protégée
// sans magic quotes
"SELECT ... WHERE champ = ' L'apostrophe ' " // génère une erreur de syntaxe sql
L'antislash a donc uniquement pour but de protéger le caractère lors de l'exécution de la requête, dans ta base tu ne le verras pas et tu auras bien stockée la valeur saisie par l'utilisateur
addslashes() fonctionne exactement de la même manière, tu peux donc l'utiliser si la directive magic quotes gpc est désactivée, ou plus simplement pour protéger n'importe quelle chaine (pour l'utiliser dans du javascript par exemple).
mysql_real_escape_string() protèges quelques caractères en plus et est donc réellement destiné à la protéction des chaines utilisées dans des requêtes.
Note: Si magic_quotes_gpc est activée, appliquez d'abord la fonction stripslashes() à vos données. Utiliser cette fonction sur des données qui ont déjà été protégées, les protègera une deuxième fois.
C'est-y plus clair ?
