Undefined variable: _request in ???

Résolu
Bonjour,
J'ai deux soucis que je n'arrive pas à résoudre, et je pense que c'est principalement dû à mon manque de connaissance dans le domaine.

Tout d'abord, j'ai un message :
Notice: Undefined variable: _request in C:\Program Files\WampServer\www\Nautilus\Connection.inc on line 2


Voici le contexte :
<html>
<head>
<title>Plongées offertes</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body ><div align="center">
<?php
require('enTete.inc');
require('Connection.inc');
?>

[...]
$query="SELECT * FROM TypeSite ORDER BY NumType" ;
$result=mysql_query($query)
	or die("Execution de la requête impossible");

// Créer le formulaire de sélection
echo "<form action='PhotoSites.php' method='post'> \n";
echo "<table cellpadding='5' border='1'>";
while ($ligne=mysql_fetch_array($result))
{ 	extract($ligne);
	echo "<tr><td valign='top' width='15%'>\n";
	echo "<input type='radio' name='interet'
				value='$NumType'\n";
	
	echo "<b>$NumType</b>
		</td>
		<td>$LibelleType</td>
		</td>
		<td>$ImageTypeSite</td>";
	}
	echo "</table>";
	echo "<p><input type='submit' value='Faites votre choix'>
		</form>\n";
?>
</body>
</html>

Comme vous le voyez, il n'y a rien à la ligne 2 qui devrait poser problème...

Maintenant, je n'arrive pas à récupérer la valeur sélectionnée dans ma page de "réponse" :
<?php
require('enTete.inc');
require('Connection.inc');
// Sélection des pièces d'un type donné
$query="SELECT * FROM Site where NumType='$interet'";
$result=mysql_query($query)
	or die ("Execution de la requête impossible");
	
// Afficher les résultats dans un tableau
echo "<table background='Photos/lion_mod.jpg' cellspacing='1' border='20' cellpadding='5' width='70%'>";
echo "<tr border width='90%'>\n";
echo "<tr><td>Numéro site</td><td>Libellé Site</td><td>Profondeur en mètres</td><td>Photo</td></tr>";

while ($ligne=mysql_fetch_array($result,MYSQL_ASSOC))
 {
	 // Afficher une ligne pour chaque pièce
 
	echo "<td>{$ligne['NumSite']} </td>\n";
	echo "<td><font size='+1'><b>{$ligne['LibelleSite']}</b></font></td>\n";
	echo "<td>{$ligne['ProfondeurSite']}</td>\n";
	echo "<td>{$ligne['PhotoSite']}</td></tr>\n";
}
echo"</table>\n";
echo "<div align='center'>
	<a href='les_plongees.php'><b> Retour au menu precedent</b></a></div>";
?>


À quoi cela peut-il être dû ?

Et pour être sur qu'il ne vous manque aucun détail, voici le contenu de mon fichier connection.inc :
<?php
$interet=$_request["interet"];
$connection=mysql_connect("localhost","root","")
	or die ("Connexion au serveur impossible");
$db=mysql_select_db("DivingCenter",$connection)
	or die ("Sélection de la base de données impossible");
?>

Je signale que je suis sous Wamp (vous l'auriez surement remarqué) et il n'y a donc pas besoin de mot de passe pour se connecter à la base de données.

Je vous souhaite bon courage, moi, personnellement, j'y ai passé quelques heures, et je commence à cracker.

26 réponses

Résumé de la discussion

Une notice PHP signale une variable indéfinie et une erreur d’index interet lors de l’exécution d’un script PHP sous Wamp, liées à l’inclusion de fichiers et à la récupération d’un choix radio. Des solutions convergent vers l’utilisation de $_POST['interet'] pour récupérer la valeur postée, et vers la correction des noms de fichier inclus (Connection.inc) afin que la variable soit disponible. D’autres échanges insistent sur le fait que les fichiers inclus doivent être compatibles avec le langage serveur et que l’activation d’un serveur PHP est nécessaire pour que include() fonctionne bien. En fin d’échange, la résolution est confirmée par la correction du nom de fichier inclus, démontrant l’importance de synchroniser chemins et noms et de tester les variables postées.

Bobot (l’IA à votre service)
  1. il faut que tu mette le bon chemin dans ton require si ton fichier est pas dans le meme repertoire que to script logique qu'il le trouve pas ;)
    1. les variables super globale sont toujours en majuscule
      $interet=$_REQUEST["interet"];
      1. bonjour , betement est ce que ton serveur est demarré ?
        Les fichiers "inc" sont des fichiers "include" (inclusion).
        Ces fichiers sont liés à PHP qui les utilise.
        PHP te permet d'inclure avec la fonction "include()" des pages dans une autre page.
        Ainsi si tu as un page : "menu.inc ou menu.inc.php" (ces 2 fichiers peuvent s'utiliser exactement de la même façon, le nom choisi n'est qu'une question d'habitude et de convention de nomage, en pratique tu pourrais même inclure un fichier "menu.txt"), dans ta page index tu vas inclure cette page menu.
        Ca te permet de diviser une même page en plusieurs page et ainsi, par exemple tu as un fichier menu.inc.php tu l'inclus dans toutes les pages, si tu veux changer ton menu, tu vas juste dans la page menu.inc.php, tu la modifies, et ce changement se répercutera partout.

        Cela ne fonctionnait pas en local chez toi car PHP a besoin d'un serveur pour fonctionner.
        1. @ lewis34,
          Merci de m'avoir répondu aussi vite :) Cependant, mon serveur était bien démarré (et je viens de vérifier).
          Je te remercie aussi pour ton explication sur les includes, même si je connaissais leur fonctionnement :p Cela dit, ça servira toujours à d'autres !

          Donc tu ne vois pas d'autres raisons de ce message ?
          1. essaye de renomer ton fichier connection.inc en connection.php et modifier ta ligne require('enTete.inc'); et connexon.inc
            par
            require_once('enTete.php');
            require_once('connexion.php');
            quitte a placer un echo dedans pour voir si tu y passe
            1. Bonsoir, je suis Gael87, je me suis connecté pour que ce soit plus pratique (compte que j'avais oublié ^^).
              J'ai effectué ta manipulation, mais rien n'y fait ! J'ai carrément la page qui disparait avec un nouveau message :
              Warning: require_once(Connexion.php) [function.require-once]: failed to open stream: No such file or directory in C:\Program Files\WampServer\www\Nautilus\les_plongees.php on line 11
              
              Fatal error: require_once() [function.require]: Failed opening required 'Connexion.php' (include_path='.;C:\php5\pear') in C:\Program Files\WampServer\www\Nautilus\les_plongees.php on line 11


              Tu pense que ça pourrait se situer au niveau du fichier Connection.inc ?
              1. Je ne comprends pas... Il est dans le même dossier que le reste.
                Il ne faut pas perdre de vu que je suis un débutant :)
                1. @ Mype : Effectivement, je n'avais pas fait attention à ton premier message, et je récupère mes variables !

                  @ Lewis34 : Si, je t'assure que tous mes fichiers sont dans le même dossier, sans aucun sous dossier !
                  1. ben l'erreur était clair il te dit qu'a la ligne 2 de ton fichier connection.inc la variable _request n'est pas definis c'est parce que tu as mis $_request["interet"] au lieu de $_REQUEST["interet"]
                    fais cette modification et vois si ça marche...
                    1. @ Mype : malgré la modification, j'ai toujours le message suivant :
                      Notice: Undefined index: interet in C:\Program Files\WampServer\www\Nautilus\Connexion.inc on line 2
                      1. avant de l'affecter fais un test pour voir si elle existe
                        if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"];
                        1. Ça ne change strictement rien au résultat...
                          Pour être sûr, il faut bien le mettre dans le fichier Connection.inc ? Je suis assez débutant ^^
                          1. tu ne touches a rien dans ton code sauf dans le fichier Connection.inc tu remplaces cette ligne
                            $interet=$_request["interet"];
                            par celle la
                            if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"];
                            c'est bien ce que tu as fait ? si c'est ça quel est le message d'erreur ?
                            1. C'est donc bien ce que j'avais fait.
                              Voici le message d'erreur :
                              Notice: Undefined index: interet in C:\Program Files\WampServer\www\Nautilus\Connexion.inc on line 2


                              En passant : merci beaucoup de t'intéresser à mon problème !
                              1. dans ce cas puisque tu n'utilises jamais cette variable dans ta premiere page tu peux l'enlever de ton Connection.inc et la mettre directement dans ta deuxieme page
                                donc essaye enlevant
                                if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"];
                                de Connection.inc et en le mettant dans ta deuxieme page juste avant
                                // Sélection des pièces d'un type donné
                                $query="SELECT * FROM Site where NumType='$interet'";
                                1. Si je fais ça, rien ne change, sauf que j'ai une autre page qui réagi (que je vais nommé p3). Avant de modifier la ligne
                                  $interet=$_request["interet"];
                                  dans Connection.inc, la page affichait
                                  Notice: Undefined index: interet in C:\Program Files\WampServer\www\Nautilus\Connection.inc on line 2
                                  Donc la même erreur que la page 1.

                                  Après avoir modifié la ligne dans Connection.inc, l'erreur disparaissait de la p3, mais continuait d'apparaître en p1.

                                  Voici ma p3 :
                                  <?php
                                  require('enTete.inc');
                                  require('Connection.inc');
                                  ?>
                                  <p align="left"><font color="#990099" size="2"><strong><font face="Arial, Helvetica, sans-serif">  Le centre offre &agrave; ses clients un large panel de formation gr&acirc;ce 
                                  &agrave; ses accr&eacute;ditations &agrave; plusieurs syst&egrave;mes internationalement reconnus</font></strong></p> 
                                  
                                  <?php
                                  	
                                  // Sélectionner tous les types de pièces présents dans la table Type
                                  $query="SELECT distinct systeme, logoniveau FROM niveau ORDER BY Numniveau" ;
                                  $result=mysql_query($query)
                                  	or die("Execution de la requête impossible");
                                  
                                  // Créer le formulaire de sélection
                                  echo "<form action='Formations_proposes.php' method='post'> \n";
                                  echo "<table  background='Photos/tab_boat_mod.jpg' cellpadding='5' border='1'>";
                                  while ($ligne=mysql_fetch_array($result))
                                  { 	extract($ligne);
                                  	echo "<tr><td valign='top' width='15%'>\n";
                                  	echo "<input type='radio' name='interet'
                                  				value='$systeme'\n";
                                  	
                                  	echo "<td>$systeme</td>
                                  		</td>
                                  		<td>$logoniveau</td>";
                                  	}
                                  	echo "</table>";
                                  	echo "<p><input type='submit' value='Faites votre choix'>
                                  		</form>\n";
                                  
                                  ?>


                                  Elle est construit avec la même syntaxe que les autres, et maintenant elle fonctionne.
                                  Donc, j'ai laissé
                                  if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"];

                                  dans la page Connection.inc.

                                  C'est à n'y rien comprendre ! Pourquoi une page avec la même syntaxe ne fonctionnerait pas ???
                                  Je te remercie donc encore une fois pour tes efforts !

                                  Ps : peux-tu m'expliquer la différence entre $interet=$_REQUEST["interet"]; et if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"]; ?
                                  1. non mais je t'avais dit de ne laisser dans ton Connection.inc que les lignes de connection a ta base de donnee soit
                                    $connection=mysql_connect("localhost","root","")
                                    	or die ("Connexion au serveur impossible");
                                    $db=mysql_select_db("DivingCenter",$connection)
                                    	or die ("Sélection de la base de données impossible");
                                    en enlevant tout le reste
                                    en fait je t'explique l'erreur ça veut dire que l'index interet n'existe pas et c'est effectivement le cas dans tes p1 et p3 puisque c'est là que tu le definit et comme tu inclus Connection.inc dans ces pages alors tu a l'erreur, c'est pourquoi je t'ai dit de mettre
                                    if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"];
                                    qui permet de verifier si la variable $_REQUEST["interet"] existe (donc si l'index interet a deja été defini) avant de l'affecter a $interet
                                    le probleme est resolu ?
                                    1. Bon, ça ne fonctionne toujours pas... Peu importe la méthode utilisée :
                                      Mon fichier Connection.inc me donne le même résultat qu'il soit comme ça :
                                      <?php
                                      $connection=mysql_connect("localhost","root","")
                                      	or die ("Connexion au serveur impossible");
                                      $db=mysql_select_db("DivingCenter",$connection)
                                      	or die ("Sélection de la base de données impossible");
                                      ?>

                                      ou comme ça :
                                      <?php
                                      if(isset($_REQUEST["interet"])) $interet=$_REQUEST["interet"];
                                      $connection=mysql_connect("localhost","root","")
                                      	or die ("Connexion au serveur impossible");
                                      $db=mysql_select_db("DivingCenter",$connection)
                                      	or die ("Sélection de la base de données impossible");
                                      ?>

                                      La P1 merde toujours... Il y a ce message qui ne veut pas disparaître.

                                      Je dois vraiment pas être doué car après toutes tes explications, ça ne marche toujours pas.

                                      La seule différence importante entre la P1 et la P3 se situe ici pour la P1 :
                                      $query="SELECT * FROM TypeSite ORDER BY NumType" ;
                                      $result=mysql_query($query)
                                      	or die("Execution de la requête impossible");


                                      Se pourrait-il que ça bloque à ce niveau là ? Ma requête pourrait ne pas être bonne ?
                                      Est-ce nécessairement le fichier Connection.inc qui fait afficher le message d'erreur ?
                                      • 1
                                      • 2