Comment vérifier qu'un post est vide - PHP [Résolu/Fermé]

Signaler
-
 newVison -
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

Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
203
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
401
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
7 octobre 2011
27
value est à null, c'est normal qu'il ne t'affiche rien non ?

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
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
203
si je comprend bien ton problème, il faudrait plutôt mettre :
IF( isset($_POST['reponse']) ){

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é

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.

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";
	}

J'ai oublié le principale depuis le début !
Utilité : Prévenir l'utilisateur qu'il n'a rempli aucun champ - sans javaScript -
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;
}
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.
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
203
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
}

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 -_- ?

Zep tu as répondu exactement comme je l'ais fait plus haut, au moins je sais que je ne fais pas fausse route :).
Messages postés
401
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
7 octobre 2011
27
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'])

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 :)
MysticSquall - 12 mai 2011 à 09:22
bah fait un

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

Le but était de ne pas spécifier un champ précisément :).
Messages postés
401
Date d'inscription
lundi 4 juillet 2005
Statut
Membre
Dernière intervention
7 octobre 2011
27
bah fait un

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

Merci pour l'astuce ^^