Soucis avec header location suite à un formulaire


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 9:09

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: Tout sélectionner
<?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


e-kiwi
Modérateur
Modérateur
 
Messages: 15618
Inscription: 23 Déc 2003

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 9:36

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 ?


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 9:52

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 ?


zeb
WRInaute accro
WRInaute accro
 
Messages: 4569
Inscription: 5 Déc 2004

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 10:03

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: Tout sélectionner
<?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;
          }
       }
    }
?>


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 10:12

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++ ...


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 10:29

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 .!!

retza
WRInaute discret
WRInaute discret
 
Messages: 58
Inscription: 16 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 12:21

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+


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 13:00

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: Tout sélectionner
<?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 ?


IllusionPerdu
WRInaute discret
WRInaute discret
 
Messages: 141
Inscription: 11 Mar 2006

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 13:39

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à...


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 14:27

Ouai bhin la c'est un mystère pour moi 8O :

Voila à quoi ressemble ma page en plus court :
Code: Tout sélectionner
<?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.


tryan
WRInaute passionné
WRInaute passionné
 
Messages: 2355
Inscription: 20 Fév 2005

Re: Soucis avec header location suite à un formulaire

Message le Mer Sep 15, 2010 15:30

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: Tout sélectionner
<?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: Tout sélectionner
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;
}


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: enams90 et 0 invités