Enregistrement en bd et mysql_real_escape_string()
14 messages
• Page 1 sur 1
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Enregistrement en bd et mysql_real_escape_string()
Bonjour,
J'ai un doute sur la façon d'enregistrer en bd les données de plusieurs champs ...
Suite au formulaire je fais un :
Puis j'enregistre les données en bd. Donc les quotes sont échappées par un slash.(ex:L'estacade devient L\'estacade)
Pour l'affichage, dans la boucle while,je fais un:
Tout s'affiche correctement. Sa me vire tout les slash et convertit les balises HTML.
Par contre, si le nom de la ville enregistré contient un apostrophe ( ' ) (ex:L'estacade)
et que je fais un lien du style:
et que je récupère sur la page suivante par $_GET:
pour ensuite utiliser "$la_ville" comme variable pour une recherche dans ma bd, sa ne fonctionne pas, rien ne s'affiche ... WHY ?
Merci
J'ai un doute sur la façon d'enregistrer en bd les données de plusieurs champs ...
Suite au formulaire je fais un :
- Code: Tout sélectionner
$lechamp12 = mysql_real_escape_string($_POST["ville"]);
Puis j'enregistre les données en bd. Donc les quotes sont échappées par un slash.(ex:L'estacade devient L\'estacade)
Pour l'affichage, dans la boucle while,je fais un:
- Code: Tout sélectionner
$la_ville = stripcslashes(htmlspecialchars($localisation['ville']));
Tout s'affiche correctement. Sa me vire tout les slash et convertit les balises HTML.
Par contre, si le nom de la ville enregistré contient un apostrophe ( ' ) (ex:L'estacade)
et que je fais un lien du style:
- Code: Tout sélectionner
<a href="'.$la_ville.'.php">'.$la_ville.'</a>
et que je récupère sur la page suivante par $_GET:
- Code: Tout sélectionner
$la_ville=stripcslashes(htmlspecialchars($_GET["vil"]));
pour ensuite utiliser "$la_ville" comme variable pour une recherche dans ma bd, sa ne fonctionne pas, rien ne s'affiche ... WHY ?
Merci
-

SuperCureuil - WRInaute impliqué

- Messages: 673
- Inscription: 9 Mar 2007
Salut,
Y'a aucune variable GET là-dedans, donc pas étonnant que tu ne la récupères pas par la suite
@+
<a href="'.$la_ville.'.php">'.$la_ville.'</a>
Y'a aucune variable GET là-dedans, donc pas étonnant que tu ne la récupères pas par la suite
- Code: Tout sélectionner
<a href="'.$la_ville.'.php?vil='.$la_ville.'">'.$la_ville.'</a>
@+
- jvgamers
- WRInaute discret

- Messages: 93
- Inscription: 13 Juil 2004
Ouhla...
Alors, petites choses en bataille:
Il est important pour éviter une erreur de type notice de tester l'existence de la variable auparavant, de cette manière:
Alors, ensuite, pas besoin de faire un stripslashes pour supprimer les backslash sur le résultat de la base de données car justement, le fait d'avoir utilisé mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données.
Ensuite, quand tu fais un lien $laville.php, cela modifie le nom du fichier mais ne passe rien en paramètre, normal donc de ne rien récupérer.
Il faut faire un lien du type: fichier.php?ville=$laville
Alors, petites choses en bataille:
- Code: Tout sélectionner
$lechamp12 = mysql_real_escape_string($_POST["ville"]);
Il est important pour éviter une erreur de type notice de tester l'existence de la variable auparavant, de cette manière:
- Code: Tout sélectionner
$lechamp12 = isset($_POST["ville"]) ? mysql_real_escape_string($_POST["ville"]) : '';
Alors, ensuite, pas besoin de faire un stripslashes pour supprimer les backslash sur le résultat de la base de données car justement, le fait d'avoir utilisé mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données.
Ensuite, quand tu fais un lien $laville.php, cela modifie le nom du fichier mais ne passe rien en paramètre, normal donc de ne rien récupérer.
Il faut faire un lien du type: fichier.php?ville=$laville
-

SuperCureuil - WRInaute impliqué

- Messages: 673
- Inscription: 9 Mar 2007
Alors, ensuite, pas besoin de faire un stripslashes pour supprimer les backslash sur le résultat de la base de données car justement, le fait d'avoir utilisé mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données.
M'semblait bien
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
SuperCureuil autant pour moi sur le lien, c'est parce qu'il est rewrité ^^.
Je viens de refaire le teste et chaque entré comportant un apostrophe, un backslash est insérer automatiquement dans ma bd ... d'où l'utilisation de stripcslashes .
Du coup moi pas comprendre ?
Edit: Il n'y aurai pas une histoire de magic quote activé sur mon hébergeur qui ferait que sa merde comme sa ?
...mysql_real_escape_string permet juste d'éviter les SQL injection et n'ajoute PAS de backslash dans la base de données
Je viens de refaire le teste et chaque entré comportant un apostrophe, un backslash est insérer automatiquement dans ma bd ... d'où l'utilisation de stripcslashes .
Du coup moi pas comprendre ?
Edit: Il n'y aurai pas une histoire de magic quote activé sur mon hébergeur qui ferait que sa merde comme sa ?
-

Bool - WRInaute passionné

- Messages: 1290
- Inscription: 26 Fév 2004
Oui les magic_quotes_gpc ont tendance à pourrir toutes les données en entrée.
La plupart des "frameworks" ou applications qui cherchent de la portabilité commencent par désactiver cette saloperie
Grosso modo je fais ainsi :
edit: d'ailleurs en passant, l'utilisation de PDO avec les pseudos requêtes préparées est bien sympathique pour éviter d'oublier les mysql_real_escape_string().
A moins évidement d'utiliser une classe/bibliothèque maison qui s'en charge.
La plupart des "frameworks" ou applications qui cherchent de la portabilité commencent par désactiver cette saloperie
Grosso modo je fais ainsi :
- Code: Tout sélectionner
if( ini_get('magic_quotes_gpc') ){
xxx_gpcStripWalk($_GET);
xxx_gpcStripWalk($_POST);
xxx_gpcStripWalk($_COOKIE);
xxx_gpcStripWalk($_REQUEST);
}
function xxx_gpcStripWalk( & $array )
{
foreach ( $array as $key => $item ) {
$newKey = stripslashes($key);
if ( $newKey !== $key ) {
unset( $array[ $key ] );
$array[ $newkey ] = $item;
}
if ( is_array($item) === true ) {
xxx_gpcStripWalk($array[ $newKey ]);
} else {
$array[ $newKey ] = stripslashes($item);
}
}
}
edit: d'ailleurs en passant, l'utilisation de PDO avec les pseudos requêtes préparées est bien sympathique pour éviter d'oublier les mysql_real_escape_string().
A moins évidement d'utiliser une classe/bibliothèque maison qui s'en charge.
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Whaouuuuuuuuuuuuuuuuuuuuuu,merci Bool mais j'ai rien comprit
et j'ai vraiment pas le niveau requis pour l'utilisation de ton code ... tu as un décodeur stp ^^.
Il y a un truc que je ne comprend vraiment pas... il est dit quasi partout d'utiliser mysql_real_escape_string() avant l'insertion de données en bd pour ce protéger des injections
Hors si magic quotes est activé (ce qui est mon cas) et qu'on ne peut le désactiver(ce qui est encore mon cas -1&1), celui ci ajoute des backslash.
A la finale je fais comment moi pour insérer correctement mes données tout en les protègent?
En gros:
-Formulaire
-$lechamp12 = $_POST["ville"]; (<-je fais quoi ici ?)
-Vérification du formulaire
-Enregistrement en bd
Merci
Il y a un truc que je ne comprend vraiment pas... il est dit quasi partout d'utiliser mysql_real_escape_string() avant l'insertion de données en bd pour ce protéger des injections
Hors si magic quotes est activé (ce qui est mon cas) et qu'on ne peut le désactiver(ce qui est encore mon cas -1&1), celui ci ajoute des backslash.
A la finale je fais comment moi pour insérer correctement mes données tout en les protègent?
En gros:
-Formulaire
-$lechamp12 = $_POST["ville"]; (<-je fais quoi ici ?)
-Vérification du formulaire
-Enregistrement en bd
Merci
-

Bool - WRInaute passionné

- Messages: 1290
- Inscription: 26 Fév 2004
erf... désolé.
J'aurais tendance à le conseiller aussi, même si c'est parfois un peu "trop".
"Mon" code intervient justement dans ce genre de cas : exécuté au début de chaque script il annule l'effet de magic_quotes_gpc.
Il y a un truc que je ne comprend vraiment pas... il est dit quasi partout d'utiliser mysql_real_escape_string() avant l'insertion de données en bd pour ce protéger des injections
J'aurais tendance à le conseiller aussi, même si c'est parfois un peu "trop".
Hors si magic quotes est activé (ce qui est mon cas) et qu'on ne peut le désactiver(ce qui est encore mon cas -1&1), celui ci ajoute des backslash.
"Mon" code intervient justement dans ce genre de cas : exécuté au début de chaque script il annule l'effet de magic_quotes_gpc.
- moaaa
- Nouveau WRInaute

- Messages: 1
- Inscription: 30 Jan 2009
Re: Enregistrement en bd et mysql_real_escape_string()
Euh.... je sais pas trop si je suis d'accords sur un point:
J'ai un formulaire de saisie et pour récupérer les valeurs, je fais:
Si je rentre
Je travaille avec easyPHP 2.0.0.0
Devrais-je faire un
Et sinon, y'aurait-il une autre alternative?
J'ai un formulaire de saisie et pour récupérer les valeurs, je fais:
- Code: Tout sélectionner
$numAvs = $_SESSION['numAvs'] = mysql_real_escape_string(htmlspecialchars($_POST['numAvs']));
Si je rentre
- Code: Tout sélectionner
va'
- Code: Tout sélectionner
va\'
Je travaille avec easyPHP 2.0.0.0
Devrais-je faire un
pour supprimer les backslashes (ce qui accomplirait la tâche) mais par contre, le code serait sujet aux injections? Pourriez-vous confirmer?stripcslashes
Et sinon, y'aurait-il une autre alternative?
-

Marie-Aude - Modérateur

- Messages: 11884
- Inscription: 5 Juin 2006
Re: Enregistrement en bd et mysql_real_escape_string()
Sinon je crois que tu peux désactiver les magic quotes en mettant un fichier php.ini à la racine de ton site sur 1&1
même en mutu
14 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- influence Real Imps - Real Clicks et position google
- MySql : dupliquer une enregistrement
- MySQL GROUP BY sur le dernier enregistrement
- performance mySQL rang d'un enregistrement
- executer une requete mysql a partir d'un enregistrement
- Mysql: déplacer un enregistrement d'une table à une autre?
- escape le ? dans le Rewrite
- demande 24/7 real media
- real estate in France
- Referer : Real position
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
