Notice: Undefined variable:

Gapilongo
Invité n'ayant pas de compte PHPfrance

10 juin 2011, 02:50

<?php

require('add_etudiant.php');
$connexion=mysql_pconnect("localhost","root","");
$base=mysql_select_db("esmod",$connexion);
if (!$connexion)
{
	echo ("Connexion non etablie!");
}
else
{
	$m=new etudiant();
	if (isset($_POST['nom']))
{
	$id[0]=$_POST['nom'];
	}
	if (isset($_POST['prenom']))
{
	$id[1]=$_POST['prenom'];
	}
	if (isset($_POST['login']))
{
	$id[2]=$_POST['login'];
	}
	if (isset($_POST['password']))
{
	$id[3]=$_POST['password'];
	}
	if (isset($_POST['date_jd']))
{
	$id[4]=$_POST['date_jd'];
	}
	if (isset($_POST['date_md']))
{
	$id[5]=$_POST['date_md'];
	}
	if (isset($_POST['date_ad']))
{
	$id[6]=$_POST['date_ad'];
	}
	if (isset($_POST['mail']))
{
	$id[7]=$_POST['mail'];
	}
	if (isset($_POST['adresse']))
{
	$id[8]=$_POST['adresse'];
	}
	if (isset($_POST['codePostal']))
{
	$id[9]=$_POST['codePostal'];
}
if (isset($_POST['sexe']))
{	
	$id[10]=$_POST['sexe'];
	}
	if (isset($_POST['diplome']))
{
	$id[11]=$_POST['diplome'];
	}
	if (isset($_POST['type_formation']))
{
	$id[12]=$_POST['type_formation'];
	}
	if (isset($_POST['num_cin']))
{
	$id[13]=$_POST['num_cin'];
	}
	$m->setEtudiant($id);
	if(!($m->InsertBD($connexion)))
	{ 
		header("Vue/affiche_erreur1.php");
 	 }
	else
	{
		session_start();
		$_SESSION['login']=$_POST['pseudo'];
		$_SESSION['password']=$_POST['password'];
		header("Vue/apresAthen.php");
		}
}
?>



l'erreur est:

Notice: Undefined variable: id in C:\Program Files (x86)\easyPHP\www\Controleur\etudiant\insertEtudiant.php on line 69

$m->setEtudiant($id); line69

devlop78
Invité n'ayant pas de compte PHPfrance

10 juin 2011, 03:36

Quel est le problème ? ca me parait plutot logique ... Ce que j'ai du mal à comprendre en plus, c'est comment peux-tu développer en "MVC" (je vois controlleur, vue, etc) alors que ce code est un vrai désastre. Même moi quand je bâcle mon travail, ça ne ressemble pas à ça.

Donc, pour être constructif :

- La connexion à la base de données n'a rien à faire dans un controleur particulier. C'est à placer sur une page supérieure.
- Si t'as connexion n'est pas établie, ça ne sert à rien de continuer, le else qui suit pollue ainsi la visibilité.
- L'extension mysql est dépassé et les connexions persistantes sont à utiliser avec savoir
- C'est une affaire de goût, mais si tu n'es pas à l'aise avec le langage, mieux vaut utiliser des variables qui ont un nom avec un sens (pourquoi $m ?), surtout dans un code plutot procédural et long comme celui là.
- faire un isset() et ne déclarer une variable qui si le isset réussi te fera obtenir une NOTICE quand tu voudras y accéder. Une possibilité est d'attribuer une valeur nulle par défaut, mais c'est pas non plus la meilleure solution, c'est une question de contexte. Par exemple ici, il vaut mieux pas.
- Tu utilises un tableau. Il vaut mieux déclarer ton tableau avant. Donc $id=array(). En plus tu n'auras plus ta NOTICE.
- si ta condition peut tenir sur une ligne, c'est mieux. Là c'est plus une question de lisibilité.
- header("Vue/affiche_erreur1.php"); n'est pas un header valide. Pour rediriger c'est 'location', entre autres.

Après le reste, il faudrait voir le contexte. Si ta classe model ne vérifie pas les données, $_SESSION['login']=$_POST['pseudo']; pourra entraîner une NOTICE et de sérieux problèmes par la suite ($_SESSION['login'] prendra la valeur null).