recuperer les valeurs en cas d'erreur !

Eléphant du PHP | 96 Messages

16 févr. 2007, 15:46

Hello !

J'ai un formulaire d'inscription, le membre le remplis et la page verification.php vérifie toute les données !

Si le membre se plante lors de son inscription, l'erreur lui est signalé et un lien lui permet de revenir en arrière pour corriger son erreur !

Le problème, et ouai, y'en a un :wink: c'est que quand il revient en arrière, tout c'est effacé !

Donc, comment je pourrais faire pour que les champs qu'il a remplis ne s'effacent pas lorsqu'il retourne sur la page d'inscription car tout retapé pour 1 seul erreur de commise, c'est lourd a force ?

Merci de vos réponses !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 févr. 2007, 16:10

Généralement, ce que l'on fait c'est de mettre validation et formulaire dans la même page (la validation ne s'effectuant que si des données ont été envoyées). Ainsi en cas d'erreur, tu disposes des données qui viennent d'être envoyées et tu peux les réafficher dans le formulaire (en valeur par défaut) avec un message signalant ce qui ne va pas :)

Si tu passes par un second script pour la validation, il te faut renvoyer les données saisies (ou les stocker en session) et de même les récupérer lorsque tu reviens sur ton formulaire pour les afficher en valeur par défaut de tes champ :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 96 Messages

16 févr. 2007, 16:17

Merci Ryle mais aurait tu un début de piste ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 févr. 2007, 16:32

Tu veux dire un "début de piste" en plus des 3 que je viens de te donner ? :)

- Tu peux soit tout mettre dans le même fichier, valider et re-renseigner les champs à la volée
- Tu peux stocker les données envoyées dans une session et re-renseigner le formulaire à partir de la session quand tu reviens dessus
- Tu peux renvoyer les données reçu en GET via le lien que va cliquer l'utilisateur (attention, c'est limité en taille) pour retourner au formulaire et re-renseigner le formulaire à partir de $_GET quand tu reviens dessus

Commence déjà par en choisir une et essayer de la mettre en place, pis si tu ne t'en sors pas avec on explorera la piste ensemble un peu plus avant ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 96 Messages

16 févr. 2007, 16:51

Bon,

j'ai opté pour le stockage en session !

$_SESSION['pseudo'] = $pseudo; sur la page de vérif !

et <?php echo $_SESSION['pseudo'] ?> en value sur le champ concerné !

ben voilà, un problème de + régler :wink:

merci !

Eléphant du PHP | 52 Messages

10 avr. 2007, 14:34

Salut Ryle,

de mon coté j'ai utilisé la première méthode ça marche à merveille, mais le problème est que lorsque je veux faire une redirection en cas de succée ça plante avec le fameux message :

"Cannot modify header information - headers already sent by.."

y'a t il une solution?

Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 avr. 2007, 15:07

La solution est à priori de ne rien envoyer au navigateur avant le header() :)

En gros, le contrôle de tes champs est la première chose à faire dans ta page, avec ton header() en cas de succès. Ensuite seulement tu envois le html avec ton formulaire :
<?php
if(isSet($_POST['champ'])) { // si tu reçois les données du formulaire
  ... // vérif diverses et variées
  if($succes) {
    header(...)
    exit();
  }
}
?>
<html>
...
<form> 
...
</form>
Ca ne fonctionne naturellement pas si tu utilises des pseudo-frames, grosse lacune de ces dernières selon moi :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 2144 Messages

10 avr. 2007, 15:40

Ca ne fonctionne naturellement pas si tu utilises des pseudo-frames, grosse lacune de ces dernières selon moi :)
C'est pour ça que j'ai toujours préféré le système de pseudo-frame où le fichier inclu les parties communes, au lieu d'avoir un fichier génénique qui inclus la page à afficher.
On peut faire ses petits traitements (et redirection éventuelle par header), avant d'inclure du code html)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 avr. 2007, 15:50

Ouééé !! Je fais tout pareil !
Toi t'es mon copaing ! :D

(message à caractère hautement inutile, je le reconnais, mais ca fait plaisir de voir qu'on est pas le seul à ne pas supporter ces stupides pseudo-frames ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 52 Messages

11 avr. 2007, 09:02

Merci bien,

J'ai oublié peut être de mentionner que je fais les tests de validation dans le code html du genre :
<?php
if(isset($_POST['send']))
{
     $val = new Validation() ;
}
<html>
<body>
<form action =<?php echo($_SERVER['PHP_SELF']); ?>">
<input type="text" name="txt">
<?php 
if($val->validField($_POST['txt']))
      header("Location:...");
else
     echo "wrong field" ;
?>
<input type="submit" name="send">
</form>
</body>
</html>
est-il possible de le faire ainsi?

Merci.