[PHP] Récupération bdd > formulaire

Discussion dans 'Web, design' créé par BrainCracker, 20 Février 2005.

Statut de la discussion:
Fermée.
  1. Offline
    Hi! :)

    J'ai un ptit problème qui m'embête vraiment bcp! :roll:

    J'ai réalisé un script php pour insérer des données ds une base de données (jusque là, tout va bien) et j'ai ensuite réalisé un autre script pour récupérer et modifier les données de la base de données. Tout allait pour le mieux jusqu'au moment où des apostrophes sont apparues dans les chaines de caractères à insérer!
    Je récupère, en fait, le contenu des champs de ma table dans un formulaire html. Mais quand il y a des apostrophes dans la chaine de caractères récupérée, ce qui suit cette foutue apostrophe n'apparait pas! :pfiou:

    ex:
    - ds la bdd: l'apostrophe
    - ds mon formulaire voilà ce qui est récupéré: l\

    J'ai bien essayé d'utiliser les fontions du style addslashes, etc mais sans succès!

    Plz need help! :cry:
    BrainCracker, 20 Février 2005
    #1
  2. Offline
    null ose();
    Utilise la function preg_quote et après tu utilises la la fonction stripslashes pour afficher les résultats sur une page.

    Ce que tu peux aussi faire, c'est une fonction du genre :

    Code:
    function HtmlCode($str)
    {
       $str = str_replace("é", "é", $str);
       $str = str_replace("è", "è", $str);
       $str = str_replace("è", "è", $str);
       $str = str_replace("â", "â", $str);
       $str = str_replace("&agrave", "â", $str);
       $str = str_replace("’", "’", $str);
       $str = str_replace("'", "’", $str);
       $str = str_replace("\"", """, $str);
       $str = str_replace("ô", "ô", $str);
       
       return $str;
    } //fin HtmlCode()
    qui est mieux car elle rend compatible avec l'HTML 4.01 :wink:
    null, 20 Février 2005
    #2
  3. Offline
    MbK_ Etudjant
    il faut bien echapper les apostrophes.

    avec la fonction addslashes

    pour afficher apres, il faut utiliser la fonction stripslashes(). ceci supprime les \ de la chaine
    MbK_, 20 Février 2005
    #3
  4. Offline
    j0k3r_n0ir ex membre
    Il faut aussi selon la configuration de ton serveur, penser au magic_quotes.

    Quoitesse ?
    Tout simplement une fonction magique tu serveur qui rajoute \ devant toutes les apostrophes pour eviter des attaques via SQL injection par exemple.

    Il suffit pour cela au moment ou tu récupères ta variable du formulaire (on dira contenu pour l'exemple) de tester si cette fonction est active, sinon tu les mets toi même les \ :

    Code:
    $_POST['contenu'] = (!get_magic_quotes_gpc()) ? addslashes($_POST['contenu']) : $_POST['contenu'];
    Ensuite pour l'afficher, tu fais comme on te dit : un bon stripslashes et zou :)
    j0k3r_n0ir, 20 Février 2005
    #4
  5. Offline
    hun hun ... j'ai testé un peu tout ça et il en resort que l'affichage sur page fonctionne correctement (mon texte est "propre" quoi) mais l'affichage ds le formulaire reste tjs inchangé! :?
    BrainCracker, 20 Février 2005
    #5
  6. Offline
    makiavili ex membre
    faut mettre la fonction stripslashes() a ta variable.

    exemple

    $champs = stripslashes($champs);

    <input type="text" name="champs" value="$champs">
    makiavili, 20 Février 2005
    #6
  7. Offline
    null ose();
    Ca peut poser problème, car le résultat peut être :

    Code:
    <input type="text" name="champs" value="salut, je trouve la page [b]"[/b] news [b]"[/b] super !">
    Le problème ? Value= va s'arrêter à page "

    Utilise ma fonction HtmlCode()
    null, 20 Février 2005
    #7
  8. Offline
    MbK_ Etudjant
    En effet, cette fonction a l'air assez simple dans son ensemble. Je vais d'ailleur la garder en memoire :D

    Merci ;)
    MbK_, 20 Février 2005
    #8
  9. Offline
    j0k3r_n0ir ex membre
    Euh ta fonction HtmlCode donnera le même résultat sur ton exemple null ... vu que tu ne traire pas les doubles quotes dans ta fonction ...

    Bon ok faut juste rajouter :
    Code:
    $str = str_replace('"', """, $str); 
    :wink:
    j0k3r_n0ir, 20 Février 2005
    #9
  10. Offline
    null ose();
    Si j0k3r, ma fonction vérifier " et ' donc deux fois ', vu que c'est traité par caractère, il y aura deux fois le caractère HTML
    null, 20 Février 2005
    #10
  11. Offline
    j0k3r_n0ir ex membre
    Euh null ...
    " -> Un caractère
    '' -> Deux caractères

    Ne confond pas les doublequotes, qui ne font qu'un seul caractere et les doubles simplequotes qui font deux caractères.
    j0k3r_n0ir, 21 Février 2005
    #11
  12. Offline
    null ose();
    Alors je vois pas pourquoi ça bugerait :oops:
    null, 21 Février 2005
    #12
  13. Offline
    Ezekiel ! Elite
    je profite de l'occasion pour demander votre avis sur ma fonction pour traiter le formulaire.
    Son objectif est de convertit tout les caractere au format html ainsi que de sécuriser le contenu (eviter les requete sql malveillante...)
    Je l'appelle des que je fais un insert dans la bdd:
    Code:
    			// -------[ Traite les données d'un formulaire ] -----------
    
    	function traite(){
    
    	foreach($_POST as $key => $value)
    
    	$_POST[$key] = nl2br(htmlentities($_POST[$key], ENT_QUOTES));
    	
    	}
    
    Ezekiel !, 21 Février 2005
    #13
  14. Offline
    null ose();
    Ca à l'air bien :p (HtmlEntities() là, c'est comme ma fonction en fait)
    null, 22 Février 2005
    #14
  15. Offline
    Ezekiel ! Elite
    oui mais en plus simple et tu ne dois pas te faire *** a traiter tout les champs du form un par un par un...
    une bête traite(); permet de securisé le contenu d'un formulaire à 30 champs :p
    Ezekiel !, 22 Février 2005
    #15
Statut de la discussion:
Fermée.