Concerver des $_POST apres erreur

jantonazzo Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 7 avril 2010 - 26 mai 2006 à 19:21
jantonazzo Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 7 avril 2010 - 29 mai 2006 à 11:15
Bonjour à tous.

J'ai un petit probleme pour concerver les champs envoyé si une erreur s'est produite.

En gros j'ai un formulaire à 7 champs, si les 7 champs sont rensseignés tout ce passe bien
et la page est redirigée vers insertDoc.php.

Par contre si 1 des 4 champs importants est manquant la page n'est pas redirigée mais elle affiche le message d'erreur.

***********************************************************************************

Mon probleme est quand cas de champs manquant, l'erreur s'affiche bien mais les $_POST envoyés ne sont plus dans les

Quelqu'un aurrait une solution à ce probleme. 







<?php



 if (isset($_POST['provenance']))
  {
   $typedoc = $_POST['typedoc'];
   $comment = $_POST['commentaire'];
   $list = $_POST [ 'societe' ];
   $fichier = $_FILES["monfichier"]["name"];
   $from = $_POST['provenance'];
   $file = $fichier;
   $date = $_POST['ddd'];
   



   if (empty($typedoc)) {
    header("Location:indexdoc.php?erreur=typedoc");
   }
   else if (empty($comment)) {
    header("Location:indexdoc.php?erreur=comment");
   }
   else if (empty($list)) {
    header("Location:indexdoc.php?erreur=society");
   }
   else if (empty($fichier)) {
    header("Location:indexdoc.php?erreur=file");     
   }
   else
   {
    header("Location:insertDoc.php");
   }
  }
 
?> 



Merci d'avance !!!

8 réponses

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
26 mai 2006 à 19:56
A partir du moment où tu changes de page, $_POST[] redevient vide.
Le header() fait partie de genre de situation.

Solution ? Mettre le formulaire et le traitement sur la même page, et si y'a une erreur, tu fais un : $erreur = 'file'; ou autre, et dans ton formulaire :

if ( isset($erreur) && $erreur === 'file' ) { // }


L'autre solution consiste à faire passer $_POST[] dans $_SESSION[], mais c'est trop gourmand et ca ne sert à rien dans le cas présent.
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
26 mai 2006 à 20:07
Salut,

une autre solution pas trop inutile :

vérifier la présence de $_POST['truc'] avant de l'utiliser...

par exemple :

$truc = isset( $_POST['truc'] ) ? $_POST['truc'] : 'truc par défaut';
0
jantonazzo Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 7 avril 2010
27 mai 2006 à 19:12
Re bonjour,

Désolé pour hier, je n'etais pas devant mon pc.

J'ai essayé globalement les deux solution mais rien ne fonctionne.

Je suis sur que j'ai du mal integré ce que vous m'avez donné.

Vous pourriez me donner plus de details svp.

Je vous mets ma page complete si ça peut vous aider.

*****************************************************************************************
<?PHP require_once('connect.php'); ?>
<?php
 if (isset($_POST['provenance']))
  {
   $typedoc = $_POST['typedoc'];
   $comment = $_POST['commentaire'];
   $list = $_POST [ 'societe' ];
   $file = $_FILES["monfichier"]["name"];
   $from = $_POST['provenance'];
   $date = $_POST['ddd'];
   $truc = isset( $_POST['typedoc'] );
   if (empty($typedoc)) {
    header("Location:indexdoc.php?erreur=typedoc");
   }
   else if (empty($comment)) {
    header("Location:indexdoc.php?erreur=comment");
   }
   else if (empty($list)) {
    header("Location:indexdoc.php?erreur=society");
   }
   else if (empty($file)) {
    header("Location:indexdoc.php?erreur=file");     
   }
   else
   {
    header("Location:ajout_doc.php");
   }
  }
?> 
<?php include('header.php'); ?>
<?php include ('headerCtDoc.php'); ?>
<?php include ('selectContact.php'); ?>
<?php include ('selectDoc.php'); ?>
          <form enctype="multipart/form-data" name="frmmm" method="post">
           <tr>
           <?php 
            if(isset($_GET['erreur']) && ($_GET['erreur'] == "typedoc"))
            {
             echo '<td class="insertDoc">champs manquant</td>';
            }
            else
            {
            echo '<td class="insertDoc">type de document</td>';
            }
           ?>
           <?PHP

            if(isset($_GET['erreur']) && ($_GET['erreur'] == "comment"))
            {
             echo '<td class="insertDoc">champs nquant</td>';
            }
            else
            {
            echo '<td class="insertDoc">commentaire</td>';
            }
           ?>
           <?php 
            if(isset($_GET['erreur']) && ($_GET['erreur'] == "society"))
            {
             echo '<td class="insertDoc">champs manquant</td>';
            }
            else
            {
            echo '<td class="insertDoc">societe</td>';
            }
           ?>
            <td class="insertDoc">émis par</td>
           <?php
            if(isset($_GET['erreur']) && ($_GET['erreur'] == "file"))
            {
             echo '<td class="insertDoc">champs manquant</td>';
            }
            else
            {
            echo '<td class="insertDoc">localiser le fichier</td>';
            }
           ?>
           </tr>
           <tr>
            <td class="insertDoc">
            <SELECT NAME="typedoc">
            <?php
            if ( isset($erreur) && $erreur === 'typedoc' )
            { 
            echo'<OPTION SELECTED>'.$erreur.'';
            }
            ?>
            
                <OPTION SELECTED>
             <?php include('doctype.php'); ?>
             </SELECT>
            </td>
            <td class="insertDoc">
                
               </td>
            <td class="insertDoc">
             <?php
                       require('connect.php');
                       $sql = "SELECT DISTINCT societe FROM clients WHERE `visibility`<>1 
                              ORDER BY `societe` ASC LIMIT 0, 1000";
                       $req = mysql_query($sql) or 
                              die('Erreur SQL !'.$sql.'
'.mysql_error());
                                mysql_close();
                       echo '<select name="societe">';
              echo '<option></option>';
                       while($liste=mysql_fetch_array($req))
              {
                  echo '<option value=" ' , $liste[0] , ' ">' , $liste[0] , '</option>';
              }
                          echo '</select>';
             ?>

            </td>
            <td class="insertDoc">
               <SELECT NAME="provenance">
             <?PHP include ('fileFrom.php'); ?>
               </SELECT>
            </td>
            <td class="insertDoc">
             
            </td>
           </tr>
           <tr>
            <td class="insertDocSubmit" colspan="5">
             [#
              
              
             ]
                
                
               </td>
           </tr>
          </form>

********************************************************

Voila si ça peut vous aider d'avantage,
Merci d'avance!
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
27 mai 2006 à 19:31
Salut,

Personnellement, je changerais ça :
<?php
 if (isset($_POST['provenance']))
  {
   $typedoc = $_POST['typedoc'];
   $comment = $_POST['commentaire'];
   $list = $_POST [ 'societe' ];
   $file = $_FILES["monfichier"]["name"];
   $from = $_POST['provenance'];
   $date = $_POST['ddd'];
   $truc = isset( $_POST['typedoc'] );
   if (empty($typedoc)) {
    header("Location:indexdoc.php?erreur=typedoc");
   }
   else if (empty($comment)) {
    header("Location:indexdoc.php?erreur=comment");
   }
   else if (empty($list)) {
    header("Location:indexdoc.php?erreur=society");
   }
   else if (empty($file)) {
    header("Location:indexdoc.php?erreur=file");     
   }
   else
   {
    header("Location:ajout_doc.php");
   }
  }
?>

Par ça :

<?php

// Un joli raccourci pour jamais ce tromper...function post( $key, $default false, $error false ) {
    if( !isset( $_POST[$key] ) ) {
       if( $error !== false ) {
          trigger_error( $error ); // Bon là, il faudra que tu gère toi même les erreurs de type E_USER_NOTICE
       }
       return $default;
    }
    return $_POST[$key];
    // moi je fais return addslashes($_POST[$key]); mais rien n'oblige...
}

if( post('provenance') )
  {
   $typedoc = post('typedoc', false, 'Vous devez spécifier un typedoc');
   $comment = post('commentaire', '', 'Pourquoi y\'a pas de commentaire?');
   $list = post('societe', '', 'La sociétée est manquante');
   $file = $_FILES["monfichier"]["name"]; /// !!! faire une fnoction équivalente avec $_FILES
   $from = post('provenance');
   $date = post('ddd');
   $truc = $typedoc!==false;
  
    // header("Location:ajout_doc.php"); <= perte des valeurs de POST si ça...
    require 'ajout_doc.php'; < = Là, tu as encore les POST disponible (ainsi que les variables déclarées ci-dessus
 
  }
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
27 mai 2006 à 19:33
// Bon là, il faudra que tu gère toi même les erreurs de type E_USER_NOTICE
set_error_handler();
0
jantonazzo Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 7 avril 2010
27 mai 2006 à 20:35
Je vais essayé de faire ça, c'est cool en tout cas, merci!
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
28 mai 2006 à 15:56
T'as rien compris de ce que je t'ai dit.

$_POST[] NE TRAVERSE PAS LES PAGES via header() !!!!!!!!!!!!!!!!!!!!!
0
jantonazzo Messages postés 46 Date d'inscription lundi 24 janvier 2005 Statut Membre Dernière intervention 7 avril 2010
29 mai 2006 à 11:15
C'est ce que j'avais compris, tu m'as proposé de mettre mon $_POST dans $erreur puis
if ( isset($erreur) && $erreur === 'file' ) { // }
0
Rejoignez-nous