ID absent Pourquoi ? [php]

txiki Messages postés 6596 Date d'inscription   Statut Contributeur Dernière intervention   -  
txiki Messages postés 6596 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai un souci avec mes recettes (3 tables; tapas, ingredients et photos_recettes).
En début de page j'ai mis ceci:
// ==============================================================
// On recupere la variable "id" correspondant à la recette choisie
// ==============================================================
$id=$_GET['id']; // La manipulation de $id est plus simple que celle de $_POST["id"]

Puis ma requête:
//===========================================
// requête SQL qui affiche les infos de la fiche correspondante au lien cliqué 
//================================================
$link = '$link';

// On fait une jointure sur trois tables (tapas, ingredients et photos_recettes) avec seulement la ligne qui correspond à la recette choisie 
// SELECT * FROM `tapas`
// LEFT JOIN `ingredients` ON (instruction)
// LEFT JOIN `photos_recettes` ON (instruction)
$select = "SELECT * FROM `tapas` LEFT JOIN `ingredients` ON (ingredients.id = tapas.id) LEFT JOIN `photos_recettes` ON (photos_recettes.id = tapas.id)"; 
$result = mysql_query($select)  or die ('Erreur : '.mysql_error() );

// mysql_fetch_row genere un tableau correspondant a la ligne selectionnée de la BDD
// Les informations sont accessibles par $row["id"], $row["Nom_Recette"], $row["Info"]...
$row= mysql_fetch_array($result);


Seulement, quand on va sur Recettes/Les Tapas-test (5 pour le moment) quel que soit le lien cliqué, ça me renvoi TOUJOURS la première (Albondigas) et pour cause ! si on regarde l'url, il n'y a pas d'ID. Je déduis qu'il n'est pas récupéré, non ? Mais pourquoi ?

http://txiki.free.fr/index.php?page=Fiche_Recette&lang=Fr&id=

Ce ne serait pas la première fois. Pourtant je me suis inspiré de la page Prénoms/Prénoms basques qui, elle, fonctionne parfaitement.
Quelqu'un aurait l'amabilité de me regarder ce code et, éventuellement, plus (de code) si besoin ?

Merci d'avance pour votre aide.

En plus les photos ne s'affichent pas mais on verra ça plus tard.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
A voir également:

5 réponses

jjsteing Messages postés 1670 Date d'inscription   Statut Contributeur Dernière intervention   181
 
bonsoir :)

bon, apparement ton $row= mysql_fetch_array($result); te remonte bien la liste des tapas :

Albondigas
Barquettes de jambon blanc
Beignets de chorizo
Beignets de thon
Beignets fromage et crevettes

le probleme vient du lien qu il y a dessus et tu nous donne pas le code juste apres le $row= mysql_fetch_array($result); qui doit etre du style :

echo "<a href:page=".$NomFiche."&lang=".$Lang."&id=".$id.">".$NomRecette."</a>";

donc si tu pouvait nous faire suivre les lignes de codes correspondant au <a href> et celles où tu met les données de $NomFiche, $Lang,$NomRecette... on pourra un peu plus t aider ;)
1
txiki Messages postés 6596 Date d'inscription   Statut Contributeur Dernière intervention   521
 
Bonsoir jjsteing et excuse pour ce retard (j'ai dormi puis mangé).
Ci-dessous la suite du code:
// mysql_fetch_row genere un tableau correspondant a la ligne selectionnée de la BDD
// Les informations sont accessibles par $row["id"], $row["Nom_Recette"], $row["Info"]...
$row= mysql_fetch_array($result);  

// ===============================
// Affichage de la fiche dans un tableau dynamique 
// ===============================
	echo "<div id='fiche'><table margin='0' align='center' font size='100%'>\n";  // largeur du tableau 96 %
	echo "<tr><td align='center' colspan='3'><font-size='2'><font color='#931224'><strong>".$row["Nom_Recette"]."</strong></font></font></td>"; // 3 colonnes fusionnées pour le titre de la recette
	echo "<tr><td class='info_recette_T'><i><font color='#FF0000'>Info pratique / Astuce :</font></i><br /></td><td class='fiche_recette_T'>Ingrédients:<br /></td><td class='fiche_recette_T' width='35%'></td></tr>\n"; // affiche les intitulés des colonnes
	echo "<tr><td class='info_recette'>".$row["Info"]."</td><td class='fiche_ingredient'>".$row["Ingredients"]."</td><td class='fiche_photo'>".$row["Photo"]."</td></tr>\n"; // affiche une éventuelle Info + les ingrédients + la photo si elle est présente
	echo "<tr><td class='fiche_liens' colspan='3' align='center'><a href='index.php?page=Glossaire_AC&lang=Fr'>&nbsp;Glossaire&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Ustensiles&lang=Fr'>&nbsp;Ustensiles&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Trucs_A&lang=Fr'>&nbsp;Trucs & Astuces&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Crustaces1&lang=Fr'>&nbsp;Info crustac&eacute;s&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Intro_produits&lang=Fr'>&nbsp;Info produits&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Intro_labels&lang=Fr'>&nbsp;Info Produits AOC&nbsp;</a></td></tr>\n";
    echo "<tr><td class='fiche_recette' colspan='3'>".$row["Preparation"]."</td></tr>\n"; // affiche la préparation.
	echo "<tr><td class='fiche_auteur' colspan='3' align='right'>".$row["Auteur"]."</td></tr>\n";  // affiche l'auteur de la recette
	echo "</table>\n</div>";
mysql_close();
?>

L'ID est bien en debut de page, pourquoi je devrais le rajouter dans la fiche recette ? Qui plus est dans un echo, je ne veux pas l'afficher l'ID !.

Le lien provient de la page qui liste les tapas (Recettes_Taps Fr.php) dont voici le code:
//=================================================
// requête SQL qui ne prend que le nombre d'enregistrement necessaire à l'affichage.
//======================================================
$req = 'select Nom_Recette FROM tapas ORDER BY Nom_Recette ASC limit '.$limite.','.$nombre;
$result = mysql_query($req)  or die ('Erreur : '.mysql_error() );

//==========================
// si on a récupéré un resultat on l'affiche.
//==========================
$Nom_Recette = "Nom_recette";

if ($total) 
{	
	// on affiche un tableau avec la liste des tapas (par nom de recette)
	echo "<table width='60%' bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";

	// lecture et affichage des résultats  
    while($row = mysql_fetch_array($result)) 
	{
		echo "<tr>";
		echo "<td bgcolor='#FFFFFF' text-align='center'>"; 
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et l'ID
		printf("<a href=\"index.php?page=%s&lang=%s&id=%s\">%s</a>","Fiche_Recette",$lang,$row['id'],$row['Nom_Recette']);
		echo "</td>";
		echo "</tr>\n";
	}   
	echo "</table>\n";
    // fin du tableau.
}
else 
{
	echo "Pas de recette de Tapas trouvé"; 
}

// on libère le résultat
mysql_free_result($result);

//==========================================================================    
// si le nombre d'enregistrement à afficher est plus grand que $nombre 
//==========================================================================
if ($total > $nombre) {
//    affichePages($nombre,$page,$total);  // affichage des liens vers les pages
    displayNextPreviousButtons($limite,$total,$nombre,$page);  // affichage des boutons
}
mysql_close();
?>


Voilà, j'espère que c'est assez clair pour vous et merci encore pour votre aide !.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
hello,
une chose à la fois.
Si tu dis que tu n'as pas d'ID c'est parce que ce mécanisme a échoué
$id=$_GET['id']; <--pas bien récupéré.
Assure toi qu'un champs de type input de html est nommé comme id !
que ce soit via la méthode post ou la methode get, le raisonnement est le meme. les effets différents bien entendu
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
en passant:

$id=$_GET['id']; // La manipulation de $id est plus simple que celle de $_POST["id"]


il faut choisir, ou c' est GET, ou c' est POST !

Post recupere la valeur d' un champs de formulaire, GET recupere la valeur dans l' url !
0
moderno31 Messages postés 872 Date d'inscription   Statut Membre Dernière intervention   92
 
pour compléter ce que dit graffx.
Tu ne peux pas juste mettre en début de page
$id=$_GET['id']; // La manipulation de $id est plus simple que celle de $_POST["id"]

Il faut qu'à un moment donné tu aies affecté un objet html de type input name = 'id' et mis dans ta balise form name='form' method='get'...
Pour espérer récupérer quelque chose !
0
txiki Messages postés 6596 Date d'inscription   Statut Contributeur Dernière intervention   521
 
Salut moderno31,
Je n'utilise pas de formulaire. Le est créé sur une page précédente (Recettes_Tapas Fr.php).

Bref, il y a quelque chose qui m'échape la dedans, mais à force de regarder, corriger, modifier je ne vois plus très clair.

En tous cas merci pour votre aide à tous !

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jjsteing Messages postés 1670 Date d'inscription   Statut Contributeur Dernière intervention   181
 
re:)

Désolé, pas mal de boulot en ce moment...

donc je pense que l erreur vient de

while($row = mysql_fetch_array($result)) 
	{
		echo "<tr>";
		echo "<td bgcolor='#FFFFFF' text-align='center'>"; 
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et l'ID
		printf("<a href=\"index.php?page=%s&lang=%s&id=%s\">%s</a>","Fiche_Recette",$lang,$row['id'],$row['Nom_Recette']);
		echo "</td>";
		echo "</tr>\n";
	}   


au lieu du printf, pourquoi ne fais tu pas :

echo '<a href="index.php?page=Fiche_Recette&lang='.$lang.'&id='.$row['id'].'">'.$row['Nom_Recette'].'</a>';

de plus tu pourrais vérifier que ta requete sql remonte bien les donnée en faisant dans le while :

echo "<script>alert('Lang=".$lang." - Id=".$row['id']." - Nom Recette=".$row['Nom_Recette']."');</script>";

pour remonter les info dans un message box ;)

Tient moi au jus ;)
0
txiki Messages postés 6596 Date d'inscription   Statut Contributeur Dernière intervention   521
 
Salut jjsteing et merci de prendre le temps de regarder mon code,
Moi aussi j'ai du boulot, chiant qui plus est !

Ça ne marche toujours pas. En fait, voici le code de la page des prénoms avec le tableau de l'alphabet qui sert d'accès direct au prénom choisi (Lettre de l'alphabet). Je me suis servi de ce code (qui marche pour les prénoms) pour les recettes.
//============================================================    
// requête SQL qui calcule la limite lorsquelle lettre est spécifié 
// En fait on calcule à quelle position se trouve le 1er enregistrement commençant par cette lettre
//============================================================
if (!empty($_GET["lettre"])) // Voir $lettres$lettres = "ABDEFGHIJKLMNOPRSTUVXYZ";
{
	$lettre = $_GET["lettre"];
	// on compte tous les enregistrements qui se trouvent avant la lettre et c'est tout !
	$select = 'SELECT count(*) FROM prenomsfeminins WHERE lettre <"'.$lettre.'"';
	$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
	$row = mysql_fetch_row($result);
	$limite = $row[0];
}

//====================================================== 
// requête SQL qui compte le nombre total d'enregistrements dans la table.
//======================================================
$select = 'SELECT count(*) FROM prenomsfeminins';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];

//===================================================
// vérifier la validité de notre variable $limite;
//===================================================
if ($limite < 0) $limite = 0;
if ($limite > $total) $limite = $total;

//==============================================================
// requête SQL qui ne prend que le nombre d'enregistrement nécessaire à l'affichage.
//==============================================================
$req = 'select * FROM prenomsfeminins ORDER BY Prenom ASC limit '.$limite.','.$nombre;
$result = mysql_query($req)  or die ('Erreur : '.mysql_error() );

//==============================  
// si on a récupéré un resultat on l'affiche.
//==============================
$lettres = "ABDEFGHIJKLMNOPRSTUVXYZ"; // lettres de l'alphabet du tableau/lien en haut de la page
// je voudrais la même chose mais avec Tapas, Entrées, Potages etc.... seulement ça m'affiche que le 1ère caractère. Comment faire pour avoir ces mots 

if ($total) 
{
	echo "<table bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";	
	echo "<tr bgcolor='#EFEFEF' text-align='center' padding='3px'>";
	// première ligne on affiche l'alphabet/lien
	for ($i=0; $i< strlen($lettres); $i++)
	{
		// On récupère la lettre à la position $i dans $lettres : qd $i vaut 0 on obtient "A", $i vaut 1 on obtient "B" etc ...
		$lettre = substr($lettres,$i,1);
		echo "<td>";
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et la lettre
		printf("<a href=\"index.php?page=%s&lang=%s&lettre=%s\">%s</a>",$page,$lang,$lettre,$lettre);
		echo "</td>";	
		if ($i != strlen($lettres)-1)
		{
			echo "<td>&nbsp;|&nbsp;";
			echo "</td>";
		}	
	}	
	echo "</table>";
	echo "<br /><br />"; //espaces pour éclaircir l'alphabet de la liste
}

if ($total) 
{	
	// on affiche un autre tableau avec la liste des prénoms
	echo "<table width='50%' bgcolor='#FFFFFF' cellspacing='0' cellpadding='0' align='center'>\n";

	// lecture et affichage des résultats  
    while($row = mysql_fetch_array($result)) 
	{
		echo "<tr>";
		echo "<td bgcolor='#FFFFFF' text-align='left'>"; 
		// Construit le lien vers la page index.php en lui passant en paramètre : la page, la langue et l'ID
		printf("<a href=\"index.php?page=%s&lang=%s&id=%s\">%s</a>","Fiche_Prenom",$lang,$row['ID'],$row['Prenom']);
		echo "</td>";
		echo "</tr>\n";
	}   
	echo "</table>\n";
    // fin du tableau.
}
else 
{
	echo "Pas d\'origine pour ce prénom"; // ? il y a forcément une origine sur un prénom
}


J'avais pensé dans un premier temps faire une table par categorie mais me suis ravisé. J'ai renommé cette table "tapas" en "recettes" en ajoutant un champ Categorie de type VARCHAR taille 10 et latin_général_ci

Je ne suis très futé en php et le script des prénoms m'avait été corrigé par quelqu'un ici. Le printf en l'occurrence vient de lui mais ne vois pas à quoi ça sert, la différence entre ça et echo.

Merci infiniment en tous cas. Je m'arrache les cheveux car j'y tiens beaucoup. C'est la première fois aussi que je fais une jointure dans l'affichage de la fiche.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0