Permettre les ",' dans un champs

Résolu/Fermé
samghami Messages postés 61 Date d'inscription mercredi 21 mars 2012 Statut Membre Dernière intervention 2 mars 2016 - 18 juin 2012 à 17:43
 Utilisateur anonyme - 20 juin 2012 à 16:33
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

vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
Modifié par vordano le 18/06/2012 à 17:49
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
samghami Messages postés 61 Date d'inscription mercredi 21 mars 2012 Statut Membre Dernière intervention 2 mars 2016 1
18 juin 2012 à 18:05
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
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
18 juin 2012 à 18:14
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
samghami Messages postés 61 Date d'inscription mercredi 21 mars 2012 Statut Membre Dernière intervention 2 mars 2016 1
18 juin 2012 à 18:18
Je n'est jamais fais ca :-/ je ne sais pas comment cela fonctionne. Pourrais-tu m'aider?
0
vordano Messages postés 1682 Date d'inscription mardi 12 juillet 2011 Statut Membre Dernière intervention 20 juillet 2012 316
18 juin 2012 à 18:30
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
samghami Messages postés 61 Date d'inscription mercredi 21 mars 2012 Statut Membre Dernière intervention 2 mars 2016 1
18 juin 2012 à 18:37
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
pfdp0 Messages postés 168 Date d'inscription jeudi 22 décembre 2011 Statut Membre Dernière intervention 16 janvier 2018 12
Modifié par pfdp0 le 18/06/2012 à 19:33
Il y a beaucoup plus simple: tu mets
echo htmlspecialchars($variable);
ça devrait aller...
0
samghami Messages postés 61 Date d'inscription mercredi 21 mars 2012 Statut Membre Dernière intervention 2 mars 2016 1
18 juin 2012 à 20:03
Oui mais pour l'insérer le mettre dans la base de données je fais comment ?
0
pfdp0 Messages postés 168 Date d'inscription jeudi 22 décembre 2011 Statut Membre Dernière intervention 16 janvier 2018 12
Modifié par pfdp0 le 18/06/2012 à 20:16
bah tu peux aussi en mettre
$_POST['texte'] = htmlspecialchars($_POST['texte']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
0
samghami Messages postés 61 Date d'inscription mercredi 21 mars 2012 Statut Membre Dernière intervention 2 mars 2016 1
18 juin 2012 à 21:53
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
Tralala8 Messages postés 120 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 12 février 2013 14
19 juin 2012 à 12:06
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
pfdp0 Messages postés 168 Date d'inscription jeudi 22 décembre 2011 Statut Membre Dernière intervention 16 janvier 2018 12
19 juin 2012 à 17:39
Normalement mettre ça suffit:
$_POST['texte'] = htmlspecialchars($_POST['texte']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
0
Utilisateur anonyme
20 juin 2012 à 09:32
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mihawk Messages postés 4313 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 845
Modifié par Mihawk le 20/06/2012 à 10:26
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
Utilisateur anonyme
20 juin 2012 à 16:33
addslashes presente des vulnerabilités , je te la deconseille :(
0