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. bah fait un

      $test = array_filter($_POST)
      $nbChampsRemplis = count($test);
      1. Le but était de ne pas spécifier un champ précisément :).
        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. 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. 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 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. 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. 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. J'ai oublié le principale depuis le début !
                  Utilité : Prévenir l'utilisateur qu'il n'a rempli aucun champ - sans javaScript -
                  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. 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. 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. si je comprend bien ton problème, il faudrait plutôt mettre :
                          IF( isset($_POST['reponse']) ){
                          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