Bonjour je me permet de poster suite à un petit problème qui me turlupine depuis un bout de temps maintenant.

Pour mon site, j'inclus des pages sur mon index, via un "array", tout les liens fonctionnes sans problèmes (index.php?id=0, index.php?id=1, index.php?id=2, etc.....) mais des que j'ouvre la page "index.php" et bien là, surprise je reçois un petit message :

Notice: Undefined index: id in C:\wamp\www\erno\includes\liste_array.php on line 26


J'ai beau avoir google comme amis, aucune des réponse ne cible vraiment mon problème !
voici le haut de mon index : liste_array.php

a écrit :
<?php

//Tableau numéroté
$tableau = array(
"Accueil",
"Actualite/News",
"Effectifs",
"Resultats",
"Classement",
"Calendrier",
"Statistiques",
"Organigramme",
"Historique",
"Palmares",
"Le Stade",
"Contacts",
"Editorial",
"Club-House",
"Forum",
"Galerie",
"Fonds d'ecrans",
"Partenaires"
);


$toto = htmlspecialchars($_GET['id']);

if($_SERVER['REQUEST_URI'] == "/" or $_SERVER['REQUEST_URI'] == "/index.php")
{

header('location:index.php?id=0');
}
?>

la ligne en gras, c'est celle qui pose problème !

ensuite viens mon menu (aucun probleme de se coté) : menu.php
a écrit :
<div class="accueil">
<h3></h3>
<ul>
<li><a class="menu" title="Accueil du Club !" href="index.php?id=0">ACCUEIL</a></li>
</ul>
</div>
<div class="saison">
<h3></h3>
<ul>
<li><a class="menu" title="Toutes l'actualité du Club !" href="index.php?id=1">ACTUALITE/NEWS</a></li>
<li><a class="menu" title="Revues des troupes de la saison !" href="index.php?id=2">EFFECTIFS</a></li>
<li><a class="menu" title="Le résultat des matchs de la Saison !" href="index.php?id=3">RESULTATS</a></li>
<li><a class="menu" title="Le classement complet de toutes les Equipes !" href="index.php?id=4">CLASSEMENT</a></li>
etc........


puis, mon cadre qui affiche le contenu des array, la pas de soucis non plus, tout fonctionne à merveille:

a écrit :
<?php
//Si la variable n'est pas de type numérique
if(!is_numeric($toto))
{
echo 'Désolé, cette requete n\'est pas permise !';
}
elseif ($toto == 0)
{
include('rub0/accueil.php');
}
elseif ($toto == 1)
{
include('2010_2011/actu.php');
}
elseif ($toto == 2)
{
include('2010_2011/effectifs.php');
}
elseif ($toto == 3)
{
include('2010_2011/resultats.php');
}
elseif ($toto == 4)
{
include('2010_2011/classement.php');
}
etc...........



Donc voila, toutes mes pages s'ouvre sans problème sauf mon index.php, qui ne veut pas se rediriger vers > index.php?id=0

J'espere que voous avez saisie mon probleme ?
Modifié par milcis (19 Sep 2010 - 23:16)
Salut,

c'est normal puisqu'il ne faut pas utiliser de variables (en l'occurrence $_GET['id'] ) sans avoir vérifié leur existence auparavant.

Quoi qu'il en soit ce n'est vraiment pas optimisé ! Smiley rolleyes

D'autre part à quoi te sert $tableau puisque visiblement tu ne l'utilises pas ?

Pour finir c'est une bonne idée de choisir des noms évocateurs plutôt que $tableau ou $toto.

Un exemple de ce que tu pourrais faire :
<?php
$pages = array(
	array('Accueil', "Accueil du Club", 'rub0/accueil.php'),
	array('Actualite/News', "Toute l'actualité du Club", '2010_2011/actu.php'),
	array('Effectifs', "Revues des troupes de la saison", '2010_2011/effectifs.php'),
	// etc.
	array('Partenaires', "Un autre title pour partenaires", '2010_2011/partenaires.php')
);
// si id est passé dans l'url et qu'il existe dans le tableau on prend cette valeur. Sinon on prend 0 par défaut
$id = !empty($_GET['id']) && array_key_exists($_GET['id'], $pages) ? $_GET['id'] : 0;
?><!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" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test</title>
</head>
<body>
<ul>
<?php
foreach($pages as $key=>$value) {
	echo "\t".'<li><a class="menu" title="'.$value[1].'" href="index.php?id='.$key.'">'. strtoupper($value[0]).'</a></li>';
}
?>
</ul>
<?php
include($pages[$id][2]);
?>
</body>
</html>

Modifié par Heyoan (19 Sep 2010 - 19:40)
Salut, merci de ta réponse rapide, je vais m'y mettre de suite Smiley smile

Juste un détails, j'ai pas mis le scripts en entier de mon menu, car en faits, ils se compose en sous-menus, donc pour la fonction "foreach" est-il possible de lui definir une limite ? (id de 0 à 5, puis de 6 a 12 etc....) ?

edit : Sinon pour ton script, bas impeccable sa marche^^ merci à toi en tout cas
Modifié par milcis (19 Sep 2010 - 20:14)
milcis a écrit :
est-il possible de lui definir une limite ? (id de 0 à 5, puis de 6 a 12 etc....) ?
Oui mais du coup tu te retrouves à écrire en dur dans le code : en général on s'en sort très bien avec des tableaux multidimensionnels. Tu as un exemple du code que tu veux obtenir ?
a écrit :
Oui mais du coup tu te retrouves à écrire en dur dans le code : en général on s'en sort très bien avec des tableaux multidimensionnels. Tu as un exemple du code que tu veux obtenir ?


Je sais pas si je vais arriver à l'expliquer correctement, l'idéal aurait été que tu vois la "structure du site" pour voir ou je veux en venir, puisque le menu se compose en différente partie (avec un image en tete de chaque sous liste, donc si j'utilise "foreach", je ne pourrais plus le faire.

(je précise que c'est la première fois que j'inclus des pages dans un array, d'habitude, je faisais une page par article^^)
milcis a écrit :
l'idéal aurait été que tu vois la "structure du site" pour voir ou je veux en venir
C'était bien ce que je te demandais. Smiley langue
Heyoan a écrit :
C'était bien ce que je te demandais. Smiley langue



Ma pages index dans son ensemble :
a écrit :
<?php include("includes/liste_array.php"); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>.:: FC Ernolsheim-les-Savernes :: Site Officiel ::.</title>
<meta name="description" content="Le Site Officiel du Football Club d'Ernolsheim-les-Savernes" />
<meta name="keywords" content="ernolsheim foot, football, club, ernolsheim, erlolsheim/saverne, ernolsheim-les-savernes" />
<meta name="identifier-url" content="http://www.fc-ernolsheim.com" />
<meta name="category" content="sport" />
<meta name="author" content="Cédric Stifter" />
<meta name="copyright" content="fc-errnolsheim.com">
<meta name="date-creation-yyyymmdd" content="24082010">
<meta name="robots" content="index,follow" />
<link rel="stylesheet" media="screen" type="text/css" href="style.css" />
<link rel="icon" type="image/png" href="favicon.png" />
<!--[if IE]><link rel="shortcut icon" type="image/x-icon" href="favicon.ico" /><![endif]-->
<script type="text/javascript">
function Lien()
{
i = document.Choix.Liste.selectedIndex;
if (i == 0) return;
url = document.Choix.Liste.options.value;
parent.location.href = url;
}
</script>
</head>
<body>

<?php include("includes/banniere.php"); ?>
<?php include("includes/recherche.php"); ?>
<?php include("includes/menu_gauche.php"); ?>
<?php include("includes/menu_droite.php"); ?>


<div id="corps">

<?php include("includes/afficher_array.php"); ?>

</div>

<?php include("includes/pied_de_page.php"); ?>
</body>
</html>


Mon menu dans son ensemble :
a écrit :

<div id="menu_gauche">
<div class="accueil">
<h3></h3>
<ul>
<li><a class="menu" title="Accueil du Club !" href="index.php?id=0">ACCUEIL</a></li>
</ul>
</div>
<div class="saison">
<h3></h3>
<ul>
<li><a class="menu" title="Toutes l'actualité du Club !" href="index.php?id=1">ACTUALITE/NEWS</a></li>
<li><a class="menu" title="Revues des troupes de la saison !" href="index.php?id=2">EFFECTIFS</a></li>
<li><a class="menu" title="Le résultat des matchs de la Saison !" href="index.php?id=3">RESULTATS</a></li>
<li><a class="menu" title="Le classement complet de toutes les Equipes !" href="index.php?id=4">CLASSEMENT</a></li>
<li><a class="menu" title="Tous les matchs de la saison !" href="index.php?id=5">CALENDRIER</a></li>
<li><a class="menu" title="Les statistiques de la saison !" href="index.php?id=6">STATISTIQUES</a></li>
</ul>
</div>
<div class="club">
<h3></h3>
<ul>
<li><a class="menu" title="L'encadrement du club !" href="index.php?id=7">ORANIGRAMME</a></li>
<li><a class="menu" title="Le Club, d'hier à aujourd'hui !" href="index.php?id=8">HISTORIQUE</a></li>
<li><a class="menu" title="Le palmarès complet !" href="index.php?id=9">PALMARES</a></li>
<li><a class="menu" title="Venez vivre votre passion au FROHNBERG !" href="index.php?id=10">LE STADE</a></li>
<li><a class="menu" title="Nous Contacter !" href="index.php?id=11">CONTACTS</a></li>
</ul>
</div>
<div class="partenaire">
<h3></h3>
<ul>
<li><a class="menu" title="Nos Partenaires !" href="index.php?id=17">PARTENAIRES</a></li>
</ul>
</div>
<div class="supporter">
<h3></h3>
<ul>
<li><a class="menu" title="Passage obligé pour les fans de notre ami GUIGUES !" href="index.php?id=12">L'EDITORIAL</a></li>
<li><a class="menu" title="Le passage obligatoire pour joueurs et supporters !" href="index.php?id=13">CLUB-HOUSE</a></li>
<li><a class="menu" title="A vos clavier ! Le flood est de mise !" href="index.php?id=14">FORUM</a></li>
<li><a class="menu" title="Le blog des supporters !" href="index.php?id=15">GALERIE</a></li>
<li><a class="menu" title="Des fonds d'écrans pour décorer votre PC !" href="index.php?id=16">FONDS D'ECRANS</a></li>

</ul>
</div>
</div>


arborescence :
-index.php
-images
-includes > afficher_array.php, liste_array.php, pied_de_page.php, menu_gauche.php, menu_ droite.php, banniere.php, recherhce.php

-rub0> acceuil.php, parteniare.php
-rub1> organigramme.php, palmares.php, etc......
-rub2> house.php, galerie.php etc....
-2010_20011 news.php, effectifs.php, resultats.php etc......
-style.css



En fait la page d'index, permet d'inclure le contenu du site, est appel le contenu des rubriques (le site originial que j'ai cree a ete fait page par page : fc-ernolsheim.com)
upload/32713-0000000000.PNG upload/32713-azerty.PNG
Modifié par milcis (19 Sep 2010 - 21:13)
Quelques remarques générales :

* le DOCTYPE XHTML 1.1 est incorrect pour un document servi en tant que text/html : cf. cette astuce.

* ta fonction lien montre que tu fais une redirection sur un onchange de SELECT ce qui est une mauvaise pratique.

* à quoi servent les titres H3 vides (à part de rendre ton code invalide Smiley cligne ) ?

* plutôt que d'affecter une classe menu à tous tes liens il suffirait de les cibler ainsi :
ul a { ... }


Pour ce qui est de la génération du menu :
<?php
$pages = array(
	'accueil' => array(
		array('Accueil', "Accueil du Club", 'rub0/accueil.php')
	),
	'saison' => array(
		array('Actualite/News', "Toute l'actualité du Club", '2010_2011/actu.php'),
		// etc.
		array('Statistiques', "Les statistiques de la saison", '2010_2011/statistiques.php')
	),
	'club' => array(
		array('Organigramme', "L'encadrement du club", '2010_2011/organigramme.php'),
		// etc.
		array('Contacts', "Nous Contacter", '2010_2011/contacts.php')
	),
	'partenaire' => array(
		array('Partenaires', "Un autre title pour partenaires", '2010_2011/partenaires.php')
	),
	'supporter' => array(
		array("L'éditorial", "Passage obligé pour les fans de notre ami GUIGUES", '2010_2011/editorial.php'),
		// etc.
		array("Fonds d'écrans", "Des fonds d'écrans pour décorer votre PC", '2010_2011/fonds_ecrans.php')
	)
);
// Génération des liens
$index_href = 0;
$hrefs = array();
foreach($pages as $key=>$values) {
	foreach($values as $value) {
		$hrefs[$index_href] = $value[2];
		$index_href++;
	}
}
$id = !empty($_GET['id']) && array_key_exists($_GET['id'], $hrefs) ? $_GET['id'] : 0;
?><!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" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test</title>
</head>
<body>
<div id="menu_gauche">
<?php
$index_href = 0;
foreach($pages as $class=>$array) {
	echo '<div class="'.$class.'">'."\n<ul>\n";
	foreach($array as $key=>$value) {
		echo "\t".'<li><a title="'.$value[1].'" href="index.php?id='.$index_href.'">'. strtoupper($value[0]).'</a></li>'."\n";
		$index_href++;
	}
	echo "</ul>\n</div>\n";
}
?>
</div>
<?php
include($hrefs[$id]);
?>
</body>
</html>
Les H3 vides, j'ai oublier de les remplirs c'est tout ! Smiley cligne
En tout cas, merci, ton aide m'a été très précieuse, je pense que j'y aurais encore passé des heures^^

Merci mille fois

Edit:

Pour Java, j'ai pas le choix avec la fonction utiliser, sinon sa ne transforme pas ma liste en liens
Modifié par milcis (20 Sep 2010 - 02:35)