Enregistrement en bd et mysql_real_escape_string()

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 12 Septembre 2008.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    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
     
  2. SuperCureuil
    SuperCureuil WRInaute impliqué
    Inscrit:
    9 Mars 2007
    Messages:
    567
    J'aime reçus:
    0
    Salut,

    Y'a aucune variable GET là-dedans, donc pas étonnant que tu ne la récupères pas par la suite :wink:

    Code:
    <a href="'.$la_ville.'.php?vil='.$la_ville.'">'.$la_ville.'</a>
    @+
     
  3. u9160
    u9160 WRInaute discret
    Inscrit:
    13 Juillet 2004
    Messages:
    68
    J'aime reçus:
    0
    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
     
  4. SuperCureuil
    SuperCureuil WRInaute impliqué
    Inscrit:
    9 Mars 2007
    Messages:
    567
    J'aime reçus:
    0
    M'semblait bien :wink:
     
  5. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    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 ?
     
  6. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Pas de réponses ...ou une suggestion qui pourrait m'avancer?
     
  7. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    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 :D

    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.
     
  8. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    Whaouuuuuuuuuuuuuuuuuuuuuu,merci Bool mais j'ai rien comprit 8O 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
     
  9. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    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.
     
  10. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 229
    J'aime reçus:
    0
    En gros, je fais un copier/coller de ton code dans la (plutôt les) page(s) contenant le formulaire et c'est tout ?
     
  11. seebz
    seebz WRInaute impliqué
    Inscrit:
    15 Avril 2007
    Messages:
    722
    J'aime reçus:
    0
    dans ton cas mysql_escape_string(stripslashes($_POST['data'])) résoud le problème (comme l'a suggéré Bool)
     
  12. Bool
    Bool WRInaute passionné
    Inscrit:
    26 Février 2004
    Messages:
    1 543
    J'aime reçus:
    0
    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.
     
  13. moaaa
    moaaa Nouveau WRInaute
    Inscrit:
    30 Janvier 2009
    Messages:
    1
    J'aime reçus:
    0
    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:

    Code:
    $numAvs = $_SESSION['numAvs'] = mysql_real_escape_string(htmlspecialchars($_POST['numAvs']));
    Si je rentre
    Code:
    va'
    et que je vais regarder dans ma base de données, l'entrée correspondante est:
    Code:
    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?
    Et sinon, y'aurait-il une autre alternative?
     
  14. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 929
    J'aime reçus:
    267
    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
     
Chargement...
Similar Threads - Enregistrement mysql_real_escape_string() Forum Date
Récupérer le premier et dernier enregistrement sql Développement d'un site Web ou d'une appli mobile 16 Juillet 2021
Problème enregistrement mots clés AdWords 25 Octobre 2016
enregistrement dans l'annaire webrank Problèmes de référencement spécifiques à vos sites 27 Avril 2015
Contrats type: hébergement et enregistrement nom de domaine ? Droit du web (juridique, fiscalité...) 18 Mars 2015
Durée d'enregistrement du site Noms de domaine et référencement 2 Mai 2014
[MySQL] Nombre d'enregistrements sur des horaires précis Développement d'un site Web ou d'une appli mobile 19 Juillet 2013
Légalité : Enregistrement d'un domaine avec le mot clef "pages" Droit du web (juridique, fiscalité...) 16 Juillet 2013
bluegriffon poids page apres enregistrement Développement d'un site Web ou d'une appli mobile 30 Juin 2013
Requetes SQL un peu lente ... ~1 million d'enregistrements Développement d'un site Web ou d'une appli mobile 4 Mars 2013
MYSQL : Position d'un enregistrement dans un recordset Développement d'un site Web ou d'une appli mobile 28 Janvier 2013
Achat de ndd en .fr: bureau d'enregistrement vs registrar? Noms de domaine et référencement 9 Février 2012
Liste nom de domaine, registrar et bureau d'enregistrement Noms de domaine et référencement 10 Août 2011
Utilisation du fpdf et enregistrement de variable d'un fpdf a un autre Développement d'un site Web ou d'une appli mobile 26 Mai 2011
[résolu] [mysql] passer un champ à une valeur donnée pour tous les enregistrements Développement d'un site Web ou d'une appli mobile 25 Mars 2011
MySql : dupliquer une enregistrement Développement d'un site Web ou d'une appli mobile 29 Décembre 2010
enregistrements MX et CNAME sous DNS Administration d'un site Web 12 Novembre 2010
Comparer des dossiers sur ftp et enregistrement en BD ? Développement d'un site Web ou d'une appli mobile 16 Octobre 2010
Comment modifier plusieurs enregistrement d'une table depuis un formulaire ????? Développement d'un site Web ou d'une appli mobile 19 Septembre 2010
style différent tous les 3 enregistrements sur une boucle php Développement d'un site Web ou d'une appli mobile 17 Septembre 2010
Forcer l'enregistrement d'un fichier qd on le télécharge Développement d'un site Web ou d'une appli mobile 2 Décembre 2009