Comment créer un lien avec des éléments d'une base de données?

Fermé
Sid05 Messages postés 19 Date d'inscription mercredi 3 septembre 2014 Statut Membre Dernière intervention 6 novembre 2014 - Modifié par Sid05 le 3/09/2014 à 15:40
Sid05 Messages postés 19 Date d'inscription mercredi 3 septembre 2014 Statut Membre Dernière intervention 6 novembre 2014 - 18 sept. 2014 à 19:57
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:


<?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>
A voir également:

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 !
0
Sid05 Messages postés 19 Date d'inscription mercredi 3 septembre 2014 Statut Membre Dernière intervention 6 novembre 2014
4 sept. 2014 à 15:06
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 ;-)
0
Sid05 Messages postés 19 Date d'inscription mercredi 3 septembre 2014 Statut Membre Dernière intervention 6 novembre 2014
18 sept. 2014 à 18:00
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 :??:
0
Sid05 Messages postés 19 Date d'inscription mercredi 3 septembre 2014 Statut Membre Dernière intervention 6 novembre 2014
18 sept. 2014 à 19:57
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
0