Page 1 sur 1

test champ vide

Posté : 08 sept. 2012, 23:21
par lebossu41
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,
}

Re: test champ vide

Posté : 09 sept. 2012, 09:10
par sirakawa
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
}

Re: test champ vide

Posté : 09 sept. 2012, 13:15
par Aureusms
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;"' : ''; ?> />

Re: test champ vide

Posté : 09 sept. 2012, 13:31
par schim59
Bonjour,

Je trouve plus joli avec un foreach.

Re: test champ vide

Posté : 09 sept. 2012, 18:10
par lebossu41
merci à tous, je vais tester sa

"rec" est le name de mon submit

Re: test champ vide

Posté : 09 sept. 2012, 19:12
par Aureusms
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.

Re: test champ vide

Posté : 09 sept. 2012, 20:12
par sam12
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?

Re: test champ vide

Posté : 13 sept. 2012, 20:16
par Aureusms
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.

Re: test champ vide

Posté : 13 sept. 2012, 23:21
par sam12
D'accord, je ne connaissais pas ce problème.
As-tu une liste de navigateurs ou est-ce seulement de vieux navigateurs? Merci ;)

Re: test champ vide

Posté : 14 sept. 2012, 17:11
par Aureusms
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.

Re: test champ vide

Posté : 15 sept. 2012, 01:40
par sam12
Merci pour le complément d'info ;)
En effet, dans le doute, il vaut mieux le remplir.