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

Résolu/Fermé
Utilisateur anonyme - 11 mai 2011 à 17:01
 Utilisateur anonyme - 19 mai 2011 à 11:46
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.
A voir également:

17 réponses

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
11 mai 2011 à 17:51
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
MysticSquall Messages postés 401 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 7 octobre 2011 27
11 mai 2011 à 17:04
value est à null, c'est normal qu'il ne t'affiche rien non ?
0
Utilisateur anonyme
11 mai 2011 à 17:08
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
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
Modifié par Zep3k!GnO le 11/05/2011 à 17:15
si je comprend bien ton problème, il faudrait plutôt mettre :
IF( isset($_POST['reponse']) ){
0

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

Posez votre question
Utilisateur anonyme
11 mai 2011 à 17:19
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
Utilisateur anonyme
11 mai 2011 à 17:22
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
Utilisateur anonyme
11 mai 2011 à 17:27
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
Utilisateur anonyme
11 mai 2011 à 17:29
J'ai oublié le principale depuis le début !
Utilité : Prévenir l'utilisateur qu'il n'a rempli aucun champ - sans javaScript -
0
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
Utilisateur anonyme
11 mai 2011 à 17:41
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
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
11 mai 2011 à 17:34
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
Utilisateur anonyme
11 mai 2011 à 17:43
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
Utilisateur anonyme
11 mai 2011 à 17:46
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
MysticSquall Messages postés 401 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 7 octobre 2011 27
11 mai 2011 à 17:56
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
Utilisateur anonyme
11 mai 2011 à 17:57
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
Utilisateur anonyme
19 mai 2011 à 11:46
MysticSquall - 12 mai 2011 à 09:22
bah fait un

$test = array_filter($_POST)
$nbChampsRemplis = count($test);
0
Utilisateur anonyme
11 mai 2011 à 18:02
Le but était de ne pas spécifier un champ précisément :).
0
MysticSquall Messages postés 401 Date d'inscription lundi 4 juillet 2005 Statut Membre Dernière intervention 7 octobre 2011 27
12 mai 2011 à 09:22
bah fait un

$test = array_filter($_POST)
$nbChampsRemplis = count($test);
0
Utilisateur anonyme
12 mai 2011 à 09:36
Merci pour l'astuce ^^
0