Comment vérifier qu'un post est vide - PHP

Résolu
Bonjour,

question toute bête, mais toujours pas trouvé de réponse.

Voici le code pour tester :
	<form method="post">
	        <input type="text" name="reponse" value="" size="3" /><br />
	         <input type="submit" value="Envoyer" />
	</form> ';
	
        //Si le tableau Post n'est pas vide : on l'affiche
	IF( !empty($_POST) ){
		echo'<pre>';
		print_r($_POST);
		echo'</pre>';
	}
	
        //Si le la variable est vide on affiche du texte
	IF( empty($_POST['reponse']) ){
		echo 'Il n\'y a pas de reponse.';
	}


Je ne veux pas devoir tester le post de la deuxième façon car je ne connais pas le nombre d'input qu'il y aura dans mon autre application.

Le résultat pour ceux qui ne peuvent tester le code :

Array
(
[reponse] =>
)

Il n'y a pas de reponse.

Quelqu'un a une solution ?

Un premier merci pour ceux qui se penche sur la question :p.

17 réponses

  1. Et pourquoi empty ne fonctionne pas -_- ?
    Empty fonctionnerai si on avait pour POST :
    Array
    (
    ) 
    

    Alors que tu as
    Array
    (
    [reponse] =>
    ) 
    

    Donc la fonction considère que le tableau n'est pas vide, puisqu'il contient un index et ce dernier a pour valeur '' (vide).
    1. le problème c'est justement que value est à null, et que je passe la condition !empty().
      Le tableau étant vide : il ne devrait pas afficher le post
      1. si je comprend bien ton problème, il faudrait plutôt mettre :
        IF( isset($_POST['reponse']) ){
        1. Non, je ne veux pas tester si une variable - précise - éxiste, mais si le - post - est vide.
          Admettons qu'il y est 50 input, je ne veux pas mettre :
          50 x
          IF( isset($_POST['T['x']) AND !empty ($_POST['T['x']) )

          Je voudrais tester la variable $_POST dans sa globalité
          1. au passage : isset($_POST) ne sers pas non plus.

            Pour une raison que je ne comprends pas, si on ne précise pas une case bien précise du POST, les deux fonctions ne servent à rien.
            1. Voilà une solution que j'ai trouvé :
                      $bPostVide = TRUE;
                      //On regarde chaque champ du post
              	FOREACH($_POST AS $cle => $element){
                              //Si un post n'est pas vide : on met la variable à false
              		IF( !empty($element)){
              			$bPostVide = FALSE;
              		}
              	}
              
              	//Si la variable est à "TRUE" (ou plutôt dirons nous != FALSE / NULL pour le php)
              	IF($bPostVide){
              		echo "le post est vide";
              	}
              
              1. J'ai oublié le principale depuis le début !
                Utilité : Prévenir l'utilisateur qu'il n'a rempli aucun champ - sans javaScript -
                1. Pour moi le empty ne sert que si le tableau existe, ainsi je te propose le bon de code suivant :

                  /*****************************************
                  * Vérification du formulaire
                  *****************************************/
                  // Si le tableau $_POST existe alors le formulaire a été envoyé
                  if(!empty($_POST))
                  {
                  // Le champ 'reponse' est-il rempli ?
                  if(empty($_POST['reponse']))
                  {
                  $message = 'Veuillez indiquer la reponse svp !';
                  }

                  // comme tu ne sait pas le nombre de input, donc tu
                  // regarde si la chaine vide est présente dans le tableau des POST
                  if(in_array("", $_POST))
                  {
                  $message="Remplir tous les champs !!!!";
                  } else {
                  $message="Tu as bien remplit leformulaire !!";
                  }
                  echo $message;
                  }
                  1. T'as réponse est intéressante pour ceux qui veulent que tous les champs soient remplis.
                    Je n'avais pas du tout pensé à :
                     if(in_array("", $_POST)) 


                    Mais le problème que je soulève et que ta première ligne de code :
                    if(!empty($_POST)) 

                    ne sert à rien.

                    La seule façon de vérifier que le post (dans sa version globale) est vide est le code de : Zep3k!GnO.
                2. Humm, ce que je comprends pas dans ta question c'est que :
                  Lorsqu'on submit un formulaire envoyé en post, si tes champs ne sont pas rempli, c'est tout à fait normal que les champs apparaissent dans $_POST avec une valeur vide, car c'est ce que tes valeurs contiennent, 'rien'.

                  Admettons qu'il y est 50 input, je ne veux pas mettre :
                  50 x

                  IF( isset($_POST['T['x']) AND !empty ($_POST['T['x']) )


                  Si tu veux juste tester que TOUTES tes valeurs ne sont pas vide :
                  $bAllOk = true;
                  foreach($_POST as $sPostIndex => $sPostValue){
                      if($sPostValue == ''){
                           echo "<br/>$sPostIndex est vide !";
                          $bAllOk = false;
                      }
                  }
                  if($bAllOk){
                  //Do something
                  }
                  
                  1. Je suppose que le post est à moitié résolu.

                    Pour parer à la fonction empty qui ne fonctionne pas sur le post (dans sa version globale, pas en détaillant chaque case).

                    Le code est ci-dessus.

                    Mais est-ce que quelqu'un a réussi à le condenser en 1 ligne ?
                    Et pourquoi empty ne fonctionne pas -_- ?
                    1. Zep tu as répondu exactement comme je l'ais fait plus haut, au moins je sais que je ne fais pas fausse route :).
                      1. je comprend pas...tu fais un

                        IF( !empty($_POST) ){
                        		echo'<pre>';
                        		print_r($_POST);
                        		echo'</pre>';
                        }
                        


                        normal qu'il passe dans ta boucle...

                        Tu veux tester si $_POST['reponse'] est vide ?

                        Alors test avec !empty($_POST['reponse'])
                        1. OMG tu viens de m'apprendre quelque chose Zep3k!GnO.

                          Si on échange de place les clés et les valeurs, et que le post est vide : on aura une seule clé qui sera vide donc empty fonctionne.

                          $post = array_flip($_POST);
                          
                          IF(empty($post)){
                          	echo 'Merci à Zep3k!GnO pour son aide !';
                          }
                          


                          Merci pour votre aide :)
                          1. MysticSquall - 12 mai 2011 à 09:22
                            bah fait un

                            $test = array_filter($_POST)
                            $nbChampsRemplis = count($test);
                        2. Le but était de ne pas spécifier un champ précisément :).
                          1. bah fait un

                            $test = array_filter($_POST)
                            $nbChampsRemplis = count($test);