Page 1 sur 2

affichage des "\" dans une zone de formulaire

Posté : 22 août 2007, 19:49
par mosquitout
Bonjour,

Dans 1 zone de formulaire, j'importe le contenu de ma base et récupère une url du genre:
C:\www\projet\images.jpg

Quand je valide le formulaire et qu'il y a 1 erreur dessus, je réaffiche mon formulaire mentionnant les erreurs et avec les données déjà rentrées. Et là, j'obtiens le résultat:
C:\\www\\projet\\images.jpg

J'ai essayé de placer un "htmlentities" devant mes zones issues de la table mais rien n'y fait. Comment faire pour régler ce pb ?

Par avance merci :)

Posté : 22 août 2007, 20:49
par guillaume40
C:/ ???
Uploade tes images sur un serveur
Parceque la je comprend pas trés bien ^^

Re: affichage des "\" dans une zone de formulaire

Posté : 22 août 2007, 22:30
par Sékiltoyai
Quand je valide le formulaire et qu'il y a 1 erreur dessus, je réaffiche mon formulaire mentionnant les erreurs et avec les données déjà rentrées. Et là, j'obtiens le résultat:
C:\\www\\projet\\images.jpg
Il faut le savoir, mais il y a une directive PHP (bientôt Deprecated, hein AB :p ), magic_quotes_gpc qui échappe toute donnée passée par get, post, ou cookie. Cette driective fait l'équivalent d'un addslashes(). Pour utiliser les données brutes de ton formulaire, il faut donc soit désactiver la directive, ce qui est plutôt conseillé pour le passage à PHP6, soit utiliser stripslashes() pour défaire le travail.

Posté : 23 août 2007, 01:21
par AB
Et si tu veux que ton code passe partout quelque soit la configuration des serveurs tu peux faire, pour réafficher ton formulaire
echo (get_magic_quotes_gpc()) ? stripslashes($_POST['message']) : $_POST['message'];
(en considérant que les données de ton formulaire sont dans $_POST['message'])

Pour le reste je crois que je vais galérer pour faire adhérer Sékiltoyai à une assoc pour la défense de la langue française |*()

Posté : 23 août 2007, 01:44
par Sékiltoyai
Pour le reste je crois que je vais galérer pour faire adhérer Sékiltoyai à une assoc pour la défense de la langue française |*()
Mais mon cher, ceux qui défendent le mieux la langue française ne sont pas forcément les plus stricts, car le fait d'imposer de dire courriel et non mail, de dire gomme à macher et non chewing gum, de dire planche à roulettes au lieu de skateboard, ce n'est pas servir la langue française, c'est la rendre autiste à toute évolution culturelle, et c'est la décrédibiliser vis à vis des jeunes ados boutonneux qui fument des oinj et queni leur reumeu.
Mais je m'égare, je pense avoir fait entendre mon point de vue :)

Posté : 23 août 2007, 02:26
par AB
Mais mon cher, ceux qui défendent le mieux la langue française ne sont pas forcément les plus stricts, car le fait d'imposer de dire courriel et non mail, de dire gomme à macher et non chewing gum, de dire planche à roulettes au lieu de skateboard, ce n'est pas servir la langue française, c'est la rendre autiste à toute évolution culturelle, et c'est la décrédibiliser vis à vis des jeunes ados boutonneux qui fument des oinj et queni leur reumeu.
Mais je m'égare, je pense avoir fait entendre mon point de vue :)
On croirait entendre le fameux linguiste dont j'ai oublié le nom...?
On est tout à fait d'accord :!:

La seule réserve que j'ai, c'est quand des mots sont directement traduisibles sans difficulté et sans équivoque. Mais bon c'est certain qu'en informatique... Je me prends même parfois à nommer des variables en anglais #-o

Posté : 23 août 2007, 02:35
par Sékiltoyai
La seule réserve que j'ai, c'est quand des mots sont directement traduisibles sans difficulté et sans équivoque. Mais bon c'est certain qu'en informatique... Je me prends même parfois à nommer des variables en anglais #-o
Je ne code qu'en anglais. Pense à l'internationnalisation, pense au fait que l'informatique c'est de l'anglais, donc il est logique d'écrire les programmes en anglais aussi (on ne met pas les commentaires en anglais, mais au moins le code …)

Posté : 23 août 2007, 03:49
par AB
Je ne code qu'en anglais. Pense à l'internationnalisation, pense au fait que l'informatique c'est de l'anglais, donc il est logique d'écrire les programmes en anglais aussi (on ne met pas les commentaires en anglais, mais au moins le code …)
Bien entendu :wink:
Tu as du comprendre que mes remarques sont sur le mode humorisitique. Difficile de n'employer que le français sur un forum informatique, et parfois improductif. Je parlais pour un contexte plus général.

J'ai travaillé quelques années comme commercial - avec en préambule : techniques de ventes, psychologie de la communication A.T., P.N.L. etc. - et je suis effaré d'avoir constaté comment certaines techniques très simples peuvent induire des effets décisifs à court ou moyen terme.
Bien entendu, tout le monde n'est pas sensible à l'induction, mais on joue sur le nombre. Il n'est pas nécessaire d'être convaincu à 100% pour déclencher l'achat d'un produit, pas plus qu'il n'est nécessaire de convaincre tout le monde pour obtenir une majorité décisive.

Je pense, mais ça doit être l'âge (ou peut-être l'expérience), que la planète - et donc moi-même - se porteront d'autant mieux qu'il subsistera une diversité culturelle et biologique. Et c'est à mon avis un excellent indice pour la démocratie, également.

Enfin bon, on s'est un peu égaré du billet initial, mais mosquitout a certainement oublié de cliquer sur résolu.

EDIT En fait, j'avais écrit "on s'est un peu égaré du post initial" mais le correcteur automatique de Firefox m'a souligné en rouge. Merci FF. I' am damned :lol:

Posté : 23 août 2007, 09:16
par mosquitout
Ok, cimer AB et SeKiltoyai ;)
Bon pour voir si j'ai bien compris:
1) je désactive ds php.ini les magic_quotes (=> off)
2) pour rentrer des données en base à travers un formulaire, je test :
if(!get_magic_quotes_gpc())
{
      $nom = addslashes($_POST['nom']);
}
else
{
      $nom = $_POST['nom'];
}

puis fais mon insert 
3) pour afficher une données issue de ma bdd, je fais
$ligne = mysqli_fetch_array($resultat);
if(!get_magic_quotes_gpc())
{
      $_POST['nom'] = stripslashes($ligne['nom']);
}
else
{
     $_POST['nom'] = ($ligne['nom']);
}
C'est bien ca ?
Heu, une question comme ca, j'ai rentré ds ma bdd des données à la main avec des \ et des ', ca risque de fausser mon fonctionnement ca ?
Encore grand merci

Posté : 23 août 2007, 12:05
par Sékiltoyai
Il y a mieux que de rentrer dans la bdd avec addslashes. Le mieux, c'est que dès la récupération du formulaire, tu enlèves les slashes, et que lors de l'utilisation de la donnee, si tu as besoin d'échappement, tu utilises la fonction appropriée, par exemple mysql_real_escape_string() pour échapper des données à entrer dans une base MySQL.

Posté : 23 août 2007, 14:22
par Invité
Ok Sekiltoyai, quant tu dis "en récupérant tes données du formulaire", en fait je peux enlever les slashes dès l'alimentation de mon formulaire !?

en suivant ce que tu me dis ca donnerai ca:
// je récupère les données
$ligne = mysqli_fetch_array($resultat);
$_POST['nomprod'] = (!get_magic_quotes_gpc()) ? stripslashes($ligne['nomprod']): $ligne['nomprod'];
$_POST['prixHT']     = (!get_magic_quotes_gpc()) ? stripslashes($ligne['prixHT']): $ligne['prixHT'];

// dans mon form j'ai 
<input type="text" name="nomprod" value="<?php echo (!empty($_POST['nomprod'])) ? $_POST['nomprod'] : '';?>" />
<input type="text" name="prixHT" value="<?php echo (!empty($_POST['prixHT'])) ? $_POST['prixHT'] : '';?>" />

// puis, après control du contenu, taille et type, si c'est ok, pour les enregistrer je fais
$nomprod = mysql_real_escape_string($_POST['nomprod']) 
// pas le prix car non string
// Puis je fais mon update ou insert
Est-ce c'est correct comme ca ?
Encore merci pour cette aide ;)

Posté : 23 août 2007, 14:24
par mosquitout
désolé, j'ai oublié de m'enregistrer avant de répondre.

Posté : 23 août 2007, 14:34
par AB
Développement des conseils de Sékiltoyai :
//Récupération des données issues de ton formulaire
$nom =  (get_magic_quotes_gpc()) ? stripslashes($_POST['nom']) : $_POST['nom']; 

//Insertion dans une bdd
$query = "INSERT INTO user (`nom`) VALUES (mysql_real_escape_string($nom))";
...

//affichage des données récupérées dans la bdd
echo htmlentities($ligne['nom']);

//affichage direct des données issues de ton formulaire
echo htmlentities($nom);

Posté : 23 août 2007, 14:38
par mosquitout
Merci AB, c'est très clair :wink:
En fait je faisais une erreur en utilisant les stripslashes dès la récupération des données AVANT remplissage du formulaire.

Selon ton modèle, il faut les faire APRES validation du formulaire et avant l'enregistrement en base.

Posté : 23 août 2007, 15:01
par AB
Evidemment.
De toute façon tu ne peux pas récupérer des données issues de ton formulaire avant le remplissage et l'envoi de ton formulaire :wink: