test champ vide

Eléphanteau du PHP | 15 Messages

08 sept. 2012, 23:21

bonsoir les amis,

j'ai un probleme concernant la syntaxe d'un empty. j'aimerais que lorsque un des champ soit vide et quand on clique sur le submit mon message echo apparaisse "Les champs marqués d\'un * sont obligatoires". Avec ce code ci-dessous, mon echo apparait directement.
if(isset($_POST["rec"]) && !empty($_POST["nom_client"]) or !empty($_POST["prenom_client"]) or !empty($_POST['adresse_client']))
{
$req = $bdd->prepare('insert into clients(civilite,nom,prenom,adresse,cp,ville,telportable,teldomicile,email) VALUES (:civilite,:nom,:prenom,:adresse,:cp,:ville,:telportable,:teldomicile,:email)');
$req-> execute(array(
'civilite'=>$_POST['civil'],
'nom'=>$_POST['nom_client'],
'prenom'=>$_POST['prenom_client'],
'adresse'=>$_POST['adresse_client'],
'cp'=>$_POST['cp_client'],
'ville'=>$_POST['ville_client'],
'telportable'=>$_POST['teldom_client'],
'teldomicile'=>$_POST['telport_client'],
'email'=>$_POST['mail_client'],
));
echo '<script language="Javascript">
alert ("enregistrement effectué" );
window.close();
window.opener.location.reload();
</script>';
}
else{
echo '<div id="modifier"><font color="#ff0000">Les champs marqués d\'un * sont obligatoires. </font></div>';

en esperant que ous pourriez m'aider,

cdt,
}

Mammouth du PHP | 2278 Messages

09 sept. 2012, 09:10

Un premier test consisterait à vérifier le contenu de $_POST par:
print_r($_POST);
parenthésage obscur (je suis partisan comme le font les matheux de tout parenthéser selon LA priorité qu'on veut appliquer: ça évite de se poser des questions inutiles.) et qu'est-ce que rec, et quel rapport a-t-il avec le reste?
if(
    isset($_POST["rec"]) 
      && 
    !empty($_POST["nom_client"]) 
     or 
     !empty($_POST["prenom_client"]) 
     or 
     !empty($_POST['adresse_client'])
   )
suggestion ·
rédiger la condition en utilisant des égalités et non des différences.
$formulaire_ok = false;
if(isset($_POST["rec"]) //
{
   if ( 
         (empty ($_POST["nom_client"]) or  
         (empty($_POST["prenom_client"])  or
         (empty($_POST['adresse_client'])
    )
}
else // inutile en utilisant $formulaire_okpuisque je suppose que si rec n'est pas renseigné, le reste des tests est inutile
{
retour à la saisie ou mise à faux d'un booléeen qui sera utilisé plus loin
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 1996 Messages

09 sept. 2012, 13:15

Sirakawa t'a donné la bonne solution mais j'ajouterais de boucler sur un tableau pour ne pas omettre de champ :

$formulaire_ok = false;
if(isset($_POST["rec"]) 
{
	$tabObligatoire = array ("nom_client","prenom_client",'adresse_client');
	$tabRetour = array();
	foreach ($tabObligatoire as $champObligatoire)
	{
		if (empty($_POST[$champObligatoire]))
			$tabRetour[] = $champObligatoire;
	}
}
Ensuite tu peux ré-afficher le formulaire mal posté et indiquer au visiteur quel champ a mal été rempli en interrogeant la variable $tabRetour. Il faut cependant que la vérification se fasse avant l'affichage du formulaire (et sur la même page)
<input name="nom_client" value="" <?php echo (!empty($tabRetour) && in_array("nom_client",$tabRetour)) ? 'style="border:red;"' : ''; ?> />
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 229 Messages

09 sept. 2012, 13:31

Bonjour,

Je trouve plus joli avec un foreach.

Eléphanteau du PHP | 15 Messages

09 sept. 2012, 18:10

merci à tous, je vais tester sa

"rec" est le name de mon submit

ViPHP
ViPHP | 1996 Messages

09 sept. 2012, 19:12

Ok alors test d'abord si le formulaire est posté :
<?php
if (!empty($_POST))
{
  //traitement formulaire
  $tabObligatoire = array ("nom_client","prenom_client",'adresse_client');
          $tabRetour = array();
          foreach ($tabObligatoire as $champObligatoire)
          {
                  if (empty($_POST[$champObligatoire]))
                          $tabRetour[] = $champObligatoire;
          }
}
else
{
// affichage formulaire
if (!empty($tabRetour))
{
  ?>
  <p>Les champs indiqués en rouge sont obligatoires !!!</p>
  <?php
}
?>
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
  <input name="nom_client" value="" <?php echo (!empty($tabRetour) && in_array("nom_client",$tabRetour)) ? 'style="border:red;"' : ''; ?> />
  <input type="submit" value="Envoyer" />
</form>
<?php
}
Tu pourras ainsi utiliser la variable $tabRetour indiquée précédemment.
Pour envoyer ton formulaire sur la même page :
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
"REQUEST_URI" est identique à PHP_SELF sauf que les variable passée par url ($_GET) sont prises en compte.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 343 Messages

09 sept. 2012, 20:12

Pour envoyer ton formulaire sur la même page :
<form method="post" action="<?php echo $_SERVER["REQUEST_URI"]; ?>">
"REQUEST_URI" est identique à PHP_SELF sauf que les variable passée par url ($_GET) sont prises en compte.[/quote]
<form method="post" action="">
ne suffit pas?
Développeur web

ViPHP
ViPHP | 1996 Messages

13 sept. 2012, 20:16

Oui et non... tout dépend de la traduction de la page par le navigateur. De plus, certains utilise la meta <base> qui peut contredire le navigateur.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 343 Messages

13 sept. 2012, 23:21

D'accord, je ne connaissais pas ce problème.
As-tu une liste de navigateurs ou est-ce seulement de vieux navigateurs? Merci ;)
Développeur web

ViPHP
ViPHP | 1996 Messages

14 sept. 2012, 17:11

En cherchant un peu je n'ai vu que Safari.
En regardant un peu plus sur le site de W3C, ce paramètre dot être rempli : http://www.w3.org/TR/html401/interact/forms.html#h-17.3
En regardant encore de plus prêt, même si ce paramètre doit être rempli, il est souvent auto-complété par les navigateurs qui récupère le %uri en cas de défaut. En quelque sorte tu as raison. Je pense cependant qu'il est plus sage de le remplir.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 343 Messages

15 sept. 2012, 01:40

Merci pour le complément d'info ;)
En effet, dans le doute, il vaut mieux le remplir.
Développeur web