Enregistrer proprement les données d'un formulaire ?

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par tryan, 29 Mars 2013.

  1. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Bonjour,

    Je "patauge" sur la façon d'enregistrer proprement les données d'un formulaire en BD.
    Supposons un simple input qui doit être enregistré bd:
    Code:
    <input name="titre" size="65" value="<?php if (!empty($_POST["titre"])) { echo $_POST["titre"]; } ?>" type="text"/>
    Utilisez-vous sur le "echo" la fonction "ENT_QUOTES" et/ou "htmlspecialchars" et/ou "stripslashes" ou rien?
    Idem sur un textarea ou tout autre élément d'un formulaire ?

    Note : utilisation de "mysql_real_escape_string" lors de l'insertion et PHP 5.

    Merci
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 026
    J'aime reçus:
    291
  3. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Merci de ta réponse :)
    Visiblement, htmlspecialchars() seul ne suffit pas car si j'enregistre &é"'(, j'ai de jolies /. Je suis donc obligé d'utiliser stripslashes() en plus pour ré-afficher correctement $_POST["titre"].
    Du coup si je lis la variable $titre en sortie de bd, il faut également que j'utilise stripslashes() sur celle-ci.
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 026
    J'aime reçus:
    291
    Si tu dois faire un stripslashes, c'est que les magic quotes sont activées ... c'est une très mauvaise pratique, à désactiver au plus vite.
     
  5. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Je fais des testes sur free.fr ou visiblement magic quote est activé et sous 1&1 ou magic quote est désactivé. Comme je me construit un "CMS maison", j'ai besoin que ça fonctionne sur les 2 sans tracas ...
    Pour ce faire, je me suis créé la fonction suivante :
    Code:
    function clean($chaine){
    	//si magic quote activé
    	if(get_magic_quotes_gpc()){
    		$chaine = htmlspecialchars(stripslashes($chaine));
    	}
    	else{
    		$chaine = htmlspecialchars($chaine, ENT_COMPAT , 'ISO-8859-1');
    	} 
    	return $chaine; 
    }
    
    J'utilise cette fonction sur le ré-affichage du formulaire comme ci-dessous et sur tout les champs :
    Code:
    <input name="titre" size="65" value="<?php if(isset($_POST["titre"])) echo clean($_POST["titre"]); else echo $titre; ?>" type="text"/>
    Et avant enregistrement en bd comme ci-dessous :
    Code:
    $titre = clean($_POST["titre"]);
    Comme j'utilise ckfinder en éditeur, j'utilise la fonction htmlspecialchars_decode() en sortie sur la variable concerné sinon je me retrouve avec une bouillie de texte ...

    Après quelques testes sur les 2 serveurs, cela semble fonctionner sans erreur :mrgreen: mais je ne suis pas certains que ma solution soit la meilleurs ... qu'en penses-tu?
     
  6. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 026
    J'aime reçus:
    291
    Que c'est plus simple de cleaner tout d'un coup, il y a plusieurs exemples dans les commentaires là:
    http://php.net/manual/fr/function.get-magic-quotes-gpc.php

    Et que c'est pas bien d'enregistrer les entités HTML dans la DB. C'est à l'affichage que tu dois faire les htmlspecialchars/htmlentities.
     
  7. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Hargggggggggggg 8O
    Juste avant tu me dis :
    Code:
    Pour populer le form, htmlspecialchars() oui.
    Du coup, htmlspecialchars c'est à l'affichage ou avant enregistrement ou les 2 ... je suis largué!

    Concernant le lien, tu me dis si j'ai faux... on utilise stripslashes si magic quote est activé sinon on utilise rien et on passe les variables avant enregistrement avec mysql_real_escape_string .. j'ai bon?
     
  8. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Autre question, les slach /, il faut les enregistrer en bd ou les virer avant enregistrement?
     
  9. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 026
    J'aime reçus:
    291
    Il n'y a rien à virer, juste faire gaffe lors des requêtes SQL pr éviter l'injection, tu laisses faire mysql_real_escape_string.

    test.php:
    PHP:
    <span class="syntaxhtml"><!DOCTYPE HTML><br /><html lang="en-US"><br /><head><br />    <meta charset="UTF-8"><br />    <title></title><br /></head><br /><body><br />    <form action="<span class="syntaxdefault"><?php echo $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'REQUEST_URI'</span><span class="syntaxkeyword">];</span><span class="syntaxdefault">?></span>" method="post"><br />        <input type="text" name="title" value="<span class="syntaxdefault"><?php if</span><span class="syntaxkeyword">(isset(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'title'</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!empty(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'title'</span><span class="syntaxkeyword">])):</span><span class="syntaxdefault">?><?php echo htmlspecialchars</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'title'</span><span class="syntaxkeyword">]);</span><span class="syntaxdefault">?><?php endif</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">?></span>" /><br />        <input type="submit" value="Submit" /><br />    </form><br />    <span class="syntaxdefault"><?php if</span><span class="syntaxkeyword">(!empty(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">)):</span><span class="syntaxdefault">?><br /></span>        <pre><span class="syntaxdefault"><?php print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$_POST</span><span class="syntaxkeyword">);</span><span class="syntaxdefault">?></span></pre><br />    <span class="syntaxdefault"><?php endif</span><span class="syntaxkeyword">;</span><span class="syntaxdefault">?><br /></span></body><br /></html><br /></span>
    Rempli l'input avec:
    Code:
    &&&<<<>>>"""
    Submit le form 1 fois, puis tu affiches le source:
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword"><</span><span class="syntaxdefault">input type</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"text"</span><span class="syntaxdefault"> name</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"title"</span><span class="syntaxdefault"> value</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"&amp;&amp;&amp;&lt;&lt;&lt;&gt;&gt;&gt;&quot;&quot;&quot;"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">/></span><span class="syntaxdefault"> </span>
    Submit le form 2 fois et tu obtiens:
    Code:
    Array
    (
        [title] => &&&<<<>>>"""
    )
     
  10. tryan
    tryan WRInaute passionné
    Inscrit:
    20 Février 2005
    Messages:
    2 239
    J'aime reçus:
    0
    Quand je submit le form 1 fois en utilisant juste htmlspecialchars(), j'obtiens :
    Code:
    <input name="titre" value="&amp;&amp;&amp;&lt;&lt;&lt;&gt;&gt;&gt;\&quot;\&quot;\&quot;" type="text"/>
    En Bd j'obtiens :
    Code:
    &&&<<<>>>\"\"\"
    Je suis bien obligé d'utiliser stripslashes() à un moment donné .. non?
    Si oui, avant enregistrement en Bd ou en sortie?
    Si non, c'est que j'ai toujours rien comprit malgré ton acharnement à m'expliquer :oops:
     
  11. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 026
    J'aime reçus:
    291
    C'est parce que les magic quotes sont activés :roll:
    Dans le lien que je t'ai donné plus haut, il y a plusieurs exemples:
    http://www.php.net/manual/en/function.get-magic-quotes-gpc.php#81675
    http://www.php.net/manual/en/function.get-magic-quotes-gpc.php#95697
    http://www.php.net/manual/en/function.get-magic-quotes-gpc.php#82524

    Pr virer toutes ces magic quotes hors de $_GET, $_POST, $_COOKIE. Donc en effet, ça fait un stripslashes() automatique si get_magic_quotes_gpc() est activé. Mais dans ton code tu t'en soucies plus.
    De plus magic_quotes_gpc, est déprécié PHP 5.3, et en PHP 5.4 supprimé.
    http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc
     
Chargement...
Similar Threads - Enregistrer proprement données Forum Date
Pré-enregistrer un domaine avec une extension qui n'existe pas encore ? Noms de domaine et référencement 30 Novembre 2017
Enregistrer les sous-domaines dans la search console? Référencement Google 21 Janvier 2016
importer un fichier excel et enregistrer son contenu dans ma base de données mysql Développement d'un site Web ou d'une appli mobile 15 Mars 2015
Récupérer et enregistrer une image à partir d'un lien Développement d'un site Web ou d'une appli mobile 8 Janvier 2015
L'Historique Google+, pour enregistrer vos moments-clés sur Internet Google+ 17 Juillet 2012
Enregistrer une image quotidienne en Tache Cron Développement d'un site Web ou d'une appli mobile 14 Juin 2012
Payline - enregistrer une commande e-commerce 23 Mai 2012
enregistrer vcard depuis un smartphone Développement d'un site Web ou d'une appli mobile 26 Janvier 2012
Enregistrer fichier sous IE sans validation utlisateur Développement d'un site Web ou d'une appli mobile 19 Janvier 2012
Insérer un Enregistrer sous sur OnClick Développement d'un site Web ou d'une appli mobile 20 Novembre 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice