Menu dynamique php

Fermé
Fabien59 - 22 juil. 2013 à 17:55
 Fabien59 - 24 juil. 2013 à 18:13
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

Personne ?
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 24/07/2013 à 02:56
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
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 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
24 juil. 2013 à 16:10
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
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