|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
tryan WRInaute accro

Inscrit le: 20 Fév 2005 Messages: 1239 Localisation: Planete terre
|
Posté le : Ven Sep 12, 2008 13:13 Sujet du message: 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 :
| Code: |
$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: |
$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: |
<a href="'.$la_ville.'.php">'.$la_ville.'</a>
|
et que je récupère sur la page suivante par $_GET:
| Code: |
$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 passionné

Inscrit le: 09 Mar 2007 Messages: 661 Localisation: Bxl, Belgique
|
Posté le : Ven Sep 12, 2008 13:41 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
Salut,
| Citation: |
| <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: |
| <a href="'.$la_ville.'.php?vil='.$la_ville.'">'.$la_ville.'</a> |
@+ |
|
| |
|
 |
jvgamers WRInaute discret

Inscrit le: 13 Juil 2004 Messages: 74
|
Posté le : Ven Sep 12, 2008 13:44 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
Ouhla...
Alors, petites choses en bataille:
| Code: |
| $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: |
| $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 passionné

Inscrit le: 09 Mar 2007 Messages: 661 Localisation: Bxl, Belgique
|
Posté le : Ven Sep 12, 2008 13:47 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
| Citation: |
| 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 accro

Inscrit le: 20 Fév 2005 Messages: 1239 Localisation: Planete terre
|
Posté le : Ven Sep 12, 2008 14:20 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
SuperCureuil autant pour moi sur le lien, c'est parce qu'il est rewrité ^^.
| Citation: |
| ...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 ? |
|
| |
|
 |
tryan WRInaute accro

Inscrit le: 20 Fév 2005 Messages: 1239 Localisation: Planete terre
|
Posté le : Ven Sep 12, 2008 17:51 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
| Pas de réponses ...ou une suggestion qui pourrait m'avancer? |
|
| |
|
 |
Bool WRInaute accro

Inscrit le: 26 Fév 2004 Messages: 1168 Localisation: Lyon
|
Posté le : Ven Sep 12, 2008 18:01 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
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 :
| Code: |
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 accro

Inscrit le: 20 Fév 2005 Messages: 1239 Localisation: Planete terre
|
Posté le : Ven Sep 12, 2008 19:24 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
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 |
|
| |
|
 |
Bool WRInaute accro

Inscrit le: 26 Fév 2004 Messages: 1168 Localisation: Lyon
|
Posté le : Ven Sep 12, 2008 19:31 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
erf... désolé.
| Citation: |
| 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".
| Citation: |
| 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. |
|
| |
|
 |
tryan WRInaute accro

Inscrit le: 20 Fév 2005 Messages: 1239 Localisation: Planete terre
|
Posté le : Ven Sep 12, 2008 19:40 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
| En gros, je fais un copier/coller de ton code dans la (plutôt les) page(s) contenant le formulaire et c'est tout ? |
|
| |
|
 |
seebz WRInaute impliqué

Inscrit le: 15 Avr 2007 Messages: 386
|
Posté le : Ven Sep 12, 2008 19:43 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
| dans ton cas mysql_escape_string(stripslashes($_POST['data'])) résoud le problème (comme l'a suggéré Bool) |
|
| |
|
 |
Bool WRInaute accro

Inscrit le: 26 Fév 2004 Messages: 1168 Localisation: Lyon
|
Posté le : Ven Sep 12, 2008 19:49 Sujet du message: Enregistrement en bd et mysql_real_escape_string() |
|
|
| Yep tryam. "Idéallement", si tu as un script qui contient toutes les fonctions que tu utilises le plus souvent, autant l'y mettre directement. |
|
| |
|
 |
| |
|
|