8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai des soucis avec un renvoi de variables.
Voici les explications :
- J'ai deux champs dans un formulaire. A la page de validation j'aimerais vérifier que deux champs soient bien remplis, et si l'un ou l'autre est vide alors on affiche un message d'erreur, et l'url de retour comporte les variables envoyées en POST.

Mais le problème est que s'il y a une guillemet simple ou double dans un de ces champs, ça fait tout foirer. Avec la fonction addslashes() j'obtiens 3 antislashes au lieu d'une et les guillemets sont tout de même prises comme guillemet de fermeture.

Quelqu'un peut-il m'aider ?

Code de la page de formulaire :


echo "<form method='post' action='valider_bj.php' enctype='multipart/form-data'>";
			echo "<p>Entrez ici le titre *</p>";
			echo "<p><input type='text' name='titre' maxlength='100' value='".stripslashes($titre)."' class='formulaire' /></p>";
			echo "<p>Entrez ici le contenu de l'article attaché *</p>";
			echo "<p><textarea rows='10' name='article' class='formulaire'>".stripslashes($article)."</textarea></p>";
			echo "<p>Ajoutez ici le bon de participation imprimable</p>";
			echo "<h4>Attention ! Le fichier doit être au format PDF pour être optimisé pour l'impression !</h4>";
			echo "<p><input type='file' name='fichier' size='60' /></p>";
			echo "<p class='centre'><input type='submit' value='Valider' /></p>";
		echo "</form>";


Voici le code de la page de validation


if(empty($_POST['titre']) || empty($_POST['article']))
{
			echo addslashes($_POST['titre']);
			echo "<p class='centre'>Vous devez remplir tous les champs essentiels !</p>";
			echo "<p class='centre'><a href='gestion_bj.php?titre=".addslashes($_POST['titre'])."&amp;article=".addslashes($_POST['article'])."'>Retour</a></p>";
}


Merci d'avance Smiley smile
tu n'as pas forcement besion de addslashes si magic_quotes est activé et deplus ca peut faire doublon
je te conseillerai d'aller voir cette fonction

un exemple d'utilisation:
if ($_POST) {
foreach($_POST as $key => $val) $$key = get_magic_quotes_gpc() ? $val : addslashes (trim ($val));
}

Modifié par caillou (03 Apr 2006 - 17:37)
Ouais en fait ça doit être activé car en enlevant addslashes ça met quand même des antislahes, mais le problème reste persistant, car il ne tient absolument pas compte des guillemets Smiley decu

Mais bon au pire je vais choisir une autre méthode pour vérifier le remplissage des champs avec du javascript en plus ça prendra moins de bande passante Smiley cligne

En tout cas merci pour la réponse Smiley smile
tu as aussi
stripslashes() retourne une chaîne dont les anti-slash on été supprimés. \' devient ', etc. Les doubles anti-slash sont réduits à un seul anti-slash. stripslashes() est la fonction inverse de addslashes().
dans la meme veine pour les textes tu as aussi htmlspecialchars

htmlspecialchars -- Convertit les caractères spéciaux en entités HTML
Description
string htmlspecialchars ( string string [, int quote_style [, string charset]] )


Certains caractères ont des significations spéciales en HTML, et doivent être remplacés par des entités HTML pour être affichés. htmlspecialchars() remplace tous ces caractères par leur équivalent dans la chaîne string. Cette conversion est très pratique pour la programmation web. Si vous devez remplacer tous les caractères, utilisez plutôt htmlentities() à la place.

htmlspecialchars() est pratique pour éviter que des données fournies par les utilisateurs contiennent des balises HTML, comme pour un forum ou un chat. Cette fonction prend un deuxième argument optionnel, qui indique comment doivent être traités les guillemets doubles et simples. Vous pouvez utiliser l'une des constantes suivantes : ENT_COMPAT, la constante par défaut, va convertir les guillemets doubles et ignorer les guillemets simples; ENT_QUOTES va convertir les guillemets doubles et les guillemets simples; ENT_NOQUOTES va ignorer les guillemets doubles et les guillemets simples.

Les remplacements effectués sont :


"&" (et commercial) devient "&amp;"

""" (guillemets doubles) devient "&quot;" lorsque ENT_NOQUOTES n'est pas utilisée.

"'" (single quote) devient "&#039;" uniquement lorsque ENT_QUOTES est utilisée.

"<" (inférieur à) devient "&lt;"

">" (supérieur à) devient "&gt;"
Merci beaucoup de vos réponses.

A mon avis la seule solution sera de mettre html_entities pour palier le problème.
echo "<p><input type='text' name='titre' maxlength='100' value='".stripslashes($titre)."' class='formulaire' /></p>";


mais si magic qotes est sur on (fichier ini) stripslashes est inutile moi je relirai mon code ... et apres je regarderai du coté de html_entities
bon courage
Modifié par caillou (04 Apr 2006 - 03:03)
Administrateur
caillou a écrit :
Smiley smile sorry

Pas grave, mais n'hésite pas à employer avec vigueur le bouton "éditer" Smiley cligne