Menu dynamique php

Fabien59 -  
 Fabien59 -
Bonjour,

Je voudrais créer un menu dynamique qui reprendrais les infos de ma base de données automatiquement et afficherai un contenu différent selon l'id renvoyé dans l'URL.

Pour être clair : une table avec un champ "id", un champ "titre" et un champ "contenu".

Dans le menu je voudrais récupérer les titres pour en faire des liens, et qu'ensuite quand on clique on affiche le titre et le contenu de l'entrée correspondante.

J'ai déjà fais quelque chose de similaire dans mon site :
En deux pages, une avec une liste déroulante et un autre qui récupère la valeur id envoyée par le select du formulaire. Seulement, étant une liste déroulante, donc un formulaire, j'envoie le GET et hop c'est parti. Mais avec des liens (donc pas de formulaire) je patauge...

Voici quand même un bout de code que j'ai essayé et qui est sans doute bien à côté de la plaque :

<?php

	include("cfgsql.php");
 
$reponse = $bdd->query('SELECT * FROM miroiterie WHERE id = :id');
$requete->bindValue(':id', $_GET['id'], PDO::PARAM_INT); 
$requete->execute(); 
$donnees = $requete->fetch(PDO::FETCH_ASSOC);
$requete->closeCursor();

while ($donnees = $reponse->fetch())


    echo
		'<a href="miroiterie.php?id=' . $donnees['id'] . '" class="lien">'<h1>' . (stripslashes($donnees['titre'])) . '</h1>'</a><br />';

 

$reponse->closeCursor();
 
?>


Merci d'avance et bonne fin de journée :)

A voir également:

3 réponses

Fabien59
 
Personne ?
0
JooS Messages postés 2705 Statut Membre 228
 
Salut,

Quand tu attends un seul résultat(une seuleligne) au plus venant de ta requete, alors pas besoin d'une boucle, un simple "fetch" suffirait ...
$datas = $req->fetch(PDO::FETCH_ASSOC);

Parcontre, si tu attend zéro ou plusieurs résultats, alors il faut une boucle.
while($datas = $req->fetch(PDO::FETCH_ASSOC)) {

}

Toi tu as exécuter les deux ...

<?php
include("cfgsql.php");

$id = 0;
$str = 'SELECT * FROM miroiterie';

if(isset($_GET['id']) AND is_numeric($_GET['id']) AND $_GET['id'] > 0) {
    $id = intval($_GET['id']);
    $str .= ' WHERE id = :id';
}

$requete= $bdd->query($str);
if($id > 0) $requete->bindValue(':id', $id, PDO::PARAM_INT); 
$requete->execute(); 

while ($donnees = $requete->fetch(PDO::FETCH_ASSOC))
    echo '<a href="miroiterie.php?id=' . $donnees['id'] . '" ',
        'class="lien"><h1>' . (stripslashes($donnees['titre'])) . '</h1></a><br />';

$requete->closeCursor();
?>

PS : Tu mélanges trop les noms des objets, fixe toi un modèle de nom significatif et simple comme "$req" et utilises le ...

Mettez en résolu quand c'est résolu -.- ...
0
Fabien59
 
J'ai pas trop saisi ce que tu m'as expliqué pour les boucles et les résultats mais à force de persévérance et en m'inspirant de ce que j'avais déjà fait avec ma liste déroulante j'ai réussi à m'en sortir tout seul comme un grand :)

Je mets mon code en espérant que c'est du boulot correct (en tout cas ça fonctionne lol) :

Ma page est divisée en deux parties (une div flottante pour le contenu et le menu à côté) :

		<div id="content" class="content">

		<div id="contenu" class="contenu">
<?php

	include("cfgsql.php");
 
$requete = $bdd->prepare('SELECT * FROM miroiterie WHERE id = :id'); 
$requete->bindValue(':id', $_GET['id'], PDO::PARAM_INT); 
$requete->execute(); 
$donnees = $requete->fetch(PDO::FETCH_ASSOC);
$requete->closeCursor();

{
    echo '<h1>' . (stripslashes($donnees['titre'])) . '</h1>';
	echo '<img src="' . $donnees['imgurl'] . '" alt="" width="670px" class="imageflottantemiroiterie"/>';
	echo '<h4>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['stitre1']))))) . '</h4>';
	echo '<p>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['contenu1']))))) . '</p>';
	echo '<h4>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['stitre2']))))) . '</h4>';
	echo '<p>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['contenu2']))))) . '</p>';
	echo '<h4>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['stitre3']))))) . '</h4>';
	echo '<p>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['contenu3']))))) . '</p>';
	echo '<h4>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['stitre4']))))) . '</h4>';
	echo '<p>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['contenu4']))))) . '</p>';
	echo '<h4>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['stitre5']))))) . '</h4>';
	echo '<p>' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['contenu5']))))) . '</p>';
}
 
?>
		</div>
		
		<div id="menu" class="menu">
		<h1>
		Nos prestations 
		</h1>
		<h3>
		<?php

	include_once("cfgsql.php");
 
$reponse = $bdd->query('SELECT id, titre FROM miroiterie');

while ($donnees = $reponse->fetch())

{
    echo'<a href="miroiterie.php?id=' . $donnees['id'] . '" class="lien">' . (nl2br(htmlspecialchars(htmlspecialchars_decode(stripslashes($donnees['titre']))))) . '</a><br />';
}

?>
		</h3>
		</div>
		
		<br />
		
		</div>
0
JooS Messages postés 2705 Statut Membre 228
 
Oui, 2h du matin, ça explique le n'importe quoi que j'ai posté ...

Bref, il te suffit juste d'ajouté une condition pour en cas ou le $_GET['id'] n'existerait pas.
0
Fabien59
 
Oui comme tu me l'as montré dans mon autre sujet pour l'update ! Vraiment merci tu m'as bien fait avancer mon site est sur le point d'être terminé :)
0