test champ vide

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : test champ vide

Re: test champ vide

par sam12 » 15 sept. 2012, 01:40

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

Re: test champ vide

par Aureusms » 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.

Re: test champ vide

par sam12 » 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 ;)

Re: test champ vide

par Aureusms » 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.

Re: test champ vide

par sam12 » 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?

Re: test champ vide

par Aureusms » 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.

Re: test champ vide

par lebossu41 » 09 sept. 2012, 18:10

merci à tous, je vais tester sa

"rec" est le name de mon submit

Re: test champ vide

par schim59 » 09 sept. 2012, 13:31

Bonjour,

Je trouve plus joli avec un foreach.

Re: test champ vide

par Aureusms » 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;"' : ''; ?> />

Re: test champ vide

par sirakawa » 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
}

test champ vide

par lebossu41 » 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,
}