Rechercher : dans
Par :

[PHP] Problème "Undefined Variable&qu

Dernière réponse le 24 mai 2009 à 17:56:39 Frankyd13, le 23 mai 2009 à 13:38:42 
 Signaler ce message aux modérateurs

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 !

Configuration: Windows XP
Opera 9.64

Meilleures réponses pour « [PHP] Problème "Undefined Variable&qu » dans :
PHP - Les variables Voir Concept de variable avec PHP Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage PHP peuvent être de trois...
[PHP] Notice: Undefined index: VoirSi vous utilisez les tableaux $_POST ou $_GET pour récupérer les variables de vos formulaires ou autres, il se peut que vous tombiez sur cette erreur: Notice: Undefined index 'champs du tableau' in 'chemin du fichier php en cours d'execution' on line...
[PHP] Les ressemblances à ne pas confondre VoirIntroduction Concaténation ou paramètres ? Guillemets/Apostrophe Structure require/include isset vs empty htmlentities ou htmlspecialchars ? Nombre de signes égal Introduction Cette astuce présente plusieurs fonction ou astuces en...
PHP - Les variables d'environnement VoirNotion de variable d'environnement Les variables d'environnement sont, comme leur nom l'indique, des données stockées dans des variables permettant au programme d'avoir des informations sur son environnement. L'environnement, dans le cas du script...
PHP - Les opérateurs VoirQu'est-ce qu'un opérateur? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, ... On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
PHP - Les classes VoirLa notion de classe Php3 intègre un soupçon de caractéristiques empruntées aux langages orientés objet, c'est-à-dire la possibilité d'utiliser des objets, entités regroupant des données et des fonctions au sein d'une structure et rendant la...

1

Yoan, le 23 mai 2009 à 13:45:59

Que faire ?
Mmmmmmmmh, nous donner ton code, par exemple ?

Surtout la fameuse "suite de conditions". L'urgent est fait, l'impossible est en cours,
Pour les miracles, prévoir un délai ...

Répondre à Yoan

2

Frankyd13, le 23 mai 2009 à 13:57:36

<?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++;
	}
}
?>

Répondre à Frankyd13

3

Yoan, le 23 mai 2009 à 14:07:44

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 L'urgent est fait, l'impossible est en cours,
Pour les miracles, prévoir un délai ...

Répondre à Yoan

4

Frankyd13, le 23 mai 2009 à 15:05:54

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".

Répondre à Frankyd13

5

Yoan, le 23 mai 2009 à 17:28:57

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 ! L'urgent est fait, l'impossible est en cours,
Pour les miracles, prévoir un délai ...

Répondre à Yoan

6

Frankyd13, le 24 mai 2009 à 17:48:44

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).

Répondre à Frankyd13

7

 Frankyd13, le 24 mai 2009 à 17:56:39

Ah non c'est bon, j'ai traquée l'erreure tout seul finalement, merci beaucoup quand même ^^ !

Répondre à Frankyd13