Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/04/2007, 17h30   #1
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Par défaut Actions effectuées en double : header() renvoie-t-il les données POST ?

Bonjour

J'ai un problème assez sérieux que je n'arrive pas du tout à résoudre.
Si je fais une redirection avec header() sur la même page après le traitement d'un formulaire par POST, les données sont-elles envoyées à nouveau ?

Un peu de code étant plus descriptif d'un long discours, je vous propose ceci (j'ai taillé à la hache).
Il s'agit de rentrer des noms dans une table, et d'indiquer les erreurs de saisie s'il y en a avec la fonction consult_error_disp();
Le problème est que mon code passe 2 fois dans la boucle (la page est exécutée 2 fois) : les erreurs apparaissent en double et surtout les insertions dans la BDD sont faites en double.
Quelqu'un pourrait-il m'expliquer pourquoi ?

Merci beaucoup.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 
<html>
<head>
<?php
$mode = isset($_GET['mode']) ? $_GET['mode'] : 'nouveau';
if(isset($_GET['action']) && $_GET['action'] == 'modif') {
  if(is_null($adresse) or $adresse == '') {
   consult_error("L'adresse n'est pas renseignée", 'adresse');
   $erreur_status = TRUE;
  }
}
 
if($mode == 'nouveau') {
  /*Code d'insert dans une BDD*/
  $sql = "insert into blabla";
  $query = mysql_query($sql);  
  $numero = mysql_insert_id();
  if($numero == 0 or $numero === FALSE) {
    /*En cas d'erreur, on ne change pas de mode, on retourne sur la même page qui indiquera où se trouvent les erreurs*/
    header("Location: ".$_SERVER['SCRIPT_NAME']."?mode=nouveau");
    exit();
  }
  else {
    /*Sinon on change de mode : ce n'est plus une nouvelle création*/
    header("Location: ".$_SERVER['SCRIPT_NAME']."?mode=a_valider&numero=$numero");
    exit();
}
 
<head>
<body>
<form action="?action=modif<?php if(isset($mode)) echo '&mode='.$mode; ?><?php if(isset($numero)) echo '&numero='.$numero; ?>" method="POST" name=form>
Adresse : <textarea name=adresse cols=80 rows=5 size=500><?php echo $adresse; ?></textarea>
<input onClick="this.form.submit();" type=submit value="valider la demande">
</form>
</body>
</html>
et voici le code des fonctions d'erreur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
/*Log une erreur*/
function consult_error($error, $label = NULL)
{
   if ( !isset( $_SESSION['consult_error_labels'][$label] ) ) {
        $_SESSION['consult_error_labels'][$label] = '';
     }
   $_SESSION['consult_error_labels'][$label] .= "$error<br/>";
}
 
 
 /*Affiche les erreurs*/
 function consult_error_disp($label = NULL)
 {
 
   if ( isset( $_SESSION['consult_error_labels'][$label] ) )
   {
    $error = $_SESSION['consult_error_labels'][$label];
    unset($_SESSION['consult_error_labels'][$label]);
    echo("<font color=red><b>$error</b></font>");
   }
  }
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 14h02   #2
Membre éclairé
 
Avatar de genova
 
Inscription : septembre 2004
Messages : 487
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 487
Points : 397
Points : 397
Envoyer un message via MSN à genova
Non, si tu fais une redirection avec un header() les informations en POST ne sont pas renvoyées à nouveau.
__________________
Testez le forum Fire Soft Board, un forum libre, gratuit et français.

Système de template de phpBB - Lisez la FAQ PHP avant toute question si vous débuttez en PHP.
genova est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h54.


 
 
 
 
Partenaires

Hébergement Web