affichage des "\" dans une zone de formulaire

Eléphant du PHP | 55 Messages

22 août 2007, 19:49

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 :)

Eléphant du PHP | 68 Messages

22 août 2007, 20:49

C:/ ???
Uploade tes images sur un serveur
Parceque la je comprend pas trés bien ^^

ViPHP
ViPHP | 5924 Messages

22 août 2007, 22:30

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.

ViPHP
AB
ViPHP | 5818 Messages

23 août 2007, 01:21

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 |*()

ViPHP
ViPHP | 5924 Messages

23 août 2007, 01:44

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 :)

ViPHP
AB
ViPHP | 5818 Messages

23 août 2007, 02:26

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

ViPHP
ViPHP | 5924 Messages

23 août 2007, 02:35

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 …)

ViPHP
AB
ViPHP | 5818 Messages

23 août 2007, 03:49

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:

Eléphant du PHP | 55 Messages

23 août 2007, 09:16

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

ViPHP
ViPHP | 5924 Messages

23 août 2007, 12:05

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.

Invité
Invité n'ayant pas de compte PHPfrance

23 août 2007, 14:22

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 ;)

Eléphant du PHP | 55 Messages

23 août 2007, 14:24

désolé, j'ai oublié de m'enregistrer avant de répondre.

ViPHP
AB
ViPHP | 5818 Messages

23 août 2007, 14:34

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);
Modifié en dernier par AB le 23 août 2007, 14:38, modifié 1 fois.

Eléphant du PHP | 55 Messages

23 août 2007, 14:38

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.

ViPHP
AB
ViPHP | 5818 Messages

23 août 2007, 15:01

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: