Soucis avec header location suite à un formulaire

WRInaute passionné
Bonjour,

J'ai un petit soucis qui me casse la tête depuis un petit moment concernant une redirection avec "header location" lié à un formulaire. Mon formulaire à la base suivante :
Code:
<?php 
session_start();
//Ici je récupère des infos transmit d'une autre page par le biais d'une sessions

if(isset($_POST["envoyer"]))
{
//ici récupération du contenue du formulaire avec mis en forme (stripcslashes, htmlspecialchars, etc...)

//ici gestion des erreurs blindé de if et de else if
if($code_postal==''){$erreur_code_postal='<div class="erreur"> Veuillez insérer un code postal.</div>';}
else if(!is_numeric($code_postal)){$erreur_code_postal_numerique='<div class="erreur"> Le code postal ne peut comporter que des chiffres.</div>';}
//etc....
//etc...
if($prix!='' AND !is_numeric($prix)){$erreur_prix_numerique='<div class="erreur"> Le prix ne peut comporter que des chiffres.</div>';}
else
{
//ici connexion à la bd+enregistrement
$result = mysql_query("INSERT INTO TOTO VALUES( .....
//fermeture de la connexion
if (!$result) 
{
    die('Un problème est survenu lors de l\'enregistrement.' . mysql_error());
}
else
{
//on redirige 
header('location:ma-page.php');
exit;
}
//on ferme le 1er else
}
//On ferme isset($_POST["envoyer"]))
}
?>

<!--ici le formulaire-->

Quelque soit les modifications que j'effectue, soit la redirection s'effectue sans prendre en compte les erreurs du formulaire, soit les erreurs sont pris en compte et la redirection ne s'effectue pas :?
Habituellement j'y arrive sans problème mais là ... :?:

Des idées ?

Merci
 
WRInaute accro
if($prix!='' AND !is_numeric($prix))
{
$erreur_prix_numerique='<div class="erreur"> Le prix ne peut comporter que des chiffres.</div>';}
else
{
...
}

ton insert n'est executé que si prix va bien. il peut y avoir des erreurs partout avant, il s'en fiche, vu qu'il est juste conditionné que le prix. ça serait pas ça ton problème ?
 
WRInaute passionné
Merci de ta réponse e-kiwi :),

Effectivement , à partir du moment ou $prix est mal remplit (non vide et autre que des caractères numériques), toutes les erreurs apparaissent.

Du coup, comment y remédier? Par une succession de "else if" dans la gestion des erreurs ?
 
WRInaute accro
c'est super brouillon ton code Tryan, faut tabuler et c'est de suite plus clair.
Sinon une solution simple via une variable qui te donne un état des traitement d'erreur (il y a sûrement plus logique mais disons que pour faire simple et rapide) :

Code:
<?php
    session_start();
    //Ici je récupère des infos transmit d'une autre page par le biais d'une sessions

    if(isset($_POST["envoyer"])){
	    //ici récupération du contenue du formulaire avec mis en forme (stripcslashes, etc...)
	    //ici gestion des erreurs
	    $erreur = false;
	    if($code_postal==''){
	    	$erreur_code_postal='<div class="erreur"> Veuillez insérer un code postal.</div>';
	    	$erreur = true;
	    }
	    if(!is_numeric($code_postal)){
	    	$erreur_code_postal_numerique='<div class="erreur"> Le code postal (...) chiffres.</div>';
	    	$erreur = true;
	    }
	    //etc....
	    //etc...
	    if($prix!='' AND !is_numeric($prix)){
	    	$erreur_prix_numerique='<div class="erreur"> Le prix (...) chiffres.</div>';
	    	$erreur = true;
	    }
	    
	    if(!$erreur){
	    	// si pas d'erreur
		    //ici connexion à la bd+enregistrement
		    $result = mysql_query("INSERT INTO TOTO VALUES( .....");
		    //fermeture de la connexion
		    if (!$result){
		        die('Un problème est survenu lors de l\'enregistrement.' . mysql_error());
		    }else{
		        //on redirige
		        header('location:ma-page.php');
		        exit;
		    }
	    }
    }
?>
 
WRInaute passionné
Merci zeb, je vais essayer cette approche mais je ne comprend toujours pas pourquoi mon code ne fonctionne pas puisque habituellement ça fonctionne ..?

Pour la tabulation, j'ai jamais comprit son fonctionnement sous Notepad++ ...
 
WRInaute passionné
re,

Je viens de tester et toutes les erreur sont prises en comptes mais l'enregistrement ainsi que la redirection ne s'effectue pas. J'ai changé la redirection par un simple texte et rien ne s'affiche ...c'est énervement .!!
 
WRInaute discret
tryan, juste pour savoir, l'insertion en Bdd fonctionne ?

Parce que tu fais un test sur $erreur, qui peux être soit "vide", soit "True", mais jamais "False"
Essaye de l'initialiser au début du script : $erreur=false;

Sinon, essaye avec un espace aprés les ':' de location => header ('location: ma-page.php'); (de mémoire, j'ai déjà des soucis à cause d'une mauvaise écriture de ce header)

Voila, si ça peut te donner 2-3 pistes....

A+
 
WRInaute passionné
salut retza,

Avec les modifications de @zeb, je n'ai aucune insertion en bd. Les erreurs sont détectées -> le formulaire est donc OK mais rien ne se passe (pas d'enregistrement, pas de redirection).

Essaye de l'initialiser au début du script : $erreur=false;
C'est à dire ?

Sinon, certains éléments sont envoyés par sessions depuis mon 1er formulaire. Ces sessions permettent de montrer/cacher certains élément de mon formulaire de cette façon :
Code:
<?php
if($_POST["categorie"]==1 OR $_SESSION["categorie"]==1){?>
Ici s'affiche une partie de mon formulaire
<?php
}
?>
Cela peut il interagir sur le soucis que je rencontre ?
 
WRInaute discret
Avec le code de Zeb ça devrais fonctionner sauf si eventuellemnt il y a un problème d'insertion dans la base de donnée, ou un header (ou simplement un echo) qui a déjà été envoyer avant et qui interfère avec celui là...
 
WRInaute passionné
Ouai bhin la c'est un mystère pour moi 8O :

Voila à quoi ressemble ma page en plus court :
Code:
<?php
    session_start();
    //Ici je récupère des infos transmit d'une autre page par le biais d'une sessions

    if(isset($_POST["envoyer"])){
       //ici récupération du contenue du formulaire avec mis en forme (stripcslashes, etc...)
       //ici gestion des erreurs
       $erreur = false;
       if($code_postal==''){
          $erreur_code_postal='<div class="erreur"> Veuillez insérer un code postal.</div>';
          $erreur = true;
       }
       if(!is_numeric($code_postal)){
          $erreur_code_postal_numerique='<div class="erreur"> Le code postal (...) chiffres.</div>';
          $erreur = true;
       }
       //etc....
       //etc...
       if($prix!='' AND !is_numeric($prix)){
          $erreur_prix_numerique='<div class="erreur"> Le prix (...) chiffres.</div>';
          $erreur = true;
       }
      
       if(!$erreur){
          // si pas d'erreur
          //ici connexion à la bd+enregistrement
          $result = mysql_query("INSERT INTO TOTO VALUES( .....");
          //fermeture de la connexion
          if (!$result){
              die('Un problème est survenu lors de l\'enregistrement.' . mysql_error());
          }else{
              //on redirige
              header('location:ma-page.php');
              exit;
          }
       }
    }
?>
<html>
<head>
***
</head> 
 <body> 

<?php
//On donne un nom au numéro des régions
if($_POST["region"]==1 OR $_SESSION["region"]==1){
	$nom_region='<span class="region">Alsace</span><br/>';
}
$nom_departement ='<span class="departement">'.$departement.'</span><br/>';
if($_POST["categorie"]==1 OR $_SESSION["categorie"]==1){
	$nom_categorie='<span class="categorie">Voitures</span><br/>';
}
?>

<form name="listes" action="#" method="post">

<?php
if($_POST["categorie"]==1 OR $_SESSION["categorie"]==1){?>
	<?php echo $erreur_annee_voiture;?>
	<span class="espace">Année :
	<select name="annee_voiture">
	<option value="">«Choisissez»</option>
	<option value="2010" <?php if($annee_voiture==2010){echo "selected='selected'";}?>>2010</option>
	<option value="2009" <?php if($annee_voiture==2009){echo "selected='selected'";}?>>2009</option>
	</select> 
	</span> 
	<?php}?>
	
<?php echo $erreur_prix_numerique;?>
<label>Prix :</label>
<input name="prix" size="10" maxlength="8" value="" type="text">

<?php
if($_POST["categorie"]==1 OR $_SESSION["categorie"]==1){?>
	<?php echo $erreur_km_voiture;?>
	<label>km :</label>
<input name="prix" size="10" maxlength="8" value="" type="text">
	<?php}?>
	
<input class="boutton" name="envoyer" value="Continuer" type="submit"/> 

</form> 

</body>
</html>

Résultat, pas d'enregistrement, pas de redirection.
 
WRInaute passionné
Je sais que tout le monde s'en fou mais j'ai trouvé le pourquoi du comment :mrgreen: !

Etant donné que certaines partie de mon formulaire s'ouvre en fonction $_POST["categorie"] ou de $_SESSION["categorie"] :
Code:
<?php
if($_POST["categorie"]==1 OR $_SESSION["categorie"]==1){?>
   <?php echo $erreur_km_voiture;?>
   <label>km :</label>
<input name="prix" size="10" maxlength="8" value="" type="text">
   <?php}?>
Il faut alors que je gère les erreurs au cas par cas en fonction de la catégorie sélectionné :
Code:
 if($_POST["categorie"]==1 AND $annee_voiture==0){
$erreur_annee_voiture='<div class="erreur"> Veuillez sélectionner l\'année de votre véhicule.</div>';
$erreur = true;
}
 
Discussions similaires
Haut