Transmission de données via une URL

Eléphant du PHP | 179 Messages

03 août 2005, 09:55

Bonjour à tous,

Je suis en train de travailler sur ça:

Page A: menu déroulant. Je clique sur "Chimie".
Page B: tableau dynamique. Il affiche tous les produits (cliquables) dont la discipline est "Chimie".
Page C: fiche descriptive. J'ai cliqué sur le produit "Schmilblick" dont la discipline est la chimie.

Hier, grâce à votre aide j'ai résolu les problèmes de ma page B. Il me faut maintenant afficher ma fiche descriptive via une URL.

Donc j'ai un tableau, avec quelques produits. Si je clique sur le premier, il m'affiche sa fiche descriptive. Si je clique sur les autres, il m'affiche encore la fiche descriptive du premier produit au lieu de celle du produit cliquée.

Voici le code, quand il accepte de m'afficher quelque chose. Mes requetes semblent inabouties (pas de WHERE).
<?php

#connection à la base#
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

#sélection de la table#
$requete1="SELECT * FROM produits";
$result1=mysql_query($requete1);

$NomProduit = mysql_result($result1,0,'NomProduit');
$RefSociete = mysql_result($result1,0,'RefSociete');
$DisciplinesBases = mysql_result($result1,0,'DisciplinesBases');
$TypeBases = mysql_result($result1,0,'TypeBases');
$TypeAcces = mysql_result($result1,0,'TypeAcces');
$Presentation = mysql_result($result1,0,'Presentation');
$TypeRecherche = mysql_result($result1,0,'TypeRecherche');
$Site = mysql_result($result1,0,'Site');

mysql_close($lien);
?>

<? echo $NomProduit;?>

Nom du produit :
<? echo $NomProduit;?>

Nom de la société :
 
<?php 
 #connection à la base#
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

#affichage du nom du groupe#
$requete2="SELECT * FROM societes";
$result2=mysql_query($requete2);
while ($val2=mysql_fetch_array($result2)){
	if ($val2["IdSociete"] == $RefSociete){ 
		print ('');
?>
	 
<!--ici du code html d'où la césure--><? echo $val2["NomSociete"];?>

<?
}
}
mysql_close($lien);
?>

Disciplines des bases :
<? echo $DisciplinesBases;?>

ETC.
Si je modifie ma requête (en ajoutant WHERE IdProduit=".$IdProduit.") et que je récupère des données, il ne reconnaît pas ma variable IdProduit car je ne sais pas la transmettre d'une URL (d'un formulaire si, mais pas d'une URL).

Auriez vous des suggestions? Merci pour votre réponse.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 10:02

pour transmettre dans une url :

pageB.php?id_produit=5

sur pageB.php tu récupèreras :
$id_prdouit = $_GET['id_produit'];

Eléphant du PHP | 179 Messages

03 août 2005, 10:11

pour transmettre dans une url :

pageB.php?id_produit=5

sur pageB.php tu récupèreras :
PHP:
$id_prdouit = $_GET['id_produit'];
Ouh toutes les questions qui me passent par la tête!
:lol:

1. Est-ce que je dois le présenter sous forme de lien html, de type
<a href=pageB.php?IdProduit=...>NomProduit</a>

2. Est-ce que je peux écrire "pageB.php?IdProduit=$IdProduit" ou quelque chose d'approchant? Plutôt que de donner un identifiant précis?

3. Pourquoi je me réfère à la page B et pas à la page C? #-o

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 10:14

Ouh toutes les questions qui me passent par la tête!
:lol:
ça tombe bien c'est l'endroit pour les poser :) en plus j'ai suivi la discussion d'hier
1. Est-ce que je dois le présenter sous forme de lien html, de type
<a href=pageB.php?IdProduit=...>NomProduit</a>
heu oui pour passer par l'url tu n'as pas beaucoup d'autres choix
un bouton à la limite mais bon le plus simple et le plus pratique c'est encore le lien
2. Est-ce que je peux écrire "pageB.php?IdProduit=$IdProduit" ou quelque chose d'approchant? Plutôt que de donner un identifiant précis?
bien sûr, encore un des miracles du PHP :lol:
lorsque tu vas lister tes produits correspondants à chaque catégorie, tu vas pour chacun récupérer quelques infos, dont l'identifiant. Tu peux ensuite afficher cet identifiant dans ton lien, en utilisant la variable correspondante.
3. Pourquoi je me réfère à la page B et pas à la page C? #-o
parceque c'était pour l'exemple et que je me suis trompé, c'est effectivement à la pageC que tu dois faire référence

Eléphant du PHP | 179 Messages

03 août 2005, 10:42

Il reconnaît désormais mon IdProduit mais pas mes autres champs. :?: :!:


Est-ce que je dois les transmettre via l'URL comme ceci?

Page B :

Code : Tout sélectionner

<a href = "aff_discibases2.php?IdProduit=' ".$IdProduit." '&NomProduit=' ".$NomProduit." ' ">Nom du produit </a>
Page C :
$IdProduit = $_GET['IdProduit'];
$NomProduit = $_GET['NomProduit'];

ETC.
Est-ce que l'Id ne doit pas suffire?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 11:04

l'identifiant devrait suffire, puisque c'est ta requête SQL qui va ensuite sélectionner les infos du produit correspondant

Eléphant du PHP | 179 Messages

03 août 2005, 11:37

Ca me désole d'être aussi mauvaise :cry:

Bon alors voilà mon lien page B:

Code : Tout sélectionner

<a href="aff_discibases2.php?IdProduit=$IdProduit"><? print ($val["NomProduit"]);?></a>
Voilà mon code page C:
<?php
#récupération des données#
	$IdProduit = $_GET['IdProduit']; 

#connection à la base#
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

#sélection de la table#
	$requete1="SELECT IdProduit, NomProduit, RefSociete, DisciplinesBases, TypeBases, TypeAcces, Presentation, TypeRecherche, Site FROM produits WHERE IdProduit='".$IdProduit."'";
	$result1=mysql_query($requete1);
?>

<? echo $NomProduit;?>

Nom du produit :<? echo $NomProduit;?>

Nom de la société :

<?php
#connection à la base#
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

#affichage du nom du groupe#
	$requete2="SELECT * FROM societes";
	$result2=mysql_query($requete2);
while ($val2=mysql_fetch_array($result2))
	{
	if ($val2["IdSociete"] == $RefSociete)
		{ 
		print ('');
?>
	 
<? echo $val2["NomSociete"];?>

<?
		}
	}
mysql_close($lien);
?>

ETC

<?php
mysql_close($lien);
?>
Il ne reconnaît pas mes variables. J'ai tenté plusieurs choses mais ça s'est soldé par un échec. Si quelqu'un a une suggestion, je suis preneuse 8-[
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 11:40

Code : Tout sélectionner

<a href="aff_discibases2.php?IdProduit=$IdProduit"><? print ($val["NomProduit"]);?></a>
tu es sûre que la valeur de ta variable $IdProduit est bien insérée dans le lien ? :roll:

moi pas ;)

Eléphant du PHP | 179 Messages

03 août 2005, 11:56

J'ai tenté ceci:

Code : Tout sélectionner

<a href="aff_discibases2.php?IdProduit='".$IdProduit."'"><? print ($val["NomProduit"]);?></a>
C'était pareil: à force de bidouiller, on ne sait plus trop. Par contre, je peux bien mettre mon lien en chemin absolu, non?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 12:00

ce que je voulais dire, c'est est-ce que l'id est bien inséré ? puisque tu mets directement ta variable dans le lien, cela laisse supposer que tu es déjà entre des balises PHP

mais ensuite tu les ouvres pour afficher le nom ! je suppose donc que précdemment tu n'es pas entre balises PHP, donc ta variable est inséré telle quelle, et non pas remplacée par sa valeur...

je verrais donc plutôt ceci :

Code : Tout sélectionner

<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><? print ($val["NomProduit"]);?></a>
je le redis : préfère <?php à <?

un petit coup d'oeil dans le code source est utile parfois ;)
et pour lien encore plus facile, tu passes ton curseur dessus et tu regardes en bas à gauche dans la barre d'état du navigateur s'il est bien formé

tu peux mettre le lien en chemin absolu mais si tu mets l'adresse complète "en dur", si tu changes de nom de domaine par exemple, tous tes liens sont moisis :)

Eléphant du PHP | 179 Messages

03 août 2005, 12:08

:shock: :shock: :shock:
Je n'aurais jamais trouvé ça!!

Je vais tenter...
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 12:10

pourtant c'est le même principe partout... à partir du moment où tu veux insérer une variable PHP c'est :
- entre balises PHP
- avec echo ou print, sinon elle ne s'affichera pas

Eléphant du PHP | 179 Messages

03 août 2005, 12:31

Je crois que je commence à percevoir mon erreur. Le problème ne se situe apparemment pas page C mais page B. Il reconnaît la variable "Discipline" puisqu'elle est envoyée via le formulaire de la page A, mais ne reconnaît pas la variable "IdProduit".

Comment dois-je faire pour qu'elle soit reconnue page B?

Un champ caché page A?
Une autre solution que je ne connais pas encore?
Une déclaration de variable dont je ne me rappelle plus?
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 août 2005, 12:36

pourquoi as-tu besoin de la variable IdProduit pageB ?? elle est juste récupérée de la base de données

pageA : listage des différentes catégories et possibilité d'en sélectionner une
|
|
|-> pageB : récupération de la catégorie choisie, listage des produits de cette catégorie
pour chaque : affichage d'un lien vers pageC avec en paramètre l'identifiant du produit
|
|
|-> pageC : récupération de l'identifiant du produit choisi (transmis par l'url) et sélection/affichage des données de ce produit

fais-voir la boucle de pageB qui fais la liste des produits récupérés dans la base de données

Eléphant du PHP | 179 Messages

03 août 2005, 12:53

A vrai dire, il ne reconnaît pas IdProduit quand je glisse mon curseur sur le lien (comme tu me l'a conseillé). Etant une variable indéfinie, j'ai supposé qu'il fallait trouver un moyen de l'appeler, d'une manière quelconque. Mais peut-être est-ce que je complique les choses? #-o

<?php
// ici on récupère la valeur sélectionnée dans le formulaire précédent
$DisciplinesBases = $_POST['DisciplinesBases'];

	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

// requête de sélection des produits qui correspondent au paramètre "discipline"

	$requete="SELECT IdProduit, NomProduit, DisciplinesBases FROM produits WHERE DisciplinesBases= '".$DisciplinesBases."'";
	$result=mysql_query($requete);

// tant qu'il y a des produits à afficher, on les affiche
if (mysql_num_rows($result))
{
	while ($val=mysql_fetch_array($result))
	{
?>

    
    <tr bgcolor="#ffffe0">    
    
<td>
<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><?php print ($val["NomProduit"]);?></a> 
</td>

<td> <?php print ($val["DisciplinesBases"]);?> </td>
</tr>
 
<?php
$i = 0;
while ($data=mysql_fetch_assoc($result))
			{

if($i%2 == 0)
				{
$couleur = "#ffcc00";
				}
else
				{
$couleur = "#ffffe0";
				}
echo "<tr>";
echo "<td bgcolor= '$couleur'>"; 
?>

<a href="aff_discibases2.php?IdProduit=<?php print $IdProduit; ?>"><?php echo $data['NomProduit']; ?> </a>

<?php 
echo "</td>";
echo "<td bgcolor=\"".$couleur."\">".$data['DisciplinesBases']."</td>";
echo "</tr>";
$i++;
			}
		}
	}
else
{
echo "<center><h2>Il n'y a pas de résultat<h2></center><br />";
}
mysql_close($lien);
?>
Petit à petit, on devient moins petit... mais qu'est-ce qu'on vieillit!