Variable indefinie malgré isset(...)

Mammouth du PHP | 1353 Messages

05 mai 2006, 10:56

Bonjour,

Mon erreur doit être stupide mais je trouve pas alors je me permet de vous faire part du problème. J'ai sur une page quand j'arrive dessus la première fois toujours la meme erreur :

Notice: Undefined index: nom in /home/ingenieurs/ing2007/giler/public_html/soiree/ajouter.php on line 16

Je ne comprend pas car je vérifie dans un isset($_POST["nom"]) donc normalement je ne devrais pas avoir d'erreur, je vous laisse le code :

(la ligne 16 est le if(verif.......))
function verif($var)
	{
	if(isset($var)&& $var!='') return true;
	else return false;
	}

if(verif($_POST["nom"])&&verif($_POST["prenom"])&&isset($_POST["statut"]))
	{
	require 'connection.php';
	$sql = "INSERT INTO ".$table." VALUES ('".$_POST["nom"]."','".$_POST["prenom"]."',".$_POST["statut"].",'".$contact."')";
	$res = mysql_query($sql);
	if($res) echo "<div class=\"gg\">Personne ajoutée !</div>";
	}
else if(isset($_POST["nom"])||isset($_POST["prenom"])||isset($_POST["statut"]))
	 {
	 echo "<div class=\"erreur\">Erreur, veuillez recommencer</div>";
	 }
Merci d'avance

Eléphant du PHP | 493 Messages

05 mai 2006, 10:59

Bah c'est normal :)
Inverse pour voir
else if(isset($_POST["nom"]) ...
et
if(verif($_POST["nom"]) ...

Mammouth du PHP | 1353 Messages

05 mai 2006, 11:02

ca me décale l'erreur sur la ligne 21 mais le message y est toujours... :cry: Et surtout du coup meme si les 3 champs étaient remplis cela me fera le message d'erreur ...

Comme de toutes facons la fonction verif commence par tester le isset ca revient plus ou moins au meme de toutes facons non ?

Petite précision : La suite de ce code est un formulaire qui rappelle la meme page. Après validation de ce formulaire dans les deux cas (rempli correctement ou pas) le message ne s'affiche plus.

Eléphant du PHP | 493 Messages

05 mai 2006, 11:11

Bon, un peu de paufinationage deja sur verif:
function verif( $var )
{
    // Meme résultat qu'avant mais plus court mais isset deja vérifié
    //return isset( $var ) && ! empty( (string)$var );

    // Shorter ;-)
    return ! empty( (string)$var );
}
Testons voir ...
if ( verif( $_POST[ 'nom' ] ) ){ ... }
Tiens bisarre, ça ne marche pas ! Bah c'est normal :) Bien que ta fonction verifie si ta variable est définie, tu lui passes quand même la variable en argument ! Les fonctions de PHP ne marchent pas comme les macros de C/C++. Il va donc falloir ruser !
$need = array( 'nom', 'prenom', 'statut' );

foreach( $need as $var )
{
    $_POST[ $var ] = isset( $_POST[ $var ] ) ? $_POST[ $var ] : '';
}
Ce petit script va initaliser toutes tes variables POST si elles ne le sont pas. Il suffira ensuite d'appeler verif comme dans ton code précédant !

Mammouth du PHP | 1353 Messages

05 mai 2006, 11:18

Oki je te remercie je comprend d'ou vient l'erreur maintenant.

Mais si j'utilise ta méthode, qui consiste si j ai bien compris a créer les variables en les mettant vide si elles ne sont pas définies, comment puis faire la différence entre une variable définie à vide par la boucle ou une saisie non faite de l'utilisateur ?

Car avec cette boucle j'obtient a chaque fois mon message d'erreur du else if, ce qui est normal car les valeurs sont définies mais vides...

J'espère être clair :?

Eléphant du PHP | 493 Messages

05 mai 2006, 11:21

Part du principe que si un formulaire est bien validé, alors toutes les variables sont définies. Si elles ne le sont pas c'est qu'il a bidouillé. Vu comme ça, vide ou indéfinie, le formulaire n'est pas bien validé ;)

Mammouth du PHP | 1353 Messages

05 mai 2006, 11:24

Ok oui il vaut mieux à ce moment la utiliser le jscript avant la validation pour être sur par exemple si je comprend bien ce que tu dis...

Dans mon cas j'ai un champ de mon formulaire qui est un SELECT donc je peux savoir si il a validé ou non car si il a validé la valeur ne pourra pas etre vide.

Merci en tout cas :D