Un souci dans un menu simple dans le contexte de tableaux MySql [Résolu/Fermé]

Signaler
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
-
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
-
Bonjour à tous, Bonjour le forum,

J'utilise le type tableau en php-mysql et une requête type simple va s'écrire:
echo '<p>Couleur: <b>' . $resultat[0]["Couleur"] . '</b></p>';
Et çà marche en local et en ligne!

Je veux réaliser un menu gauche simple (pas déroulant, pas dynamique pour l’instant) et j’ai trouvé pas mal de choses déjà sur les forums récents et j’ai transposé ce que j’ai compris (PDO) mais cela n’accroche pas (mon menu ne s’affiche pas et il n’y a pas de message d’erreur).
Il faut dire que je débute en PDO!

En pratique et en première approche je veux obtenir une liste de menu gauche de ce type (les 1 2 3 sont factices, en fait ce sont des mots différents):
<p><a href="mapage.php?Rang=numeroduchamp1"><i>monliennomassocie1</i></a></p>
<p><a href="mapage.php?Rang=numeroduchamp2"><i>monliennomassocie2</i></a></p>
<p><a href="mapage.php?Rang=numeroduchamp3"><i>monliennomassocie3</i></a></p>
Etc. , etc. plus de 300 (je sais le faire avec un include en php et cela s’affiche mais sans mysql)

En potassant voici le code auquel je suis arrivé (et qui n’«accroche » pas) :
function getMenu($conn) {
$sql = "SELECT Rang, monliennomassocie FROM table1 ORDER BY monliennomassocie";
foreach ($conn->query($sql) as $row) {
echo'<a href="mapage.php?Rang=' . $row[0]["Rang"] .'"><i>' . $row[0][" monliennomassocie"]. '</i></a>';
}
}

Merci de votre aide!

Seb


3 réponses

Messages postés
32527
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 mai 2021
3 493
Bonjour,

Commence par ajouter, en haut de ton fichier php (avant toute autre instruction...) le code :
// affiche les erreurs PHP
error_reporting(E_ALL);


Ensuite, active l'affichage des erreurs PDO en adaptant le script suivant à ta connexion pdo actuelle:
<?php
//Fichier de connexion à la BDD à inclure dans les pages
try{
 $bdd = new PDO('mysql:host=localhost;dbname=site1;charset=utf8', 'root', '');
 $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
?>


Et enfin... pense à utiliser des bloc TRY/Catch pour intercepter les éventuelles erreurs dans le code ou les requêtes.
par exemple pour ton code actuel :
function getMenu($bdd) {
    $sql =  "SELECT Rang
                           , monliennomassocie 
                  FROM table1 
                  ORDER BY monliennomassocie";

//exécution de la requete 
 try{ 
     $prepare = $bdd->prepare($sql);
     $prepare->execute();  
  }catch(Exception $e){
       //en cas de souci dans la requete
       echo "Erreur !  " .$e->getMessage();
  }
    
  // on stocke le résultat dans un array
 $result = $prepare->fetchAll();

 foreach($result as $row){
   $rang = $row['Rang'];
   $monliennomassocie = $row[' monliennomassocie'];
    echo "<a href='mapage.php?Rang=$rang'>
               <i>$monliennomassocie</i>
              </a>";
 }

}




Tu noteras que dans le foreach j'ai extrait les variables AVANT de les utiliser....
Tu verras également que ton [0] a disparu... (cause probable de ton erreur au départ....)

Cordialement, 
Jordane                                                                 
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
Bonjour Jordane45,

Et merci de ton aide !
D’abord petit souci de communication, je suis débutant en PDO mais j’ai déjà réalisé des requêtes simples sur ma page et j’avais déjà 2 des 3 contrôles d’erreur que tu a suggérés.
J’ai ajouté le 3ème.

J’ai réarrangé la requête comme tu proposes et j’ai enlevé l’erreur de [0], et çà marche nickel.
Tu as trouvé !
Super et bravos !
Et tu me fais progresser avec tes conseils.

Me permets-tu une petite question subsidiaire (là je ne sais pas comment faire du tout).
Comme mon menu fait plus de 300 lignes, bonjour la galère avec l’ascenseur pour les mots commençant au delà de la lettre n !
Donc pourrais-tu me piloter pour le rendre un peu dynamique avec php (avec ou pas de js) ?
3 options,
simple, je met des signets A | B | C | D etc au début de la liste et alors dans ma requête sql il faut insérer des intertitres avec une lettre seule à chaque fois que les mots changent de 1ère lettre, par exemple en passant de A à B sans casse (les 26 lettres de l’alphabet sont bien utilisées, majuscule ou minuscule)

avancée, en clonant mon menu statique précédent avant MySql (avec mon js existant), et là je devrais pouvoir partir de l’option 1, car avec mon js je n’ai que 2 types de code :
Pour une lettre seule : <div class="menu" id="menu1" onclick="afficheMenu(this)"><a href="#">A</a></div><div id="sousmenu1" style="display:none"> (A correspond à 1, B à 2 etc., donc 3 occurrences variables, lettre, nombre, nombre)
Pour chaque mot : <div class="sousmenu"><a href="mapage.php?Rang=$rang"><i>$monliennomassocie</i></a></div>

sophistiquée (seulement du php), pas de signet et le menu ne comprend que les 26 lettres de l’alphabet verticalement et en cliquant sur une lettre le menu se déploie pour faire apparaître les mots avec comme 1ère lettre la lettre en question (c’est ce que j’avais avant MySql, mais comme indiqué ci-dessus, j’utilisais un js)

J’espère que tu peux m’aider sans te prendre la tête (l’option 1 me va bien)

Merci encore !

A+

Seb
Messages postés
32527
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 mai 2021
3 493
Bonjour,

Ceci étant une NOUVELLE question... merci de mettre cette discussion en "RESOLUE" (lien se trouvant sous le titre de ta question) et d'ouvrir une nouvelle discussion propre à cette nouvelle problématique.
Cela permet rend la navigation dans ce forum plus simple et la recherche de messages/solutions plus rapide pour TOUS les visiteurs de ce site.
Messages postés
110
Date d'inscription
jeudi 13 mai 2010
Statut
Membre
Dernière intervention
24 juillet 2018
5
OK, Jordane45. Avec plaisir.
Encore merci!
Seb