Permettre les ",' dans un champs

Résolu
Bonjour, j'ai créer un système de profil etc... pour mon site.
Le problème étant que lorsqu'un utilisateur écrit un " ou ' cela ne fonctionne plus.
MySQL déclare une erreur, comment faire?
En plus lorsque j'ecrit le nom d'une variable ou autre l'on peur afficher le contenue etc... ce que je ne veux pas!

comment faire cela?

5 réponses

  1. salut,

    pour les " et ' tu peux utiliser des fonctions d'encodage (que tu peux trouver facilement sur internet si tu avais cherché)

    et pour ton histoire de variable qu'on peux afficher en nottant son nom dans une zone de texte, tu devrais revoir ton code, utiliser des les " (double quote) pour afficher tes messages (vu que les doubles quote n'interprète pas les variables).

    vérifier le code concerné par l'affichage du contenu de ta variable (il y as probablement un détail qui provoque l'erreur)
    0
    1. Cela ne fonctionne pas.
      voila ce que j'ai mis:
      	    if (isset($_POST["statue"])) {
      		        extract($_POST);
      		      	$statue = addslashes($statue);
      		$statue = $_POST['statue'];
      		$auteur = $userrow['charname'];
      		$profil_name = $utilisateurrow["charname"];
      		$statue = htmlentities($statue, ENT_NOQUOTES | ENT_IGNORE, "UTF-8");
      		$query = doquery("INSERT INTO {{table}} SET id='',date=NOW(),profil_name='$profil_name', content='$statue', auteur='$auteur'", "dynabook");
                
              
          } 
      0
    2. ces deux lignes:
      extract($_POST);
      $statue = addslashes($statue);
      sont (selon moi) complètement inutile (enfin surtout la seconde, mais d'après ce que dit la doc sur extract(), c'est pas utile non plus)
      $statue ne contient rien, toi tu ajoute des \ mais en prime tu écrase l'éventuel valeur de $statue pour la remplacer par $_POST['statue']

      pour l'encodage, tu peux utiliser ça: https://www.php.net/manual/fr/function.urlencode.php
      tu stock les chaines encodé dans ta base, et tu les décodes quand tu veux les lire
      0
    3. Je n'est jamais fais ca :-/ je ne sais pas comment cela fonctionne. Pourrais-tu m'aider?
      0
    4. en faite le but de cette fonction c'est de remplacer certains caractère par leur équivalent sous une autre forme
      si par exemple dans ta variable $statue se trouve la chaine $auteur: actuellement la méthode doquery feras la conversion $statue->$auteur->$userrow['charname']->machin
      donc il faut utiliser une méthode qui encoderas le $ de $statue afin que la chaine soit enregistré comme tel.

      bon après il existe probablement un truc plus simple, mais je pars du principe qu'un développeur dois avoir le contrôle des données qu'il traite, donc tu peux faire tout les traitements que tu veux a tes données, si tu fait les traitement inverse pour pouvoir les lire, ça passe
      0
    5. Peux tu me dire quel code et où le mettre ?
      Car je débute vraiment dans le webmastering (si tu préfère j'ai que 16 ans et je fais ça que depuis 9-10 mois :) )
      0
  2. Il y a beaucoup plus simple: tu mets
    echo htmlspecialchars($variable);
    ça devrait aller...
    0
    1. Oui mais pour l'insérer le mettre dans la base de données je fais comment ?
      0
      1. bah tu peux aussi en mettre
        $_POST['texte'] = htmlspecialchars($_POST['texte']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
        0
      2. j'ai mis cela:
        	    if (isset($_POST["statue"])) {
        		        extract($_POST);
        		      	$statue = addslashes($statue);
        		$_POST['statue'] = htmlspecialchars($_POST['statue']);
        		$statue = htmlspecialchars($_POST["statue"]);
        		$auteur = $userrow['charname'];
        		$profil_name = $utilisateurrow["charname"];
        		$query = doquery("INSERT INTO {{table}} SET id='',date=NOW(),profil_name='$profil_name', content='$statue', auteur='$auteur'", "dynabook");
                  
                
            } 


        Mais cela ne fonctionne pas :-/
        0
      3. Bon alors on va procéder dans l'ordre :

        Les trois premières lignes de ta condition ne servent à rien dans ton cas : tu peux les virer.
        $userrow["charname"] et $utilisateurrow["charname"] : il y a quoi comme valeur dans ces variables ? Elles ne sont définies nulle part.
        0
      4. Normalement mettre ça suffit:
        $_POST['texte'] = htmlspecialchars($_POST['texte']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
        0
    2. salut,
      avants de mettre les post ou get dans une base de donnée, tu fais les fait passer en parametre dans la fonction mysql_real_escape_string(); et tu recuperes la sortie, normalement ca resoudera ton probleme...
      0
      1. Contributeur
        Bonjour,

        Il y a aussi la fonction "addslashes($maChaine);" qui permet d'échapper les caractères tels que les quote, afin d'éviter qu'ils ne soient détecter comme des fins de chaîne par les scripts.

        Une fois les infos en base, on les récupère normalement et on enlève les antislashes en trop par la méthode "stripslashes($maChaine);"
        Mihawk
        "The Weapon of Choice"
        0
        1. addslashes presente des vulnerabilités , je te la deconseille :(
          0