Affichage d'une donnée de type [1,n]

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage d'une donnée de type [1,n]

par Elisa » 11 oct. 2005, 10:19

:lol: Je ne sais pas. Parfois ça me donne des résultats étranges. Souvent une requête qui devrait fonctionner ne marche pas jusqu'à ce que je réinitialise totalement Easy PHP et que j'ai fermé tous les autres programmes. Ca m'est arrivé sur deux postes différents après que j'ai modifié plusieurs fois et longtemps un script.

par Cyrano » 07 oct. 2005, 16:13

:shock: Alors comment il peut le reconnaitre dans ta version ???
//...
 if ($val3["RefSociete"] == $IdSociete) 
//...

par Invité » 07 oct. 2005, 15:58

Oui j'ai tenté de l'appliquer mais ça ne fonctionnait pas alors j'ai tenté ce code. Il ne reconnaissait pas $IdSociete.

par Cyrano » 07 oct. 2005, 15:52

Regarde le code que j'ai mis juste avant le tiens

par Invité » 07 oct. 2005, 14:55

Logiquement je comprends ce que tu veux dire. Pratiquement, je ne vois pas du tout comment faire. :-s

par Cyrano » 07 oct. 2005, 12:45

C'est drôlement plus lourd ton système, il faudrait limiter le retour de MySQL en ajoutant une clause WHERE identifiant la société, et tu supprimeras le if() dans l'affichage puisque ça ne retournera QUE les produits de cette société.

par Elisa » 07 oct. 2005, 12:38

\:D/ Ca y'est, j'ai trouvé. Cyrano, tu m'a mise sur la voie. La solution était sous mes yeux puisque j'avais déjà fait quelque chose de similaire pour le groupe (cf. le premier message). Seulement, je pensais que ça ne pouvait afficher qu'un seul groupe (ce qui est logique en soi puisqu'une société ne peut avoir qu'un seul groupe :roll: ).
En tous cas, je vous remercie tous pour votre aide. :agenouille: :agenouille:

Voici la partie de script qui fonctionne correctement.

<td>

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

//Affichage du nom des produits//
$requete3=" SELECT *
		FROM produits";//Pas d'inquiétude pour les puristes, je vais remplir tous les champs.
$result3=mysql_query($requete3);
while ($val3=mysql_fetch_array($result3))
	{
	if ($val3["RefSociete"] == $IdSociete)
	{
		print ('');
?>

<td style="text-align: justify;">
		<span style="font-size: 10pt; font-family: Arial,sans-serif;">
			<a href="aff_rechproduits.php?IdProduit=<?php print ($val3["IdProduit"]);?>"><?php echo $val3["NomProduit"];?></a>
<?php
}
}
mysql_close($lien);
?>
			</select>
		</span>
	</td>

par Cyrano » 07 oct. 2005, 11:56

Je ne comprends pas comment tu identifies une société en particulier dans ce code. Si à partir d'une liste de société tu dois accéder à ce script en sélectionant une société, tu dois récupérer l'identifiant de cette société, de la même manière qu'ici, tu récupères l'identifiant du produit dans la fiche produit grâce au paramètres que tu ajoutes dans la boucle while. Si tu sélectionnes la société de la même manière, l'url vers la page "société devait donc avoir un paramètre que je nommerai ici "idsoc" : ce bout de code pour la page société devrait donc ressembler à ceci:
<?php
// On récupère l'identifiant de la société :
$idSociete = $_GET['idsoc'];
//connection à la base et sélection de la table et des champs//
$lien = mysql_connect("xx","xx","xx");
mysql_select_db("xx", $lien);

//Requête de sélection des produits qui correspondent au paramètre "société d'appartenance"//
$requete3="SELECT IdProduit, NomProduit
            FROM produits p
            WHERE RefSociete = ". $idSociete ."
            ORDER BY NomProduit";
$result3=mysql_query($requete3);

//Tant qu'il y a des produits, on les affiche//

if (mysql_num_rows($result3))
{
    while ($val=mysql_fetch_array($result3))
    {
?>
<tr>
    <td>
        <a href="aff_produits.php?IdProduit=<?php print ($val["IdProduit"]);?>"><?php print ($val["NomProduit"]);?></a>
    </td>
</tr>
<?php
    }
}
mysql_close($lien);
?>

par Elisa » 07 oct. 2005, 11:32

1. Ce que je voudrais voir afficher:

J'ai une société qui comprend plusieurs produits. Je voudrais que tous les produits d'une société s'affichent et que je puisse accéder à chacune des fiches "produits" à partir de la fiche "société".

L'affichage se fait comme suit:

Script A: Sélection de la société par l'intermédiaire d'une liste déroulante à choix unique.

Script B: Affichage de la fiche de la société dans laquelle sont stipulés les produits qu'elle fabrique. Ces produits sont chacun cliquables individuellement et renvoient à leur fiche respective.

2. Les problèmes que je rencontre.

A chaque fois que j'enregistre plusieurs produits pour une même société, je n'ai pas de problème dans ma base: tout s'enregistre correctement.
En revanche, dans la liste déroulante de mon script A une nouvelle ligne apparaît. Par exemple, une société "BARBAPAPA" fabrique un produit "BONBON". Si je veux enregistrer un produit "SUCETTE", une nouvelle ligne apparaît dans ma liste déroulante et ainsi j'ai deux lignes "BARBAPAPA".

Second problème: les deux lignes du script A renvoient à deux fiches exactement identiques et c'est le dernier produit enregistré qui apparaît. Par exemple, j'ai deux fiches sociétés "BARBAPAPA" dans laquelle seul apparaît le produit "SUCETTE".

3. Les modifications de mon script:

Après différentes tentatives infructueuses, la partie relative à l'affichage des produits de mon script B ressemble à ça: mais c'est encore pire que tout le reste. Plus rien ne s'affiche.
<td>
<?php

//connection à la base et sélection de la table et des champs//
	$lien = mysql_connect("xx","xx","xx");
	mysql_select_db("xx", $lien);

//Requête de sélection des produits qui correspondent au paramètre "société d'appartenance"//
	$requete3="SELECT IdProduit, NomProduit
	        FROM produits p
	        INNER JOIN societes s ON s.IdSociete=p.RefSociete
        	ORDER BY NomProduit";
	$result3=mysql_query($requete3);

//Tant qu'il y a des produits, on les affiche//

if (mysql_num_rows($result3))
{
	while ($val=mysql_fetch_array($result3))

?>


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

<?php

}
mysql_close($lien);
?>

par mere-teresa » 07 oct. 2005, 10:54

Je ne suis pas certaine d'avoir le temps de t'aider, mais : fais nous un point clair de la situation.
Où en es-tu ?
Quel est ton souci ? Qu'as-tu déjà essayé ?
Quel est ton code actuel ? Quelle sortie as-tu quand tu affiches tes variables ?

par Elisa » 07 oct. 2005, 10:27

Bonjour à tous,
Je me permets de relancer le topic car je n'arrive toujours pas à résoudre mon problème. Quelqu'un aurait-il une idée?
Merci pour votre aide.

par Elisa » 06 oct. 2005, 11:59

Je ne sais pas parce que j'ai déjà utilisé ce type de jonctions dans d'autres scripts et elles fonctionnent parfaitement. Je ne comprends plus rien. :(

par mere-teresa » 06 oct. 2005, 11:53

C'est quoi l'erreur ?
Le fait que tu utilises 2 fois l'alias 'p' ?

par mere-teresa » 06 oct. 2005, 11:53

Code : Tout sélectionner

SELECT IdProduit, NomProduit, RefSociete, DisciplinesBases, TypeBases, TypeAcces, p.Presentation, TypeRecherche, Site, p.MAJ FROM produits AS p, societes AS s LEFT OUTER JOIN p ON s.IdSociete=p.RefSociete WHERE IdSociete='11' ORDER BY NomSociete

par Elisa » 06 oct. 2005, 11:39

Ca ne change rien: l'erreur reste la même sous MyAdmin.