IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Pb menu avec php et mysql


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé Avatar de BXDSPORT
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 353
    Par défaut Pb menu avec php et mysql
    Bonjour

    J'ai un souci. Mon script créé l'erreur suivante :
    Fatal error: Maximum execution time of 30 seconds exceeded in E:\Sites\tests\MenuPhp\index.php on line 26
    Voici mon code php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Bonjour à toi,

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

    Sinon tu peux essayer comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  3. #3
    Membre éclairé Avatar de BXDSPORT
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 353
    Par défaut
    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.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    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
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ;

  5. #5
    Membre éclairé Avatar de BXDSPORT
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 353
    Par défaut
    J'obtiens les parents mais pas les enfants.
    Pourquoi il ne reconnait pas le test ?

  6. #6
    Membre éclairé Avatar de BXDSPORT
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 353
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. Problème avec PHP et MySQL
    Par Vatgas dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 09/08/2006, 13h07
  2. probleme avec php et mysql
    Par rane dans le forum Requêtes
    Réponses: 3
    Dernier message: 01/06/2006, 18h26
  3. problème dans un livre d'or avec php et mysql
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/12/2005, 18h04
  4. [SGBD] Probleme Avec Php et Mysql
    Par junior258 dans le forum Installation
    Réponses: 2
    Dernier message: 20/09/2005, 10h39
  5. Travailler avec PHP / Apache / MySQL
    Par R3iTt0R dans le forum Linux
    Réponses: 22
    Dernier message: 24/06/2004, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo