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.
et voici le code des fonctions d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>"); } }
Partager