Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/06/2011, 15h41   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
Par défaut mysql n'affiche pas les antislash avec mysql_real_escape_string

Je travaille sur une interface d'admin

Quand j'insère des données avec la fonction (safeQote (voir le fichier joint) les antislash n'apparaissent pas dans la base.

les modifs de textes se font mais je ne vois pas les antislash dans la base

Pourtant en retour j'obtiens (par exemple) pour $titre -> \"sans titre\"
Code :
si $titre = safeQuote($postArray['editTitre']);
et $postArray['editTitre'] vaut "sans titre" (avec les guillemets)
Fichiers attachés
Type de fichier : php gregory.php (1,1 Ko, 2 affichages)
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 15h43   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
tu sais à quoi servent les slashes dans ce contexte ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2011, 22h42   #3
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
merci stealth35
(je ne pouvez pas reçevoir le mail d'avertissement pour ta réponse, maintenant je travaille sur l'ordi qui collecte cette adresse ... désolé de ne pas avoir répondu plus tôt)

Les antislash je pense qu'ils sont censés prévenir les attaques sql

(maintenant que je sais qu'il y a la possibilité d'insérer du code je peux écrire ici la fonction safequote que j'ai écrite, ce sera plus simple pour tous

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function safeQuote($value)
{
	if (empty($connexion))$connexion = new connexion('maBase');
	$connexion->open();
 	// Stripslashes si get_magic_quotes_gpc
	if (get_magic_quotes_gpc()) 
	{
 		$value = stripslashes($value);
 	}
	//sauvegarde les accents -> j'en ai besoin pour les appels existants 
	$value= html_entity_decode($value, ENT_QUOTES, "UTF-8");
	//echape ce qui doit l'être.
	$value = mysql_real_escape_string($value);
	$connexion->close();
	return $value;
}
a bientôt
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 01h06   #4
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Salut, le problème est que tu remets une couche d'antislashes via la fonction $value = mysql_real_escape_string($value);
Tu n'as "plus besoins" d'échapper tes données pour les afficher.
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 09h48   #5
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
bonjour,

je ne cherche pas à afficher les données mais à les insérer dans la base.
Après la fonction mysql_real_escape_string (qui est là pour éviter les injections) j'ai une commande INSERT

Ce qu'il y a de bizarre c'est que les antislash sont bien ajoutés dans la variable php (voir le fichier joint) mais que si je contrôle dans la base (avec php myadmin) ils ne sont pas inscrits.

En plus si je n'utilise pas "mysql_real_escape_string" dans la mesure ou j'intègre du texte en utf8 la base me renvoie une erreur.

Du coup je pense que ma fonction est correcte mais je ne comprends pas
pourquoi je les antislash ne s'affichent pas dans la base.
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 12h31   #6
Membre Expert
 
Avatar de Atomya Rise
 
Femme Emilie Lefol
En recherche d'emploi
Inscription : février 2009
Messages : 411
Détails du profil
Informations personnelles :
Nom : Femme Emilie Lefol
Âge : 26
Localisation : France, Somme (Picardie)

Informations professionnelles :
Activité : En recherche d'emploi
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : février 2009
Messages : 411
Points : 1 277
Points : 1 277
(par rapport a ta page gregory.php)

Je vais peut être dire une bêtise mais... a la ligne 18 de ta fonction, cela n'aurais pas du être plutôt comme ceci :

Code php :
$value = "'" . mysql_real_escape_string($value) . "'";

Si c'est une bêtise, on oublie hein

Et a la ligne 41, j'aurais écris ceci à la place car là, tu double tes quotes :
Code php :
$requete = "UPDATE LOW_PRIORITY articles SET titre=" . $titre . ", texte=" . $texte . " WHERE id = " . $id;
__________________

Si un message vous a aidé, pensez à voter positivement pour lui ! Merci
Pas de question technique en privé
- Si on criait sur la place publique les fautes de tout le monde, on ne pourrait plus fréquenter personne ! (Marcel Pagnol)
- Technocrates, c’est les mecs que, quand tu leur poses une question, une fois qu’ils ont fini de répondre, tu comprends plus la question que t’as posée. (Coluche)
Atomya Rise est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 13h19   #7
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
Atomya Rise
merci pour ta réponse.

Utiliser ta proposition à la ligne 18 revient à rajouter des quotes avant l'insertion ... et la ma base (qui semble bien paramétrée) refuse la commande et envoie un message d'erreur.

ta seconde remarque est juste, mais hélas elle ne modifie rien.
en fait on peut aussi écrire :

Code :
$requete = "UPDATE LOW_PRIORITY articles SET titre=$titre, texte= $texte WHERE id =$id";
Tout semble dire que le paramétrage de la base interdit l'insertion d'apostrophse (simples ou doubles) sauf s'ils sont échappés.
Mais que lorsqu'ils sont échappés elle accepte les quotes mais pas les antislash d'échappement.
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 13h24   #8
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Citation:
Envoyé par rogerlenoir Voir le message
les antislash n'apparaissent pas dans la base.
Bonjour,
tu oublies juste que c'est AUSSI de l'affichage de données !
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 14h33   #9
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
jreaux62, merci pour ton intéret.

Ce serait donc normal ?
Tu sembles dire qu'il y aurait une fonction du genre stripslashes qui ferait que je ne vois pas les antislash.

Pourtant si c'était le cas je devrais au moins retrouver mes antislash dans le fichier sql (après avoir fait un export)
Et ce n'est pas le cas.

De plus il y a des anciennes données dans cette base (remarque que je sais pas comment elles ont été insérées) et elles ont des antislash
et chaque fois que j'ouvre ces fichiers dans mon admin et que je les réinjecte les antislash devant les apostrophes (simples ou doubles) ne s'inscrivent plus.
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 15h11   #10
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
Atomya Rise

en fait ma syntaxe était bonne
c'est bien ainsi que l'on doit écrire
Code :
$requete = "UPDATE LOW_PRIORITY articles SET titre='$titre', texte= '$texte' WHERE id ='$id"';
suite à ta proposition j'ai proposé une version sans les simples apostrophes qui encadrent la variable, mais cette version renvoie des erreurs.

Pour info ta version renvoie elle aussi des erreurs
chez moi il faut encadrer ma variable par des simples quotes
Code :
$requete = "UPDATE LOW_PRIORITY articles SET titre='" . $titre . "', texte='" . $texte . "' WHERE id = " . $id;
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/06/2011, 20h15   #11
Membre actif
 
Inscription : février 2009
Messages : 150
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 150
Points : 198
Points : 198
Bon béh c'est que tout va bien alors

Les serveurs ou tu vois un \ s'inscrire dans la base également sont "mal configuré", sont en générale avec magic quotes on (et sans un stripslashes comme dans ta fonction), du coup la variable se prend deux échappements, et donc sql inscrit un \ quand meme, car ta chaine est devenu \\"sans titre\\".
nextdev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2011, 11h08   #12
Invité de passage
 
Inscription : janvier 2007
Messages : 19
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 19
Points : 4
Points : 4
Merci Nextdev,
Grace à toi je vais dormir tranquille !
Je vais donc marquer ce post comme résolu.

Et merci aussi à tous ceux qui ont pris la peine de me répondre.

A+
rogerlenoir est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h56.


 
 
 
 
Partenaires

Hébergement Web