Aide sur boucle While

Signaler
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
-
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
-
Bonjour,

J'aimerais afficher dans un tableau des données de deux tables pour cela j'ai utilisé des jointures en sql. Mais je sais pas comment on place les deux tables dans une boucle While afin d'afficher l'ensemble des enregistrements contenu dans cette table, pour plus de détai lje vous donne mon code source ci-dessous :

<?php require_once('Connections/ecommerce.php'); ?>
<title>Articles</title>
<style type="text/css">
<!--
.Style1 {font-family: Arial, Helvetica, sans-serif}
body,td,th {
color: #FFFFFF;
font-family: Arial, Helvetica, sans-serif;
}
body {
background-color: #333333;
background-image: url(images/fondsite.gif);
}
a:link {
color: #FFFFFF;
text-decoration: none;
}
a:visited {
color: #FFFFFF;
text-decoration: none;
}
a:hover {
color: #FF0000;
text-decoration: none;
}
a:active {
text-decoration: none;
}
.Style4 {font-size: small}
.Style5 {
color: #FF0000;
font-size: small;
}
-->
</style>
Retour,
Attention !!! Atconcept se r&eacute;serve le droit de modifier ses prix sans pr&eacute;avis.

N&deg;,
Fabricant,
Nom d'article ,
Prix HTVA en &euro; ,
Prix TVAC en &euro; ,

----

<?php
mysql_select_db($database_ecommerce, $ecommerce);
$colname_articles = \"1\";
if (isset($_GET['id'])) {
$colname_articles = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);
}
$query_articles sprintf(\"SELECT * FROM shop_articles WHERE id %s ORDER BY id ASC\", $colname_articles);
$articles = mysql_query($query_articles, $ecommerce) or die(mysql_error());
$row_articles = mysql_fetch_assoc($articles);
$totalRows_articles = mysql_num_rows($articles);

$idURL_fabricant = \"1\";
if (isset($_GET['id'])) {
$idURL_fabricant = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);
}

$query_fabricant = sprintf(\"SELECT shop_articles.id, shop_fabricant.id, shop_fabricant.nom, shop_fabricant.url FROM shop_articles inner join shop_fabricant on shop_fabricant.id= shop_articles.fabricant WHERE shop_articles.id= %s\", $idURL_fabricant);
$fabricant = mysql_query($query_fabricant, $ecommerce) or die(mysql_error());
$row_fabricant = mysql_fetch_assoc($fabricant);
$totalRows_fabricant = mysql_num_rows($fabricant);

Cette partie me permet de tester ma boucle avec une seule table et elle fonctionne

$sql='SELECT shop_articles.id, shop_articles.nom_article, shop_articles.prix_ht, shop_articles.prix_ttc, shop_articles.fabricant
FROM shop_articles';
$req=mysql_query($sql) or die('Erreur SQL!
'.$sql.'
'.mysql_error());
while ($row_articles=mysql_fetch_array($req))
{
?>
----

<?php echo $row_articles[id]; ?>,
<?php echo $row_articles[fabricant]; ?>,
<?php echo $row_articles[nom_article]; ?>,
<?php echo $row_articles[prix_ht]; ?>,
<?php echo $row_articles[prix_ttc]; ?>,

<?php '
'.$row_articles[id].' '.$row_articles[fabricant].' '.$row_articles[nom_article].' '.$row_articles[prix_ht].' '.$row_articles[prix_ttc].'';
}
mysql_close();
?>


Si quelqu'un pouvait m'aider se serait super sympa parce que là je galère à donf ,
merci d'avance à tous

@+ et bonne prog

Stu76

6 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
Salut,
$query_articles sprintf("SELECT * FROM shop_articles WHERE id %s ORDER BY id ASC", $colname_articles);



mais pourquoi utiliser sprintf plutot que :

$query_articles 'SELECT * FROM shop_articles WHERE id '.$colname_articles.' ORDER BY id ASC';





Bon, selon moi, la jointure est à faire dans la requette et pas
en php, les gains de performances seront meilleurs...Renseigne toi sur
LEFT JOIN et RIGHT JOIN, et même les FROM à deux tables (jointures
externes, et jointures internes)



là, je n'ai pas bien compris ce que tu voulais faire désolé...



In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
4
"$query_fabricant = sprintf("SELECT
shop_articles.id, shop_fabricant.id, shop_fabricant.nom,
shop_fabricant.url FROM shop_articles inner join shop_fabricant on
shop_fabricant.id= shop_articles.fabricant WHERE shop_articles.id= %s",
$idURL_fabricant);"



$query = "SELECT shop_articles.id as article_id, shop_fabricant.id as
fabricant_id, shop_fabricant.nom, shop_fabricant.url FROM
shop_articles, shop_fabricant WHERE shop_fabricant.id shop_articles.fabricant AND shop_articles $idURL_fabricant";

$q = mysql_query($query);

while ( $data = mysql_fetch_array($q) ) {

echo $data['article_id'];

echo $data['fabricant_id'];

echo $data['nom'];

echo $data['url'];

}



C'est tout simple. Attention cependant, quand tu récupères 2 champs avec le même nom, il faut rennomer tes champs avec AS !



Voila.
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1
Salut coucou747,

Ma jointure ce fait pas en PHP mais bien en SQL, dont voici le code :

SELECT shop_articles.id, shop_fabricant.id, shop_fabricant.nom, shop_fabricant.url FROM shop_articles inner join shop_fabricant on shop_fabricant.id= shop_articles.fabricant WHERE shop_articles.id= %s", $idURL_fabricant);

Mon bute est de pouvoir afficher des données de la table articles, les champs id, nom_article, prix_ht, prix_ttc et le champ nom de la table fabricant.

Quand l'internaute clique sur le nom fabricant il arrive directement sur la bonne page c'est pour celà que j'ai join les deux tables.

Alors ma jointure fonctionne car à l'écran tout s'affiche correctement, sauf que j'ai que le premier enregistrement qui s'affiche. C'est pour cela que je veux uitlisé une boucle while pour faire en sorte que tout mes enregistrements s'affiche.

Voilà si sa peu t'aider avoir plus clair, sur mon problème.

merci

@+

Stu76
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1
Salut FhX,

J'ai modifié ma requête sql comme dans ton message, j'ai un petit bug, mais je continue à chercher, mais la difficulté consiste à prendre des données de deux tables.

Pourrais-tu me donner ton avis en lisant le message du dessus.Car dans ta solution j'affiche que les données de fabricant. Or je doit pouvoir lire les articles et d'un lien sur la colonne fabricant afficher sur une page les données du fabricant.

Voilà j'espère que tu y vois plus clair.

En tout cas merci pour votre aide les gas c'est sympa, je vois déjà plus clair.
Si tu savais me donnée ton avis se serait très sympa.

@+

stu76
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1
Salut en travaillant sur la solution de FhX, j'ai cette erreur qui s'affiche et je ne vois pas pourquoi j'ai relooké à plusieurs reprise mon code et nada, je comprend pas

Unknown column 'shop_articles' in 'where clause'
N°,
Fabricant,
Nom d'article ,
Prix HTVA en ? ,
Prix TVAC en ?

je remet le code source modifier ci dessous si quelqu'un pouvait me guider !!!!

Merci d'avance,

stu76
Messages postés
186
Date d'inscription
samedi 5 mars 2005
Statut
Membre
Dernière intervention
17 février 2008
1
J'avais oublié de mettre le source :

<?php require_once('Connections/ecommerce.php'); ?>
<title>Articles</title>
<style type="text/css">
<!--
.Style1 {font-family: Arial, Helvetica, sans-serif}
body,td,th {
color: #FFFFFF;
font-family: Arial, Helvetica, sans-serif;
}
body {
background-color: #333333;
background-image: url(images/fondsite.gif);
}
a:link {
color: #FFFFFF;
text-decoration: none;
}
a:visited {
color: #FFFFFF;
text-decoration: none;
}
a:hover {
color: #FF0000;
text-decoration: none;
}
a:active {
text-decoration: none;
}
.Style4 {font-size: small}
.Style5 {
color: #FF0000;
font-size: small;
}
-->
</style>
Retour,
Attention !!! Atconcept se r&eacute;serve le droit de modifier ses prix sans pr&eacute;avis.

N&deg;,
Fabricant,
Nom d'article ,
Prix HTVA en &euro; ,
Prix TVAC en &euro; ,

----

<?php
mysql_select_db($database_ecommerce, $ecommerce);
$colname_articles = \"1\";
if (isset($_GET['id'])) {
$colname_articles = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);
}
$query_articles sprintf(\"SELECT * FROM shop_articles WHERE id %s ORDER BY id ASC\", $colname_articles);
$articles = mysql_query($query_articles, $ecommerce) or die(mysql_error());
$row_articles = mysql_fetch_assoc($articles);
$totalRows_articles = mysql_num_rows($articles);

$idURL_fabricant = \"1\";
if (isset($_GET['id'])) {
$idURL_fabricant = (get_magic_quotes_gpc()) ? $_GET['id'] : addslashes($_GET['id']);
}

$query='SELECT shop_articles.id as article_id, shop_fabricant.id as fabricant_id, shop_fabricant.nom, shop_fabricant.url FROM shop_articles, shop_fabricant WHERE shop_fabricant.id=shop_articles.fabricant and shop_articles=$idURL_fabricant';
$q = mysql_query($query) or die(mysql_error());
$data = mysql_fetch_assoc($q);
$totaldata = mysql_num_rows($q);

//$sql='SELECT shop_articles.id, shop_articles.nom_article, shop_articles.prix_ht, shop_articles.prix_ttc, shop_articles.fabricant
//FROM shop_articles';
//$req=mysql_query($sql) or die('Erreur SQL!
'.$sql.'
'.mysql_error());
while ($data=mysql_fetch_array($q))
{
?>
----

<?php echo $data[id]; ?>,
<?php echo $data[fabricant_id]; ?>,
<?php echo $data[nom_article]; ?>,
<?php echo $data[prix_ht]; ?>,
<?php echo $data[prix_ttc]; ?>,

<?php '
'.$data[id].' '.$data[fabricant_id].' '.$data[nom_article].' '.$data[prix_ht].' '.$data[prix_ttc].'';
}
mysql_close();
?>



re merci,

Stu76