Page 1 sur 1

insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 17:55
Bonjour, je viens de passer mon site sous php5.5.2 et tant qu'à faire, j'ai tout passé aussi en PDO. Mais j'ai un souci avec les variables de formulaire comme une adresse postale par exemple ( disons $_POST['adresse'] = 3 rue de l'hirondelle ) Ce champ contenant la guillemet simple ' bloque tout l'insert en base sql. J'ai bien lu qu'on pouvait utiliser PDO directement ou utiliser mysqli_real_escape_string mais je n'y arrive pas !!! Je ne suis pas très doué, quelqu'un pourrait me poster le code pour que mon INSERT accepte l'adresse " 3 rue de l'hirondelle " ?
MERCI 1000 fois

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 18:36
par @rthur
Bonjour,

Il faut que tu utilises la fonction PDO quote(), il y a des exemples dans la doc :
https://secure.php.net/manual/fr/pdo.quote.php

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 18:50
merci mais ça ne marche pas du tout. j'ai essayé ça :

<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');

/* Chaîne simple */
$string = 'Nice';
print "Chaîne non échappée : $string\n";
print "Chaîne échappée : " . $conn->quote($string) . "\n";
?>
rien, ça ne marche pas. Par quoi je dois remplacer ça ? : $conn = new PDO('sqlite:/home/lynn/music.sql3');

merci

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 18:52
par or 1

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 19:13
merci les gars !!! Je crois que j'ai enfin compris. En fait je remplace $conn = new PDO('sqlite:/home/lynn/music.sql3'); par ma connexion à ma base via PDO ( chez moi c'est $connexion=new PDO('..... ) donc en fait je remplace $conn par $connexion. A priori ça marche :) Mais ça remplace les apostrophes par un espace ... il n'y a pas moyen de conserver les apostrophes ?
MERCI

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 21:13
et pour un mot de passe ? comment conserver les ' * " ? / etc ... ? Là il ne faut pas les remplacer par des espaces, il faut les conserver ... Merci pour votre aide

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 25 août 2015, 22:27
par moogli
salut,

il faut le faire à l'insertion dans la base, quote ne sert pas à l'affichage.
il faut voir ce qu'il y a en base réellement pour l'afficher correctement.
Est ce que le code d'origine n'aurait pas fonctionné avec les magic_quote activée et non géré ? (du genre ajout de \ automatique).

Si tu veux que l'on t'aide efficacement il faut que tu nous fournisse ton code.

Suivant comment tu réalise l'insertion en base tu peux ou pas avoir besoin de quote. Par exemple si tu utilise une requête préparée (comme souvent indiqué dans les tutos sur PDO) tu n'en as pas besoin.

Perso je propose plus de n'utiliser les requêtes préparées qu'a bon escient et d'utiliser quote.
Par exemple
<?php
$pdo = new \PDO(''); // a remplacer par la connexion à la base
$sql = 'insert into laTable (les,champs,utiles) values('.$pdo->quote($variable).' , '.$pdo->quote($variable2).','.$pdo->quote($variable3).')';

$pdo->query($sql);
?>
en fonction du type de champs du champs SQL tu peux utiliser le second paramètre de quote pour l'indiquer. par défaut c'est PDO::PARAM_STR mais tu indiquer un entier ou autre.

@+

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 26 août 2015, 08:17
Merci Moogli. Je vais essayer de comprendre tout ce que tu dis :) je teste tout ça aujourd'hui. A tout à l'heure donc ...

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 26 août 2015, 09:21
j'ai essayé ça, mais ça ne marche pas ...

$Pass = $connexion->quote($_POST['password']);

$resultats=$connexion->exec("INSERT INTO membre VALUES('".$Pass."')");

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 26 août 2015, 09:50
a priori si j'écris
$resultats=$connexion->exec("INSERT INTO membre VALUES($Pass)");
ça semble marcher ... normal ?

Re: insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

Posté : 27 août 2015, 09:10
par Ryle
Bonjour,

La méthode pdo::quote va non seulement protéger les apostrophes contenues dans la chaine passée en argument, mais également ajouter des apostrophes autour de celle-ci afin de pouvoir l'utiliser dans une requête SQL ;)
$Pass = $connexion->quote($_POST['password']); // MonMotD'Passe

echo "INSERT INTO membre VALUES('".$Pass."')";
// génère un code SQL invalide : INSERT INTO membre VALUES(''MonMotD''Passe'') 

echo "INSERT INTO membre VALUES($Pass)";
// génère un code SQL valide : INSERT INTO membre VALUES('MonMotD''Passe') 

echo "INSERT INTO membre VALUES(" . $Pass . ")";
// génère un code SQL valide : INSERT INTO membre VALUES('MonMotD''Passe')