Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/07/2011, 19h56   #1
Futur Membre du Club
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 168
Points : 18
Points : 18
Par défaut Pb menu avec php et mysql

Bonjour

J'ai un souci. Mon script créé l'erreur suivante :
Citation:
Fatal error: Maximum execution time of 30 seconds exceeded in E:\Sites\tests\MenuPhp\index.php on line 26
Voici mon code php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<ul>
<?php
//Lecture d'une base de données pour créer un menu
 
   try {
	   $options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;
	   $db= new PDO('mysql:host=localhost;dbname=tests','root','',$options);
 // echo '<p>connexion à la base de données</p>';
 
   }
   catch (Exeption $e) {
    die('erreur : '.$e->getMessage());   
	}
	$parent = 0;
 
	while($req = $db->query("SELECT * FROM menug WHERE ID_PARENT='$parent'")) {//Sélection du parent
		$data = $req->fetch();
		echo '<ul>'.$data['Titre'];
		$enfant = $data['id_enfants'];
		if($enfant != 0) { //vérification s'il y a un enfant
	 		echo '<li><a href="'.$data['Fichier'].'">'.$data['Titre'].'</a></li>';
		}else {	echo '</ul>';}
	 $parent++;// Incrémentation et sélection du prochain parent
	 $req->closeCursor();	
	}
?></ul>
Je ne vois pas pourquoi je ne vois pas aussi l'apparition de mes sous menus car j'ai l'erreur avant

Merci de vos réponses

Cordialement
BXDSPORT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 03h32   #2
Membre du Club
 
Avatar de MinDBuSteR
 
Homme
Développeur informatique
Inscription : juin 2011
Messages : 35
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : juin 2011
Messages : 35
Points : 44
Points : 44
Bonjour à toi,

T'es tu bien assurée que ID_PARENT commence bien à la valeur 0 ?

Sinon tu peux essayer comme ca :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<ul>
<?php
 
//INITIALISATION
$parent = 0;
 
//CONNEXION A LA BASE DE DONNEES
@MYSQL_CONNECT ("$dbserver","$dbuser","$dbpass") or die ("<p>Erreur</p>");
mysql_select_db("$dbdb");
 
$query="SELECT * FROM menug WHERE ID_PARENT='$parent'";
$result=mysql_query($query);
while($ligne=mysql_fetch_array($result))
{
$titre=$ligne["titre"];	
$enfant=$ligne["id_enfants"];	
$fichier=$ligne["Fichier"];	
 
 
	echo "<ul>$titre";
	if($enfant != 0) { //vérification s'il y a un enfant
	                echo "<li>$titre";
	 		echo '<li><a href=\"$fichier\">$titre</a></li>';
 
       }else {	echo '</ul>';}
 
$parent++;
}
?>
</ul>
En espérant t'avoir aidé ( j'ai fais ca rapidement il est tard )

Bon courage !
MinDBuSteR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 05h47   #3
Futur Membre du Club
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 168
Points : 18
Points : 18
MinDBuSteR, Merci de ta piste
mais ton script ne marche que pour le premier mais il ne passe pas au suivant des parents.
C'est pour cela que je l'avais mis dans une boucle.
BXDSPORT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 09h37   #4
Membre régulier
 
Inscription : juillet 2007
Messages : 62
Détails du profil
Informations personnelles :
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juillet 2007
Messages : 62
Points : 82
Points : 82
Ta boucle whlie tourne infiniment parce que la requete retourne FALSE uniqiement si il y a une erreur (de syntaxe sql par exemple) sinon elle retourne toujours object(PDOStatement) qui peut être vide car il n'y a pas de données.
IL faut ajouter un test sur data dans le while

Code :
1
2
3
4
 
while($req = $db->query("SELECT * FROM menug WHERE ID_PARENT='$parent'")) {//Sélection du parent
		$data = $req->fetch();
if(!$data) break ;
kodeya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2011, 13h33   #5
Futur Membre du Club
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 168
Points : 18
Points : 18
J'obtiens les parents mais pas les enfants.
Pourquoi il ne reconnait pas le test ?
BXDSPORT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2011, 10h47   #6
Futur Membre du Club
 
Homme
Consultant informatique
Inscription : mars 2002
Messages : 168
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2002
Messages : 168
Points : 18
Points : 18
Les parents sont reconnus mais les enfants provoquent une erreur

Je vous met le schéma de ma base :
ID -> AutoIncrémenter (clé primaire)
Titre
ID_parent -> pour mettre l'élément dans le menu principal
id_enfants -> pour associer au parent
nbenfants -> se met sur les parents pour savoir le nombre d'enfants à associer

voici mon code réajusté par rapport à vos remarque :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<div class="menug">
 
<?php
//Lecture d'une base de données pour créer un menu
 
   try {
	   $options[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION;
	   $db= new PDO('mysql:host=localhost;dbname=tests','root','',$options);
 echo '<p>connexion à la base de données</p>';
 
   }
   catch (Exeption $e) {
    die('erreur : '.$e->getMessage());   
	}
	$parent = 0;
 
  while($req = $db->query("SELECT * FROM menug WHERE ID_PARENT='$parent'")) {
		;//Sélection du parent
		$data = $req->fetch();
		echo '<strong>idparent -'.$parent.'</strong><br />';
		if(!$data) break;
		$nbfille=$data['nbenfants'];
		echo '<strong>nbenfant -'.$nbfille.'</strong><br />';
		$enfant = $data['id_enfants'];
		echo 'idenfant -'.$enfant.'<br/>';
		if($enfant==0) {echo '<ul class="menug">'.$data['Titre'];}
		if($nbfille !=0) {
		 	if($enfant != 0) { echo '<li><a href="'.$data['Fichier'].'">'.$data['Titre'].'</a></li>';}	//vérification s'il y a un enfant
		}else{
		echo '</ul>';
		 $parent++;}// Incrémentation et sélection du prochain parent
	};
	$req->closeCursor();
Une idée pourquoi cela ne fonctionne pas.
BXDSPORT est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h59.


 
 
 
 
Partenaires

Hébergement Web