Permettre les ",' dans un champs

Résolu
samghami Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
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   Statut Membre Dernière intervention   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
vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
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   Statut Membre Dernière intervention   1
 
Je n'est jamais fais ca :-/ je ne sais pas comment cela fonctionne. Pourrais-tu m'aider?
0
vordano Messages postés 1685 Date d'inscription   Statut Membre Dernière intervention   316
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   12
 
Il y a beaucoup plus simple: tu mets
echo htmlspecialchars($variable);
ça devrait aller...
0
samghami Messages postés 61 Date d'inscription   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   12
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   14
 
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   Statut Membre Dernière intervention   12
 
Normalement mettre ça suffit:
$_POST['texte'] = htmlspecialchars($_POST['texte']); // On rend inoffensives les balises HTML que le visiteur a pu rentrer
0
Utilisateur anonyme
 
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 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
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
 
addslashes presente des vulnerabilités , je te la deconseille :(
0