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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : insérer des valeurs contenant des caractères spéciaux sous PHP5.5.2 et PDO

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

par Ryle » 27 août 2015, 09:10

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')

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

par [email protected] » 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

par [email protected] » 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

par [email protected] » 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

par moogli » 25 août 2015, 22:27

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

par [email protected] » 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

par [email protected] » 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

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

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

par [email protected] » 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

par @rthur » 25 août 2015, 18:36

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

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

par [email protected] » 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