Comment créer un lien avec des éléments d'une base de données?
Sid05
Messages postés
19
Statut
Membre
-
Sid05 Messages postés 19 Statut Membre -
Sid05 Messages postés 19 Statut Membre -
Bonjour,
Je débute en php et j'aimerais faire mon site moi-même.
Sur la page "recette" de mon site, il y a une liste déroulante reprenant toutes les catégories de recettes reprises dans la table "tblcategorie" (idCat et nomCat). Lorsque qu'on a choisit sa catégorie et qu'on clique sur ok, les différentes recettes reprises dans cette catégorie sélectionnée s'affichent une en dessous de l'autre sous forme de tableau avec la photo de la recette, le nom de la recette, la catégorie, le temps de préparation, de cuisson et la difficulté (tblrecettes, nomRecettes...)
Jusque là, tout se passe bien et tout s'affiche correctement.
Ce que j'aimerais, c'est que quand on clique sur la photo ou sur le nom de la recette, un lien nous envoie à une page avec la recette complète (style marmiton: https://www.marmiton.org/recettes/recherche.aspx?type=all&aqt=poulet mais je n'y arrive pas :??:
Voici mon code:
Je débute en php et j'aimerais faire mon site moi-même.
Sur la page "recette" de mon site, il y a une liste déroulante reprenant toutes les catégories de recettes reprises dans la table "tblcategorie" (idCat et nomCat). Lorsque qu'on a choisit sa catégorie et qu'on clique sur ok, les différentes recettes reprises dans cette catégorie sélectionnée s'affichent une en dessous de l'autre sous forme de tableau avec la photo de la recette, le nom de la recette, la catégorie, le temps de préparation, de cuisson et la difficulté (tblrecettes, nomRecettes...)
Jusque là, tout se passe bien et tout s'affiche correctement.
Ce que j'aimerais, c'est que quand on clique sur la photo ou sur le nom de la recette, un lien nous envoie à une page avec la recette complète (style marmiton: https://www.marmiton.org/recettes/recherche.aspx?type=all&aqt=poulet mais je n'y arrive pas :??:
Voici mon code:
<?php
extract($_GET);
if(!isset($idCat)) {
$idCat= "29";
}
?>
<?php
function listeCat($idCat) { // pour afficher les catégorie dans ma liste déroulante
$sql = "select *
from tblcategories
order by nomCat" ;
$rs = mysql_query($sql)
or die("Erreur de requête : $sql" ) ;
?>
<form method="get" action="" >
<input type="hidden" name="page" value="06" />
<select name="idCat" class="select">
<?php
while ($row = mysql_fetch_array($rs)) {
extract($row) ;
$buf = "" ;
if ($id == $idCat) {
$buf = "selected" ;
}
?>
<option <?php print $buf ?> value="<?php print $idCat ?>">
<?php print $nomCat ?>
</option>
<?php
}
?>
</select>
<input type="submit" value=" ok " />
</form>
// pour afficher les catégorie dans ma liste déroulante
<?php
}
?>
<?php
function listeRecettes($idCat) { // pour afficher les recettes de la catégorie sélectionnée
$sql = "SELECT R.*, P.*
FROM tblrecettes R
INNER JOIN tblcategories P
ON R.idCat = P.idCat
WHERE P.idCat = $idCat
ORDER BY R.nomRecettes ";
$rs = mysql_query($sql) or die ("Erreur de requête:$sql" );
print "<table>" ;
$i=1 ;
while($row=mysql_fetch_array($rs)) {
extract($row) ;
$photos = $_FILES["photos"] ;
if (($i % 2 ) == 0) {
$classe = "paire" ;
} else {
$classe = "impaire" ;
}
?>
<br /><br /><p class="titre_recettes"> // Le tableau avec toutes les recettes
<tr class="<?php print $classe;?>">
<th rowspan="2" valign="middle" ><a href="index.php?page=23"><img src="<?php print $photos ;?>" class="photo" /></th>
<th valign="middle"><?php print $nomRecettes;?> (<?php print $nomCat ;?> )</th>
</tr>
<tr class="<?php print $classe;?>">
<td valign="top">Temps de préparation: <?php print $temps_prepa;?> - Temps de cuisson: <?php print $temps_cuisson;?><br />Difficulté: <?php print $difficulte;?></td>
</tr>
<?php
$i++ ;
}
print "</table>" ;
}
?>
</head>
<body>
<?php
include "include/connexion.inc.php" ;
?>
<article>
<label for="categorie" class="select">Rechercher par catégorie</label>
<?php // Afficher le tableau sur la page
listeCat($idCat) ;
listeRecettes($idCat) ;
?>
</article>
</body>
</html>
4 réponses
-
Tu melanges le HTML et le PHP et c'est imbuvable :
function listeCat($idCat) { // pour afficher les catégorie dans ma liste déroulante
$sql = "select *
from tblcategories
order by nomCat" ;
$rs = mysql_query($sql)
or die("Erreur de requête : $sql" ) ;
while ($l = mysql_fetch_array($rs))
{
if ($id == $idCat) {
$buf = "selected" ;
}
$option .= "<option $buf value='$idCat'>$nomCat</option>";
}
return "<select name='categorie'> $option </select>";
}
?>
Pour a deuxieme fonction :
function listeRecettes($idCat) { // pour afficher les recettes de la catégorie sélectionnée
$sql = "SELECT R.*, P.*
FROM tblrecettes R
INNER JOIN tblcategories P
ON R.idCat = P.idCat
WHERE P.idCat = $idCat
ORDER BY R.nomRecettes ";
$rs = mysql_query($sql) or die ("Erreur de requête:$sql" );
$tab = "<table>" ;
$i=1 ;
while($row=mysql_fetch_array($rs)) {
extract($row) ;
$photos = $_FILES["photos"] ;
if (($i % 2 ) == 0) {
$classe = "paire" ;
} else {
$classe = "impaire" ;
}
$tab .= "
<tr class='$classe'>
<th rowspan='2' valign='middle' ><a href='index.php?page=23'><img src='$photos' class='photo /></th>
<th valign='middle>$nomRecettes $nomCat </th>
</tr>
<tr class='$classe'>
<td valign='top'>Temps de préparation: $temps_prepa;> - Temps de cuisson: $temps_cuisson <br />Difficulté: $difficulte </td>
</tr>
";
}
$i++ ;
}
$tab .= "</table>" ;
}
return $tab;
Pour afficher tu fais :
</head>
<body>
<?php
include "include/connexion.inc.php" ;
?>
<article>
<label for="categorie" class="select">Rechercher par catégorie</label>
<?php // Afficher le tableau sur la page
echo listeCat($idCat) ;
echo listeRecettes($idCat) ;
?>
</article>
</body>
</html>
Un truc dans le genre ... Je suis pas sur que la deuxième fonction fonctionne ! -
Merci pour la réponse.
Oui, je débute et je mélange peut-être un peu.
J'ai essayé mais en effet, il doit y avoir quelque chose qui ne va pas car ça ne marche pas.
Je vais regarder en profondeur ;-) -
Voilà, j'ai changé mon code
<?php extract($_GET); if(!isset($idCat)) { $idCat= "29"; } ?> <label for="categorie" class="select">Rechercher par catégorie</label> <?php include "include/connexion.inc.php" ; ?> <?php echo'<form method="get" action="" >'; echo'<input type="hidden" name="page" value="06" />'; $reponse = mysql_query("select * from tblcategories order by nomCat" ); echo'<select name="idCat">'; while ($donnees = mysql_fetch_array($reponse) ) { echo '<option value="'.$donnees['idCat'].'">'.$donnees['nomCat'].'</option>'; } echo'</select>'; echo'<input type="submit" value=" ok ">'; echo'</form>'; ?> <br /><br /> <?php $sql = "SELECT R.*, P.* FROM tblrecettes R INNER JOIN tblcategories P ON R.idCat = P.idCat WHERE P.idCat = $idCat ORDER BY R.nomRecettes "; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); echo "<table>\n"; while ($data = mysql_fetch_array($req)) { // on affiche les résultats echo "<tr>"; echo "<td rowspan="2" padding-lef="1em" padding-right="1em" color="#900" text-align="left">"; echo '<a href="'.$data.'"><img src="./mini/'.$photo.'" border="none" height="auto" width="100px"/><br/></a>'; echo "</td>"; echo "<th padding-lef="1em" padding-right="1em" color="#900" text-align="left">"; echo ''.$data['nomRecettes'].' ('; echo ''.$data['nomCat'].')'.'<br />'; echo "</th>"; echo "</tr>"; echo "<tr>"; echo "<td padding-lef="1em" padding-right="1em" color="#900" text-align="left">"; echo 'Temps de préparation: '.$data['temps_prepa'].' - '; echo 'Temps de cuisson: '.$data['temps_cuisson'].'<br />'; echo 'Difficulté: '.$data['difficulte'].'<br />'; echo "</td>"; echo "</tr>"; } echo "</table>\n"; mysql_free_result ($req); mysql_close (); ?> </body> </html>
Ce que j'aimerais, c'est que quand on clique sur la photo ou sur le nom de la recette, un lien nous envoie à une page avec la recette complète (style marmiton: https://www.marmiton.org/recettes/recherche.aspx?type=all&aqt=poulet mais je n'y arrive pas :??: -
Voilà, j'ai changé mon code:
Pour la page recettes.php (avec la liste des recettes):
<?php extract($_GET); if(!isset($idCat)) { $idCat= "29"; } ?> <label for="categorie" class="select">Rechercher par catégorie</label> <?php echo'<form method="get" action="" >'; echo'<input type="hidden" name="page" value="06" />'; $reponse = mysql_query("select * from tblcategories order by nomCat" ); echo'<select name="idCat">'; while ($donnees = mysql_fetch_array($reponse) ) { echo '<option value="'.$donnees['idCat'].'">'.$donnees['nomCat'].'</option>'; } echo'</select>'; echo'<input type="submit" value=" ok ">'; echo'</form>'; ?> <?php include "include/connexion.inc.php" ; ?> <br /><br /> <?php $sql = "SELECT R.*, P.* FROM tblrecettes R INNER JOIN tblcategories P ON R.idCat = P.idCat WHERE P.idCat = $idCat ORDER BY R.nomRecettes "; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); echo "<table>\n"; while ($data = mysql_fetch_array($req)) { // on affiche les résultats echo "<tr>"; echo "<td rowspan="2" padding-lef="1em" padding-right="1em" color="#900" text-align="left">"; echo '<a href="inc/recettes_affichage.php?id_recette_a_lire=' , $data['idRecettes'] , '"><img src="./mini/'.$photo.'" border="none" height="auto" width="100px"/><br/></a>'; echo "</td>"; echo "<th padding-lef="1em" padding-right="1em" color="#900" text-align="left">"; echo ''.$data['nomRecettes'].' ('; echo ''.$data['nomCat'].')'.'<br />'; echo "</th>"; echo "</tr>"; echo "<tr>"; echo "<td padding-lef="1em" padding-right="1em" color="#900" text-align="left">"; echo 'Temps de préparation: '.$data['temps_prepa'].' - '; echo 'Temps de cuisson: '.$data['temps_cuisson'].'<br />'; echo 'Difficulté: '.$data['difficulte'].'<br />'; echo "</td>"; echo "</tr>"; } echo "</table>\n"; mysql_free_result ($req); mysql_close (); ?> </body> </html>
Et pour la page qui affiche la recette:
<?php include "include/connexion.inc.php" ; ?> <?php if (!isset($_GET['id_recette_a_lire'])) { echo 'Sujet non défini.'; } else { echo'<form method="get" action="" >'; echo'<input type="hidden" name="page" value="23" />'; $sql = 'SELECT R.*, P.* FROM tblrecettes R INNER JOIN tblcategories P ON R.idCat = P.idCat WHERE P.idRecettes="'.$_GET['id_recette_a_lire'].'"'; $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); while ($data = mysql_fetch_array($req)) { echo "<tr>"; echo "<td> "; echo ''.$data['nomCat'].')'.'<br />'; echo "</td>"; echo "</tr>"; } ?> <table>
Mais voilà ce qui s'affiche:
Erreur SQL !
SELECT R.*, P.* FROM tblrecettes R INNER JOIN tblcategories P ON R.idCat = P.idCat WHERE P.idRecettes="4"
No database selected