[PHP] Problème "Undefined Variable&qu

Résolu/Fermé
Signaler
Messages postés
45
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
19 mai 2011
-
Messages postés
45
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
19 mai 2011
-
Bonjour,
Comme l'indique ce titre, j'ai cette erreur qui s'affiche depuis que j'ai du supprimer ma BDD. Depuis, je pense l'avoir refaite comme elle était, mais lorsque j'arrive sur la page de connexion (et de déconnexion), elle m'affiche cette erreur là :

"Notice: Undefined variable: page in C:\wamp\www\Forces-Opposantes\menu.php on line 132"

Elle m'en affiche plusieurs en plus. J'ai vérifier, je n'ai aucune variable à ces lignes là, à part une variable $i qui compte les ligne, et une variable $page qui est définie par moi-même après une suite de conditions. Que faire ?

Merci d'avance !

7 réponses

Messages postés
11760
Date d'inscription
mardi 1 février 2005
Statut
Modérateur
Dernière intervention
8 août 2019
2 329
Que faire ?
Mmmmmmmmh, nous donner ton code, par exemple ?

Surtout la fameuse "suite de conditions".
Messages postés
45
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
19 mai 2011
1
<?php
if (isset($_SESSION['connecte']) AND $_SESSION['connecte'] == true)
{
	mysql_connect("localhost", "root", "");
	mysql_select_db("forces-opposantes");
	$retour = mysql_query("SELECT * FROM membres WHERE ID = '".$_SESSION['ID']."'");
	$donnees = mysql_fetch_array($retour);
	include("session.php");
	mysql_close();
	
	$nomPage = $_SERVER['PHP_SELF'];
	$nomPage = preg_replace("#^/[A-Za-z-]{1,}/([a-z_]{1,}.[a-z]{1,4})$#", "$1", $nomPage);
	
	if ($nomPage == "accueil_membre.php")
	{
		$page = 1;
	}
	elseif ($nomPage == "marche.php")
	{
		$page = 2;
	}
	elseif ($nomPage == "banque.php")
	{
		$page = 3;
	}
	elseif ($nomPage == "groupe.php")
	{
		$page = 4;
	}
	elseif ($nomPage == "forum.php")
	{
		$page = 5;
	}
	
	$i = 1;
	
	while ($i <= 5)
	{
		if ($i == $page)
		{
			?>
				<div class="element_menu_centre">
			<?php
		}
		else
		{
			?>
				<div class="element_menu">
			<?php
		}
		
		?>
			<table>
			<tr>
			<td>
		<?php
		
		if ($i == 1)
		{
			?>
				<a href="accueil_membre.php">Planque</a>
			<?php
		}
		elseif ($i == 2)
		{
			?>
				<a href="marche.php">Marché</a>
			<?php
		}
		elseif ($i == 3)
		{
			?>
				<a href="banque.php">Banque</a>
			<?php
		}
		elseif ($i == 4)
		{
			?>
				<a href="groupe.php">Groupe</a>
			<?php
		}
		elseif ($i == 5)
		{
			?>
				<a href="forum.php">Forum</a>
			<?php
		}
		
		?>
			</td>
			</tr>
			</table>
			</div>
		<?php
		
		$i++;
	}
	
	?>
	<?php
}
else
{
	$nomPage = $_SERVER['PHP_SELF'];
	$nomPage = preg_replace("#^/[A-Za-z-]{1,}/([a-z]{1,}.[a-z]{1,4})$#", "$1", $nomPage);
	
	if ($nomPage == "index.php")
	{
		$page = 1;
	}
	elseif ($nomPage == "news.php")
	{
		$page = 2;
	}
	elseif ($nomPage == "inscription.php")
	{
		$page = 3;
	}
	elseif ($nomPage == "faq.php")
	{
		$page = 4;
	}
	elseif ($nomPage == "contact.php")
	{
		$page = 5;
	}
	
	$i = 1;
	
	while ($i <= 5)
	{
		if ($i == $page) // Ligne 132
		{
			?>
				<div class="element_menu_centre">
			<?php
		}
		else
		{
			?>
				<div class="element_menu">
			<?php
		}
		
		?>
			<table>
			<tr>
			<td>
		<?php
		
		if ($i == 1)
		{
			?>
				<a href="index.php">Accueil</a>
			<?php
		}
		elseif ($i == 2)
		{
			?>
				<a href="news.php">Journal</a>
			<?php
		}
		elseif ($i == 3)
		{
			?>
				<a href="inscription.php">Inscription</a>
			<?php
		}
		elseif ($i == 4)
		{
			?>
				<a href="faq.php">F.A.Q.</a>
			<?php
		}
		elseif ($i == 5)
		{
			?>
				<a href="contact.php">Contact</a>
			<?php
		}
		
		?>
			</td>
			</tr>
			</table>
			</div>
		<?php
		
		$i++;
	}
}
?>
Messages postés
11760
Date d'inscription
mardi 1 février 2005
Statut
Modérateur
Dernière intervention
8 août 2019
2 329
Ce code là ne vas pas :
$nomPage = $_SERVER['PHP_SELF'];
	$nomPage = preg_replace("#^/[A-Za-z-]{1,}/([a-z_]{1,}.[a-z]{1,4})$#", "$1", $nomPage);
	
	if ($nomPage == "accueil_membre.php")
	{
		$page = 1;
	}
	elseif ($nomPage == "marche.php")
	{
		$page = 2;
	}
	elseif ($nomPage == "banque.php")
	{
		$page = 3;
	}
	elseif ($nomPage == "groupe.php")
	{
		$page = 4;
	}
	elseif ($nomPage == "forum.php")
	{
		$page = 5;
	}

Je pense que ce que tu veux faire c'est que quand l'utilisateur tape http://www.example.org/forum.php tu affiches la page n°5. Mais ce que tu as fait ne marche pas car PHP_SELF récupère le nom de fichier réel (qui autrement dit est toujours le même).
Conclusion : $nomPage n'a pas une valeur que tu attends, et du coup $page vaut NULL !

Remplace ton cafouilli pour inclure la bonne page en utilisant la redirection ou la réécriture d'URL (cf Google). Par exemple l'appel à /groupe.php sera réécrit ou redirigé en/sur /index.php?page=4
Messages postés
45
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
19 mai 2011
1
J'ai regardé la valeur de nomPage, et elle affiche bien ce que je cherche.
En fait, c'est pour un menu, et selon la page dans laquelle on se trouve, le menu met en valeur ou pas l'onglet courant (en gros, si on est dans la page d'accueil, il met en gras "Accueil").

Quand on est sur accueil_membre.php, $nomPage a bien "accueil_membre.php".
Messages postés
11760
Date d'inscription
mardi 1 février 2005
Statut
Modérateur
Dernière intervention
8 août 2019
2 329
J'ai pas cherché à comprendre la suite du code mais pfiou la vache, quel truc compliqué pour faire pas grand chose ^^

Ceci ne marchera pas lorsque la page est à la racine du site. Puisque PHP_SELF ne sera pas de la forme /qqchose/qqchose.qqch et ne sera pas modifié. Ainsi pour la page http://example.org/test.php, $nomPage vaudra "/test.php" et ça ne correspond à rien dans la "suite de conditions".
Si ce fonctionnement n'est pas voulu il te suffit de rendre le premier slash et le premier texte facultatif avec * :
^/*[A-Za-z-]*/([a-z_]{1,}.[a-z]{1,4})$

D'autre part pour éviter d'avoir un comportement imprévu comme celui-ci tu devrais mettre une valeur par défaut que tu traiteras ensuite (c-à-d un "else $nomPage=0;" en considérerant que, comme il n'existe pas de page 0, c'est un signal d'erreur et dans ce cas tu la traite en conséquence (en la quittant violemment "exit("Page $nomPage inconnue.");" ou de manière plus complète ...)
Même si dans l'absolu ça sert à rien parce que PHP_SELF ne devrait jamais te retourner un nom de fichier que tu n'as pas spécifié dans le code, ça pourra servir ne serait-ce que le jour où tu vas ajouter une page et que tu vas oublier de rajouter le elsif correspondant : avec un message d'erreur explicite c'est quand-même plus clair !
Messages postés
45
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
19 mai 2011
1
Ce que je comprend pas, c'est que entre le avant (où ça marchait) et maintenant, la seule choses que j'ai changée, c'est la BDD (que j'ai remis comme à l'origine).
Messages postés
45
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
19 mai 2011
1
Ah non c'est bon, j'ai traquée l'erreure tout seul finalement, merci beaucoup quand même ^^ !