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

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    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).
    2
  2. MysticSquall Messages postés 429 Statut Membre 28
     
    value est à null, c'est normal qu'il ne t'affiche rien non ?
    0
  3. Utilisateur anonyme
     
    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
    0
  4. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    si je comprend bien ton problème, il faudrait plutôt mettre :
    IF( isset($_POST['reponse']) ){
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    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é
    0
  7. Utilisateur anonyme
     
    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.
    0
  8. Utilisateur anonyme
     
    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";
    	}
    
    0
  9. Utilisateur anonyme
     
    J'ai oublié le principale depuis le début !
    Utilité : Prévenir l'utilisateur qu'il n'a rempli aucun champ - sans javaScript -
    0
  10. @urels
     
    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;
    }
    0
    1. Utilisateur anonyme
       
      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.
      0
  11. Zep3k!GnO Messages postés 2049 Statut Membre 200
     
    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
    }
    
    0
  12. Utilisateur anonyme
     
    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 -_- ?
    0
  13. Utilisateur anonyme
     
    Zep tu as répondu exactement comme je l'ais fait plus haut, au moins je sais que je ne fais pas fausse route :).
    0
  14. MysticSquall Messages postés 429 Statut Membre 28
     
    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'])
    0
  15. Utilisateur anonyme
     
    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 :)
    0
    1. Utilisateur anonyme
       
      MysticSquall - 12 mai 2011 à 09:22
      bah fait un

      $test = array_filter($_POST)
      $nbChampsRemplis = count($test);
      0
  16. Utilisateur anonyme
     
    Le but était de ne pas spécifier un champ précisément :).
    0
  17. MysticSquall Messages postés 429 Statut Membre 28
     
    bah fait un

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