8792 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je vous expose mon problème :

J'ai un formulaire. Une fois celui-ci rempli, il passe par une validation côté client(Javascript), et ensuite côté serveur (PHP).

Si une erreur de champ survient (Exemple : Format d'adresse mail incorrect), avec la validation client, c'est pratique, puisque Javascript ne touche pas au contenu des champs.

Mais du côté serveur, après l'appel de ma page PHP de validation, j'aimerais, en cas d'erreur pouvoir récupérer les données que l'utilisateur aura déjà rentrées. (Pour que ce soit plus facile pour lui et non rébarbatif.)

J'ai fait des recherches sur le net et sur le forum, mais la seule possibilité que j'ai trouvée et qui ne me plaît pas trop vu la taille maximum des données est l'utilisation de la méthode GET_... de PHP. Qui viendra recharger la page et réintroduire les différentes variables dans les champs correspondants.

Ma question : Y a-t-il un autre moyen afin d'effectuer cela ? (Je l'espère...)

Merci!

O'neil

P.S : J'espère que tout le monde aura bien compris ma question.
Modifié par oneil (08 Sep 2005 - 10:50)
Salut,

Je code en ASP mais le résonnement est valide pour le PHP aussi

personnellement pour gérer ce genre de choses, je définis des variable de session avec le contenu de saisi des champs en arrivant sur la page de validation des données coté serveur.

si tous ce passe bien elles sont détruites après insert et traitement, sinon retour à la page de formulaire , un test d'existance de contenu dans les variables en question si oui je passe en mode "erreur" et j'affiche la valeur de session comme valeur par defaut pour les champs....

en fin de page je les kill pour qu'elles soient bien recrées si une autres erreur se présente.

tu me suis ?
Hum,,,,, J'essaie de comprendre...

Donc,Si je comprends bien :

1) Quand on clique sur "submit" => côté serveur : On crée/stocke les variables sessions.
2) Tu les traites. Dans la page d'action du formulaire,

2A) Si une erreur survient, tu rappelles la page et tu insères les variables de sessions dans les champs correspondants au formulaire. (et une fois qu'elles sont réinsérées sur le formulaire, tu les détruits (enfin, c ce que je ferais...)).

2B) Si ok : tu les mets qqpart (Base de données ou autre,,,) et tu les détruits?

3) (petite question : ta session est créée à l'arrivée de l'utilisateur sur la page du formulaire ou alors depuis le début sur le site? Parce que moi, je n'utilise pas les sessions, (enfin, je les ai déjà utilisées, mais pas sur ce site.) est-il possible de les utiliser sur une seule, voire deux pages du site?).

Merci,

O'neil.
Exactement...


je ne sais pas pour PHP, mais rien n'empéche de créer des variables de session n'importe ou n'importe quand. Donc oui je les "définit" en haut de la page de traitement.... si touts est ok je les kill après traitement, sinon elles seront détruire aprrès affichage des valeurs dans le formulaire et bien sur avant retraitement...


en fait pour bien faire il faudrait les créer uniquement si erreur.... c'est vrai, j'suis nul Smiley cligne
OK. Merci beaucoup!!!

Je vais tenter ça tout de suite! Et j'espère que ça fonctionnera.

O'neil
Salut,

Il existe une autre facon de faire qui est peut etre un peu plus simple. C'est en fait effectuer les traitement de verification sur la meme page que ton formulaire. Voici un petit exemple qui sera plus simple que tout un discours


<?
 $champs1 = "";
 $champs2 = "";
 $champsN = "";

 if (isset($_POST["envoyer"] && $_POST["envoyer"] == "une_action")
 {
  $champs1 = $_POST["nom_du_champs_1"];
  $champsN = $_POST["nom_du_champs_N"];

  //tu effectues tout les traitements que tu veux
  //tu peux stocker les erreurs dans un tableau $tab_erreur[] ou une chaine 
  //de caractère $erreur = "ton message";
 }

 if (!isset($_POST["envoyer"] || !empty($tab_erreur))
 {
?>
  <!-- ton formulaire -->
  <input type="text" name="un_nom" value="<? echo $champs1; ?>" />
<?php
 }
?>


Ainsi, tu peux facilement revenir à ton formulaire tout en conservant les valeurs correctes saisies par l'utilisateur. Et si ton formulaire est vraiment très long, tu peux le mettre dans une autre page php et l'inclure ensuite afin que le tout soit plus clair

Voila, j'espere que cela t'aura aidé
Smiley cligne
Modifié par ymhotepa (06 Sep 2005 - 16:21)
Ok, je comprends ce que tu veux dire, merci,

Je vais tester ces deux méthodes et je vous donne des nouvelles. Mais c'est vrai que celle que tu montres a l'air un peu moins farfelue... Enfin, à mon avis.

Merci,

O'neil.
C'est clair que c'est idéal d'avoir le tout dans la même page, mais je préfére séparer le traitement, y'a souvent beaucoup de code à ce niveau et sa devient lourd à la fin dans un même doc... Smiley smile
J'ai personnellement trouvé un raccourci très simple et très pratique masi qui ne fonctionne pas pour les select ou les case à cocher.

<?php

echo('
<input type="text" name="truc" value="'.@$_POST['truc'].'" />
<textarea name="machin" ... >'.@$_POST['truc'].'</textarea>
');

?>


si la variable n'existe pas, le @ masque l'erreur et le champs est affiché vide Smiley cligne

-- Aenario --
ernstein a écrit :
y'a souvent beaucoup de code à ce niveau et sa devient lourd à la fin dans un même doc...


T'as tout à fait raison ernstein, c'est pour ça que l'idéal c'est de mettre le formulaire dans un fichier à part que tu inclues ensuite dans ta page de traitement. Tu as alors des fichiers plus lisibles.
ymhotepa > hum ........ pas mal çà... y'a des jours ou je ne dois pas être très rn forme moi.....

je vais essayer çà aussi... Smiley biggrin
Splendide, ça marche impec!!!

Désolé ernstein, mais je pense que je vais priviléfier la solution de ymhotepa,

Tu ne m'en veux pas trop j'espère! Smiley cligne Smiley rolleyes

Merci à vous!
Aenario a écrit :
J'ai personnellement trouvé un raccourci très simple et très pratique masi qui ne fonctionne pas pour les select ou les case à cocher.

<?php

echo('
<input type="text" name="truc" value="'.@$_POST['truc'].'" />
<textarea name="machin" ... >'.@$_POST['truc'].'</textarea>
');

?>

Il faut passer les $_POST['truc'] dans stripslashes() sinon tu risques d'avoir des surprises au niveau des guillemets par exemple, et surtout, surtout, il faut les passer à la moulinette d'htmlspecialchars() sinon tu risques d'avoir des surprises beaucoup plus grandes, comme des failles de sécurité de type XSS.

[Ahem... y a un gros problème avec les fermetures de textarea lors de la prévisualisation sur ce forum, à croire que justement les données ne sont pas échappées...]
Bonjour,

ernstein a écrit :
C'est clair que c'est idéal d'avoir le tout dans la même page, mais je préfére séparer le traitement, y'a souvent beaucoup de code à ce niveau et sa devient lourd à la fin dans un même doc... Smiley smile


C'est là le grand intérêt de la fonction "include()" en php : la page contient quelques conditions qui appellent soit le formulaire, soit le script de traitement, qui sont chacun un script pouvant être enregistrés dans un dossier réservé aux scripts.

Ainsi il n'y a jamais de "page" surchargée de code, en sachant que chacun de ces scripts peut en appeler d'autres de façon conditionnelle au moyen de ce "include()".

Cela permet de développer des petits scripts de fonction pour effectuer des petits traitements (par exemple mettre une date en clair à partir d'un timestamp, ou traiter des variables transmises par GET ou POST, etc...).
Héhéhé... je vais aussi faire de même... deux pages pour une maintenance plus simple, mais utilisés en include pour bénéficier des variables locales.


Merci pour le tuyau.