Undefined variable

Bonjour,

Je viens vers vous parce que je débute en PHP et que j'ai un petit souci au niveau d'un fichier et je ne comprends pas trop pourquoi en fait. Voici le code:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/
DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
 
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  <link href="../style.css" rel="stylesheet" type="text/css"/>
  <title>Ajouter une catégorie</title>
</head>
 
<body>
 
<div id="moncadre">
<?php include('menu.php');?>
 
<div class="cadrecentrale">
<h1>Ajouter une catégorie</h1>
<?php
//Si l'action de valider a été faite
if(isset($_POST["Valider"]))
{
$titre = htmlspecialchars(stripcslashes(trim($_POST["titre"])));
$description = htmlspecialchars(stripcslashes($_POST["description"]));
//Vérification du formulaire
if(empty($titre)){
$alerte0 = '<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de titre.</div>';
}
else if(empty($description)){
$alerte1 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de description.
</div>';
}
//Si tout est ok
else
{
//on se connecte à la base de données
include('../connexion_bd.php');
 
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier connexion_bd.php.');
 
//on enregistre les données
$result = mysql_query("INSERT INTO CATEGORIES VALUES('','".mysql_real_escape_string($titre)."','".mysql_real_escape_string($description)."')");
//Si il y a une erreur, on crie ^^
if (!$result) {
    die('Requête invalide : ' . mysql_error());
}
else{
//Si tout est ok, on informe le webmaster
$message_ok = '<div class="erreur"><a name="ok"></a><b>Catégorie enregistrée 
avec succès!</b></div>';
}
//On ferme else
}
//On ferme if(isset($_POST["Valider"]))
}
?>

  <?php echo $message_ok;?>
<form action="#ok" method="post">
  <?php echo $alerte0;?>
 <p>Titre de la catégorie :<br/>
 <input name="titre" size="65" value="<?php
 if (!empty($_POST["titre"])) {
 echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES));
 }?>" type="text"/></p>
  <?php echo $alerte1;?>
 <p>Description de la catégorie :<br/>
 <textarea name="description" rows="10" cols="50" ><?php
 if (!empty($_POST["description"])) {
 echo stripcslashes(htmlspecialchars($_POST["description"],ENT_QUOTES));
 }?></textarea></p>
 
 <p>
 <input name="Valider" value="Valider" type="submit"/>
 <input name="Effacer" value="Effacer" type="reset"/>
 </p>
</form>
</div>
 
<?php include('../footer.php');?>
 
</div>
 
</body>
 
</html>


Voici les erreurs affichés:

Notice: Undefined variable: message_ok in C:\wamp\www\cms\admin\ajouter-categorie.php on line 59
Notice: Undefined variable: alerte0 in C:\wamp\www\cms\admin\ajouter-categorie.php on line 61
Notice: Undefined variable: alerte1 in C:\wamp\www\cms\admin\ajouter-categorie.php on line 67

Donc j'ai bien compris qu'il ne trouvait pas les variables "message_ok", "alerte0" et "alerte1" mais pourquoi alors qu'elles sont déclarées plus haut? De plus lorsque j'exécute le formulaire, ce dernier fonctionne, de même que les messages d'erreurs lorsque par exemple on n'entre pas de titre :)

Donc si une âme charitable pouvait m'aiguiller ce serait sympa :)

Vincent

P.S.: si ça peut aider je suis sous un environnement local avec wamp

Version de Apache: 2.2.17
Version de PHP: 5.3.4
Version de MySQL: 5.1.53

2 réponses

  1. Bonsoir,

    Tant que tu n'as pas soumis le formulaire les variables $message_ok, $alerte0 et $alerte1 n'existent pas pour PHP et donc lorsque tu fais :
    <?php echo $alerte0; ?>

    PHP affiche un message d'erreur car ces variables ne sont pas encore déclarées !!!
    1. Merci pour de début de réponse qui me semble des plus logique :)

      Néanmoins, j'ai essayé de placer ce code un peu partout et le message d'erreur apparait tout le temps malgré tout!

      Je souhaiterai savoir où je me trompe en fait (j'ai tenté de viré les <? php echo ?> et de les mettre un peu partout mais sans résultat et je ne vois vraiment pas ce qui est incorrect ! (les variables sont bien déclarées après tout?!). Merci encore
      1. En fait c'est bon, pour ceux qui auraient le même problème:

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/
        DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
         
        <head>
         
          <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
          <link href="../style.css" rel="stylesheet" type="text/css"/>
          <title>Ajouter une catégorie</title>
        </head>
         
        <body>
         
        <div id="moncadre">
        <?php include('menu.php');?>
         
        <div class="cadrecentrale">
        <h1>Ajouter une catégorie</h1>
        <?php
        //Si l'action de valider a été faite
        if(isset($_POST["Valider"]))
        {
        $titre = htmlspecialchars(stripcslashes(trim($_POST["titre"])));
        $description = htmlspecialchars(stripcslashes($_POST["description"]));
        //Vérification du formulaire
        if(empty($titre)){
        $alerte0 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de titre.</div>';  
        echo $alerte0;
        }
        else if(empty($description)){$alerte1 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de description.</div>';
        echo $alerte1;
        }
        //Si tout est ok
        else
        {
        //on se connecte à la base de données
        include('../connexion_bd.php');
        
        mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
        mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier connexion_bd.php.');
         
        //on enregistre les données
        $result = mysql_query("INSERT INTO CATEGORIES VALUES('','".mysql_real_escape_string($titre)."','".mysql_real_escape_string($description)."')");
        //Si il y a une erreur, on crie ^^
        if (!$result) {die('Requête invalide : ' . mysql_error());}
        else{
        //Si tout est ok, on informe le webmaster
        $message_ok = '<div class="erreur"><a name="ok"></a><b>Catégorie enregistrée avec succès!</b></div>';echo $message_ok;
        }
        //On ferme else
        }
        //On ferme if(isset($_POST["Valider"]))
        }
        ?>
        
        <form action="#ok" method="post">  
         <p>Titre de la catégorie :<br/>
         <input name="titre" size="65" value="<?php
         if (!empty($_POST["titre"])) {
         echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES));
         }?>" type="text"/></p>
         <p>Description de la catégorie :<br/>
         <textarea name="description" rows="10" cols="50" ><?php
         if (!empty($_POST["description"])) {
         echo stripcslashes(htmlspecialchars($_POST["description"],ENT_QUOTES));
         }?></textarea></p>
         
         <p>
         <input name="Valider" value="Valider" type="submit"/>
         <input name="Effacer" value="Effacer" type="reset"/>
         </p>
        </form>
        </div>
         
        <?php include('../footer.php');?>
         
        </div>
         
        </body>
         
        </html>
      2. Un ptit marquer comme résolu si c terminé
      3. Tu parles d'une solution...
        Allez, pour le fun... et surtout pour aider les futurs visiteurs de ce topic à la recherche d'une solution ma foi toute... SIMPLE!
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/ DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
        <head>
        	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
        	<link href="../style.css" rel="stylesheet" type="text/css"/>
        	<title>Ajouter une catégorie</title>
        </head>
         
        <body>
        <div id="moncadre">
        	<?php include('menu.php'); ?>
        	<div class="cadrecentrale">
        		<h1>Ajouter une catégorie</h1>
        		<?php
        		//Si l'action de valider a été faite
        		if(isset($_POST["Valider"])) {
        			$titre = htmlspecialchars(stripcslashes(trim($_POST["titre"])));
        			$description = htmlspecialchars(stripcslashes($_POST["description"]));
        			//Vérification du formulaire
        			if(empty($titre)) {
        				$alerte0 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de titre.</div>';  
        			} else if(empty($description)) {
        				$alerte1 ='<div class="erreur"><a name="ok"></a>Vous n\'avez pas saisie de description.</div>';
        			} else {
        				//on se connecte à la base de données
        				include('../connexion_bd.php');
        
        				mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
        				mysql_select_db("$nom_de_la_base") or die('Impossible de sélectionner une base de donnée. Assurez vous d\'avoir correctement remplit les données du fichier connexion_bd.php.');
        				//on enregistre les données
        				$result = mysql_query("INSERT INTO CATEGORIES VALUES('','".mysql_real_escape_string($titre)."','".mysql_real_escape_string($description)."')");
        				//Si il y a une erreur, on crie ^^
        				if(!$result) {
        					die('Requête invalide : ' . mysql_error());
        				} else {
        					//Si tout est ok, on informe le webmaster
        					$message_ok = '<div class="erreur"><a name="ok"></a><b>Catégorie enregistrée avec succès!</b></div>';
        				}
        			}
        		} else {
        			$message_ok = '';
        			$alerte0 = '';
        			$alerte1 = '';
        		}
        		?>
        		<?php echo $message_ok; ?>
        		<form action="#ok" method="post">
        			<?php echo $alerte0; ?>
        			<p>Titre de la catégorie :<br/>
        			<input name="titre" size="65" value="<?php if(!empty($_POST["titre"])) {echo stripcslashes(htmlspecialchars($_POST["titre"],ENT_QUOTES));} ?>" type="text"/></p>
        			<?php echo $alerte1; ?>
        			<p>Description de la catégorie :<br/>
        			<textarea name="description" rows="10" cols="50" ><?php
        			if(!empty($_POST["description"])) {echo stripcslashes(htmlspecialchars($_POST["description"],ENT_QUOTES));} ?></textarea></p>
        			<p>
        				<input name="Valider" value="Valider" type="submit"/> <input name="Effacer" value="Effacer" type="reset"/>
        			</p>
        		</form>
        	</div>
        	<?php include('../footer.php'); ?>
        </div>
        </body>
        </html>