comment utilisé les fonctions Isset et Empty ?

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 : comment utilisé les fonctions Isset et Empty ?

par AB » 10 mars 2007, 20:20

NB: dans ton code initial, tu faisais <?php echo @$login_msg ?> en utilisant @ pour supprimer l'erreur quand $login_msg n'est pas défini. Il ne faut utiliser l'opérateur @ qu'en cas de nécessité absolue. Cela prend beaucoup de ressources serveur et comme dit Ajoloca, les erreurs ça se gère.
Donc il aurait fallu faire (suivant tes besoins)
<?php if(isset($login_msg)) echo $login_msg ?>
ou
<?php if(!empty($login_msg)) echo $login_msg ?>
La première ligne afficherait toutes les valeurs de $login_msg si $login_msg est définie.

La seconde ligne afficherait toutes les valeurs de $login_msg si $login_msg est définie et si $login_msg n'est pas vide et si $login_msg est différente de 0.

Si tu souhaites que la valeur 0 puisse être affichée, mais que rien ne s'affiche si $login_msg est vide, il faudrait faire en reprenant l'exemple ci-dessus :
<?php if(isset($login_msg) && $login_msg != '') echo $login_msg ?>

par AB » 10 mars 2007, 19:18

Et puisque tu commences à apprendre le php, le code ci-dessus est une bonne occasion pour l'introduction aux tableaux.

Pour simplifier un peu plus tout en gardant les mêmes fonctionnalités tu pourrais faire un tableau $message :

code PHP
function verif ($champ,$libelle) {
if(!empty($champ) && trim($champ) != '')
 {
 $erreur_msg = '';
 }
 else
 {
 $erreur_msg = 'Vous devez remplir le champ <b>'.$libelle.'</b>!';
 isset($_POST["MM_update"])? unset($_POST["MM_update"]) : '';
 isset($_POST["MM_insert"])? unset($_POST["MM_insert"]) : '';
 }

return ($erreur_msg);
}

$message = array();
$message['login'] = verif($_POST["login"],'Login');
$message['nom'] = verif($_POST["nom"], 'Nom');
$message['prenom'] = verif($_POST["prenom"],'Prénom');
$message['pass'] = verif($_POST["password"],'Mot de passe');
$message['mail'] = verif($_POST["email"],'Email');
$message['adres'] = verif($_POST["adresse"],'Adresse');
//etc.

code à inclure ou tu veux dans la partie HTML (on liste les éléments du tableau)

Code : Tout sélectionner

<div id="message_erreur"> <?php foreach($message as $valeur) { if (!empty($valeur)) echo $valeur.'<br />'; } ?> </div>
L'avantage maintenant, c'est que tu n'as plus que le tableau de la partie PHP à modifier si tu veux rajouter des variables $_POST à vérifier. Par exemple pour un champ "toto" en plus à vérifier, je n'ai qu'à compléter le tableau avec :
$message['toto'] = verif($_POST["toto"],'Toto');

Bon, mais en fait je ne me sert pas de l'index des éléments du tableau donc on peut faire plus simple pour construire le tabeau :
$message = array();
$message[] = verif($_POST["login"],'Login');
$message[] = verif($_POST["nom"], 'Nom');
$message[] = verif($_POST["prenom"],'Prénom');
$message[] = verif($_POST["password"],'Mot de passe');
$message[] = verif($_POST["email"],'Email');
$message[] = verif($_POST["adresse"],'Adresse');
//etc.
(Le reste du code ne bouge pas)

Avec cette syntaxe, le tableau $message est indexé numériquement, et incrémenté automatiquement (+1) à chaque "$message[]"

par AB » 10 mars 2007, 17:59

oui là c'est obligatoire utilise la fonction foreach() si tu veux tester toutes les données postées :
foreach ($_POST as $cle => $valeur) {
    verif ($différentes_variables);
    }
Attention toutes les valeurs postées seront testées... Donc un peu de tri verif ($_POST["est peut être préférable.
NON cela ne fonctionnera pas dans ce cas puisque la fonction a besoin d'un deuxième argument qui indique le nom du champ qui sera affiché dans le message d'erreur si ce champ est vide.

@Aureusms,
Quand je dis "arrêtez d'employer le terme 'vide' pour définir empty()" c'est parce que ce n'est pas suffisant.
empty() va répondre vrai
- si la variable est vide ($var=''),
- également vrai si $var=0 (et dans ce cas ce n'est pas approprié de dire qu'elle est vide puisqu'elle contient 0),
- également vrai si la variable n'est pas définie (et dans ce cas ce n'est pas approprié de dire qu'elle est vide puisqu'elle n'est pas définie).

'Vide' ne correspond donc qu'à une des trois possibilités pour lesquelles empty() est vrai.

@dreamwebtechnologie,

Il te suffit de remplacer les lignes "//etc" du code précédent par les autres champs que tu veux contrôler avec la fonction vérif, sur le même modèle que les lignes déjà écrites.

Par exemple pour les champs que tu as indiqué cela donne :

code PHP
function verif ($champ,$libelle) {
if(!empty($champ) && trim($champ) != '')
 {
 $erreur_msg = '';
 }
 else
 {
 $erreur_msg = 'Vous devez remplir le champ <b>'.$libelle.'</b>!';
 isset($_POST["MM_update"])? unset($_POST["MM_update"]) : '';
 isset($_POST["MM_insert"])? unset($_POST["MM_insert"]) : '';
 }

return ($erreur_msg);
}

$message_login = verif($_POST["login"],'Login');
$message_nom = verif($_POST["nom"], 'Nom');
$message_prenom = verif($_POST["prenom"],'Prénom');
$message_pass = verif($_POST["password"],'Mot de passe');
$message_mail = verif($_POST["email"],'Email');
$message_adres = verif($_POST["adresse"],'Adresse');
//etc. 

code à inclure ou tu veux dans la partie HTML

Code : Tout sélectionner

<div id="message_erreur"> <?php if (!empty($message_login)) echo $message_login.'<br />'; if (!empty($message_pass)) echo $message_pass.'<br />'; if (!empty($message_nom)) echo $message_nom.'<br />'; if (!empty($message_prenom)) echo $message_prenom.'<br />'; if (!empty($message_mail)) echo $message_mail.'<br />'; if (!empty($message_adres)) echo $message_adres.'<br />'; //etc ?> </div>
Normalement t'as plus qu'a faire du copié coller :wink:
Note : les lignes commençant par // sont des commentaires que tu peux effacer.

par Aureusms » 09 mars 2007, 14:39

oui là c'est obligatoire utilise la fonction foreach() si tu veux tester toutes les données postées :
foreach ($_POST as $cle => $valeur) {
    verif ($différentes_variables);
    }
Attention toutes les valeurs postées seront testées... Donc un peu de tri est peut être préférable.

par thehawk » 09 mars 2007, 10:48

il faut que utilise la fonction verif pour chaque champs ^^

Merci

par dreamwebtechnologie » 09 mars 2007, 10:09

Merci AB je vais bosser sur sa. Donc si j ai bien comprit la fonction Verif va controler tout. Mais pour réaliser ma fonction Verif je doit inclure tous mes champs à controler ou j applique à chaque champs la fonction Verif comme j avai fait opparavent

par Aureusms » 09 mars 2007, 09:17

Salut AB,

Tu écris
...

SVP ARRETEZ d'employer le terme "vide" pour définir empty.
Je ne suis pas d'accord avec toi car ta variable peut être définie en méthode POST ou GET mais être vide. Pour moi une variable "vide" c'est comme un pointeur C++ mais où aucune valeur n'est inscrite dedans.

Bon je ne suis pas un super professionnel en PHP mais cela m'est déjà arrivé au début de tester la variable POST ou GET qu'avec ISSET et elle était "vide", sans rien dedans. (ou si tu veux égale à $variable = '')

par AB » 08 mars 2007, 19:06

Bonjour,

Dans mon code précédent c'est simplement par exemple
isset($_POST["MM_update"])? unset($_POST["MM_update"]) : ''; 
qui se traduit par

si $_POST["MM_update"] est défini, on l'efface sinon on ne fait rien.

on l'utilise souvent pour faire des vérification et attribuer des valeurs par défaut ex :
$a = (isset($_POST['a']) && is_numéric($_POST['a']))? $_POST['a'] : 1 ;
qui veut dire
$a = $_POST['a'] si $_POST['a'] est défini et est numérique sinon $a = 1

On appelle ça ternaire car il y a toujours trois éléments :
- Une condition qui se termine par un ?
- Après le ? , ce que l'on fait si la condition est remplie
- Après le : , ce que l'on fait si la condition n'est pas remplie.

on peux faire l'équivalent avec if et else, mais cette syntaxe est plus rapide à l'exécution et facile à employer pour des conditions simples.

?

par dreamwebtechnologie » 08 mars 2007, 16:58

les opérateurs ternaires
c est koi :?:

par AB » 08 mars 2007, 16:23

...
function verif ($champ) {
if(isset($champ) && !empty($champ)) { // qui veut dire si existe et non vide
  
  $login_msg="";
  }
  else{ // qui veut dire si existe pas ou si vide
        
  $login_msg=" Vous devez remplir le champ <b>login</b>!";
  if(isset($_POST["MM_insert"]))  unset($_POST["MM_insert"]);
  if(isset($_POST["MM_update"])) unset($_POST["MM_update"]);
}
return ($login_msg);
}
A mon avis ça peux marcher comme cela ! essaye et dis nous çà.
Très bonne idée de faire une fonction mais pour préciser un peu, dans
if(isset($champ) && !empty($champ))
la condition isset($champ) est redondante. Si !empty($champ) est vérifié, alors isset($champ) le sera nécécessairement puisque
if(!empty($champ)) {..}
//est équivalent à 
if(isset($champ) && $champ != '' && $champ != 0) {..}
SVP ARRETEZ d'employer le terme "vide" pour définir empty. Ce n'est pas rigoureux et n'aide pas les débutants. $var = 0 est une variable définie et non vide, elle contient 0.

Et puis ta fonction va toujours retourner 'Vous devez remplir le champ <b>login</b>!' ce qui ne sera pas approprié dans tous les cas. Il faut passer un deuxième paramètre dans ta fonction.

Ce qui donne (en employant les opérateurs ternaires pour le fun, et en vérifiant que le visiteur n'envoie pas juste un espace vide par mégarde) :
function verif ($champ,$libelle) {
if(!empty($champ) && trim($champ) != '')
 {
 $erreur_msg = '';
 }
 else
 {
 $erreur_msg = 'Vous devez remplir le champ <b>'.$libelle.'</b>!';
 isset($_POST["MM_update"])? unset($_POST["MM_update"]) : '';
 isset($_POST["MM_insert"])? unset($_POST["MM_insert"]) : '';
 }

return ($erreur_msg);
}
et donc pour la vérification
$message_login = verif ($_POST["login"],'Login');
$message_prenom = verif ($_POST["prenom"],'Prénom');
//etc.
et pour l'affichage des messages dans le code html

Code : Tout sélectionner

<div id="message_erreur"> <?php if (!empty($message_login)) echo $message_login.'<br />'; if (!empty($message_prenom)) echo $message_prenom.'<br />'; //etc ?> </div>
On pourrait aussi passer par un tableau mais bon ...

ok

par dreamwebtechnologie » 08 mars 2007, 15:30

Ok je vais bosser sur la function merci pour cette exemple

par Aureusms » 08 mars 2007, 13:31

Pourquoi ne fais tu pas une fonction car c'est toujours la même syntaxe que tu demande. Du Style :
function verif ($champ) {
if(isset($champ)) {
    if(($champ)) { // à mon avis cette ligne est inutile car tu peux l'interpréter autrement
        //Passed!
        $login_msg="";
    }
    else{
        // Not passed 8-(
        $login_msg=" Vous devez remplir le champ <b>login</b>!";
        if(isset($_POST["MM_insert"]))  unset($_POST["MM_insert"]);
        if(isset($_POST["MM_update"])) unset($_POST["MM_update"]);
        
    }
}
return ($login_msg);
}

 
Pour interroger la fonction :
$message_a_afficher = verif ($_POST["login"]);
ou
$message_a_afficher = verif ($_POST["prenom"]);
A propos sais tu que tu peux mettre de multiple conditions dans la fonction if() ? Ainsi la fonction verif deviendrait :

function verif ($champ) {
if(isset($champ) && !empty($champ)) { // qui veut dire si existe et non vide
  
  $login_msg="";
  }
  else{ // qui veut dire si existe pas ou si vide
        
  $login_msg=" Vous devez remplir le champ <b>login</b>!";
  if(isset($_POST["MM_insert"]))  unset($_POST["MM_insert"]);
  if(isset($_POST["MM_update"])) unset($_POST["MM_update"]);
        
    }
}
return ($login_msg);
}
A mon avis ça peux marcher comme cela ! essaye et dis nous çà.

voilà

par dreamwebtechnologie » 08 mars 2007, 12:58

rebonjour a tous voilà se que j ai réussi à faire
<?php 
if(isset($_POST["login"])) {
	if(($_POST['login'])) {
		//Passed!
		$login_msg="";
	}else{
		// Not passed 8-(
		$login_msg=" Vous devez remplir le champ <b>login</b>!";
		if(isset($_POST["MM_insert"])){
	  		unset($_POST["MM_insert"]);
		}
		if(isset($_POST["MM_update"])){
			unset($_POST["MM_update"]);
		}
	}
}
?>
<?php 
if(isset($_POST["password"])) {
	if(($_POST['password'])) {
		//Passed!
		$password_msg="";
	}else{
		// Not passed 8-(
		$password_msg=" Vous devez remplir le champ <b>password</b>!";
		if(isset($_POST["MM_insert"])){
	  		unset($_POST["MM_insert"]);
		}
		if(isset($_POST["MM_update"])){
			unset($_POST["MM_update"]);
		}
	}
}
?>
<?php 
if(isset($_POST["nom"])) {
	if(($_POST['nom'])) {
		//Passed!
		$nom_msg="";
	}else{
		// Not passed 8-(
		$nom_msg=" Vous devez remplir le champ <b>nom</b>!";
		if(isset($_POST["MM_insert"])){
	  		unset($_POST["MM_insert"]);
		}
		if(isset($_POST["MM_update"])){
			unset($_POST["MM_update"]);
		}
	}
}
?>
<?php 
if(isset($_POST["prenom"])) {
	if(($_POST['prenom'])) {
		//Passed!
		$prenom_msg="";
	}else{
		// Not passed 8-(
		$prenom_msg=" Vous devez remplir le champ <b>prenom</b>!";
		if(isset($_POST["MM_insert"])){
	  		unset($_POST["MM_insert"]);
		}
		if(isset($_POST["MM_update"])){
			unset($_POST["MM_update"]);
		}
	}
}
?>
<?php 
if(isset($_POST["email"])) {
	if(($_POST['email'])) {
		//Passed!
		$email_msg="";
	}else{
		// Not passed 8-(
		$email_msg=" Vous devez remplir le champ avec un <b>email</b> valide!";
		if(isset($_POST["MM_insert"])){
	  		unset($_POST["MM_insert"]);
		}
		if(isset($_POST["MM_update"])){
			unset($_POST["MM_update"]);
		}
	}
}
?>
<?php 
if(isset($_POST["adresse"])) {
	if(($_POST['adresse'])) {
		//Passed!
		$adresse_msg="";
	}else{
		// Not passed 8-(
		$adresse_msg=" Vous devez remplir le champ <b>adresse</b>!";
		if(isset($_POST["MM_insert"])){
	  		unset($_POST["MM_insert"]);
		}
		if(isset($_POST["MM_update"])){
			unset($_POST["MM_update"]);
		}
	}
}
?>
et pour indiquer un message d'erreur
<?php echo @$login_msg ?>
Bon le code fonctionne mais je le trouve un peut trop long en plus je pensse que on peut faire mieux.

par AB » 08 mars 2007, 07:00

Bonjour,
c'est simple empty est utiliser pour savoir si une variable est vide ou pas
isset est utilisé pour savoir si une variable existe ou pas, quelque exemple
empty($var)
va être vrai si ta var est vide
!empty($var)
va être vrai si ta var n'est pas vide
isset ($var)
va être vrai si $var existe
!isset ($var)
va être vrai si $var n'existe pas

un petit tuto sur l'utilisation de isset
Clique ici

et sur empty
Clique ici

Voila :D
ça manque un peu de précision dans les définitions
empty($var)
est vrai si $var = '' ou $var = 0 ou si $var est non définie
!empty($var)
est vrai si $var est définie et $var != '' et $var != 0
isset ($var)
est vrai si $var est définie et quelque soit sa valeur
donc vrai également si $var = '' ou $var = 0
!isset ($var)
est vrai si $var n'existe pas (la variable est non définie)

par ghalaad » 08 mars 2007, 04:38

==> <input type="submit" name="Submit3" value="Envoyer">

if(isset($_POST["Submit3"]) && !empty($_POST["Submit3"]))
{
... tes tests ...
}