afficher éléments de deux tables

Eléphanteau du PHP | 47 Messages

09 oct. 2009, 18:11

Bonjour,

J'ai deux tables. Une "manifestations", et une "upload".
La table upload comprend un champs nommé id_liaison qui est égal à l'id de l'enregistrement correspondant de la table manifestation. Mais tous les enregistrements de la table manifestation non pas obligatoirement un fichier dans la table upload.

Si j'écris ceci :
$requete = 'SELECT * FROM manifestations, upload ORDER BY date ASC';
$result = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result))

tous les enregistrements de la table manifestation s'affichent autant de fois (et avec) qu'il y a d'enregistrements dans la table upload.

Si je rajoute une condition if ($id = $id_liaison) avant l'echo des éléments de la table upload, les éléments de la table manifestation s'affichent autant de fois qu'il y a d'éléments dans la table upload, sans les éléments de cette dernière. !!!????

Merci pour le coup de main !

Mammouth du PHP | 985 Messages

09 oct. 2009, 18:17

C'est une faute de frappe, je suppose?
if ($id = $id_liaison)
Sinon au cas ou:
if ($id === $id_liaison)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 47 Messages

10 oct. 2009, 10:14

Bonjour,

Effectivement, faute de frappe .... :)
Voilà ce que j'ai écrit :
$requete = 'SELECT * FROM manifestations, upload ORDER BY date ASC';     //--- le ORDER uniquement valable pour la table manifestation---
$result = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() ); 
while($row = mysql_fetch_array($result)) 
{
        echo .nl2br($row['texte']).;  //---données venant de la table manifestation---
if ($id == $id_liaison) //---id venant de la table manifestation, id_liaison venant de la table upload--- 
	if (in_array($row['extension'], array( ".jpg", ".JPG", ".png", ".PNG", ".jpeg", ".JPEG", ".gif", ".GIF")))
		{
		    echo '<a href ="http://xxxxxxxxxxx ' . $row['lien_fichier'] . '"><img src="http://xxxxxxxxxxxxxxxx ' . $row['lien_fichier'] . '"></a>'; //données venant de la table upload
		}
	else if (in_array($row['extension'], array( ".doc", ".DOC", ".pdf", ".PDF", ".txt", ".TXT")))
		{
			echo '<a href ="http://xxxxxxxxxxxx ' . $row['lien_fichier'] . '">Télécharger<br><img src="../../../commande.gif"></a>'; 
 		}   
}
mysql_free_result($result);
exit;
?>
Je suis conscient que mon $requete est plutôt général, mais je ne sais pas comment l'écrire ???? :(

Merci pour le coup de main .... :roll:

ViPHP
ViPHP | 2291 Messages

10 oct. 2009, 16:52

Ceci:
if ($id == $id_liaison)
Cela ne devrait t'il pas être :?:
$id = (isSet($row['id']) ? $row['id'] : null);
$id_liaison = (isSet($row['id_liaison']) ? $row['id_liaison'] : null);
if ($id == $id_liaison)
Ton script comme ceci cela donne quoi ?
<?php
$requete = "SELECT ma.id, ma.texte, up.id_liaison
                 FROM manifestations ma, upload up
                 ORDER BY ma.date ASC";
     //--- le ORDER uniquement valable pour la table manifestation---
$result = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result))
	{
		echo nl2br($row['texte']);  //---données venant de la table manifestation---
		$id = (isSet($row['id']) ? $row['id'] : null);
        $id_liaison = (isSet($row['id_liaison']) ? $row['id_liaison'] : null);

		if ($id == $id_liaison) //---id venant de la table manifestation, id_liaison venant de la table upload---
		   {
		        if (in_array($row['extension'], array( ".jpg", ".JPG", ".png", ".PNG", ".jpeg", ".JPEG", ".gif", ".GIF")))
		                {
		                    echo '<a href ="http://xxxxxxxxxxx ' . $row['lien_fichier'] . '"><img src="http://xxxxxxxxxxxxxxxx ' . $row['lien_fichier'] . '"></a>'; //données venant de la table upload
		                }
		        elseif(in_array($row['extension'], array( ".doc", ".DOC", ".pdf", ".PDF", ".txt", ".TXT")))
		                {
		                        echo '<a href ="http://xxxxxxxxxxxx ' . $row['lien_fichier'] . '">Télécharger<br><img src="../../../commande.gif"></a>';
		                }
	       }


	}


?>
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 10 Messages

10 oct. 2009, 22:00

Bonsoir,

Je pense que tu trouveras une solution en regardant du coté des LEFT JOIN http://dev.mysql.com/doc/refman/5.0/fr/ ... ation.html. Ca me parait la solution la plus simple sauf si tes 2 tables sont trop volumineuses.


++

Eléphanteau du PHP | 47 Messages

14 oct. 2009, 18:59

Merciiiii ...... :D J'ai trouvé ! OU presque !!!!! Il me reste un 'tit problème d'affichage .....
Suite à l'affichage du texte, le premier élément de la table upload affilié au texte de la table manifestation s'affiche en dessous, le tableau se ferme, et les autres éléments de upload affiliés au texte s'affichent également mais en dehors du tableau.

Je n'arrive pas à rentrer "les autres éléments" dans le tableau, et à les afficher l'un à côté de l'autre. :(

Voici mon code :
$requete="SELECT manifestations.id, manifestations.jour , manifestations.heure ,manifestations.datefr ,manifestations.titre ,manifestations.texte , upload.id_liaison, upload.lien_fichier, upload.fichier, upload.extension 
FROM manifestations LEFT JOIN upload ON manifestations.id=upload.id_liaison 
ORDER BY manifestations.date ASC"; 
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() ); 

$idEncours = 0; 
while($row = mysql_fetch_array($result)) 
{ 
if( $idEnCours != $row['id'] ) 
{ 
echo '<table width="800px" border="1">'; 
echo '<tr>'; 
echo '<td align="center">'.nl2br($row['texte']).'<p>'; 
} 
if ($idEnCours = $row['id_liaison']); 

if (in_array($row['extension'], array( ".jpg", ".JPG", ".png", ".PNG", ".jpeg", ".JPEG", ".gif", ".GIF"))) 
{ 
echo '<center><a href ="http://xxxxxxx ' . $row['lien_fichier'] . '"><img src="http://xxxxxxx ' . $row['lien_fichier'] . '"></a></center>'; 
} 
elseif (in_array($row['extension'], array( ".doc", ".DOC", ".pdf", ".PDF"))) 
{ 
echo '<center><a href ="http://xxxxx ' . $row['lien_fichier'] . '">Télécharger ou afficher le document<br><img src="../../../images/commande.gif"></a></center>'; 
} 
echo '</td></tr></table><p>'; 
} 
Merci

Kran
Invité n'ayant pas de compte PHPfrance

14 oct. 2009, 22:10

Petit rappel :
Il existe deux types de balises en HTML :
  • Les balises classiques que l'on doit ouvrir PUIS femer. ex: <p> </p> <div> </div> <span> </span>
  • Les balises autofermantes. ex : <br /> <img src="..." />
  • Et... pas d'autre !
Comme te l'a déja signalé Dr@ke, l'opérateur permettant de tester une égalité en php s'écrit == (ou === dans le cas d'une égalité stricte sans transtypage de variables ou approximations du style 0=false ) et non =...

En révisant bien ces deux notions, tu devrais t'en sortir ^^

Eléphanteau du PHP | 47 Messages

15 oct. 2009, 16:17

Petit rappel :
Il existe deux types de balises en HTML :
  • Les balises classiques que l'on doit ouvrir PUIS femer. ex: <p> </p> <div> </div> <span> </span>
  • Les balises autofermantes. ex : <br /> <img src="..." />
  • Et... pas d'autre !
Comme te l'a déja signalé Dr@ke, l'opérateur permettant de tester une égalité en php s'écrit == (ou === dans le cas d'une égalité stricte sans transtypage de variables ou approximations du style 0=false ) et non =...

En révisant bien ces deux notions, tu devrais t'en sortir ^^
J'ai appliqué ce que tu me dis. La différence ce fait au niveau des "=".
- S'il n'y en a qu'un, le texte (enregistrement) de la table manifestation s'affiche avec un élément (image) de la table upload. Le tout dans le même cadre.
Ensuite, les autres éléments de upload associés sont affichés les uns en dessous des autres, et en dehors du tableau ....
- S'il y a 2 ou 3 "=", le texte (enregistrement) de la table manifestation s'affiche autant de fois qu'il y a et avec un élément (image) de la table upload. Donc si il y a trois éléments dans la table upload associé au texte "manifestation", ce texte s'affichera trois fois avec à chaque fois, un des éléments de upload associé !!!!

Dur, dur !!!!!!!!!