Créer tableau imbriqué newsletter [Résolu]

Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
- - Dernière réponse : weetabix40
Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
- 20 nov. 2014 à 09:00
Bonjour,

Je cherche a créer une requête pour afficher un tableau imbriqué d'un listing produit qui sera envoyé en tant que newsletter.


Ma requête :

<?php

$result = MYSQL_QUERY("SELECT
produit.nom,
produit.prix,
produit.url_image
FROM produit");

echo "<table width='600px' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td>";

while($row = mysql_fetch_array($result)) {

echo "<table width='200px' border='0' cellspacing='0' cellpadding='0' align='left'>
<tr>";
echo "<td><img src='" . $row['url_image'] . "' width='200' height='auto' alt='" . $row['nom'] . "' border='0' ></td>
</tr>
<tr>";
echo "<td>" . $row['nom'] . "</td>
</tr>
<tr>";
echo"<td>" . $row['prix'] . "</td>
</tr>
</table>";}

echo "</td>
</tr>
</table>";

MYSQL_CLOSE();

?>


Le problème se pose quand il y a plus de 3 produits puisque le retour automatique à la ligne est très capricieux en fonction des navigateurs / logiciels mails.

Donc ma question du soir, comment répéter ce tableau si la requête retourne plus de 3 produits pour avoir comme résultat un tableau pour trois produits qui se répète plusieurs fois ?

Merci pour vos réponses,
Cordialement,
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
27277
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
321
1
Merci
Regarde ce que fait ce code :
echo "<table width='600px' border='0' cellspacing='0' cellpadding='0'>
  <tr>
  <td>";
$l = 0;  
$row['url_image']='zzz';
$row['nom'] ='toto';
$row['prix']="45 euros";

for($x=0;$x<12;$x++){
if($l%3==0 && $l>=3){
 echo " </td>
       </tr>
	   <tr>
	    <td>";
}
echo "<table width='200px' border='1' cellspacing='0' cellpadding='0' align='left'>
          <tr>";
            echo "<td><img src='" . $row['url_image'].'_l_'.$l.'-'.'x_'.$x . "' width='200' height='auto' alt='" . $row['nom'].'_l_'.$l.'-'.'x_'.$x . "' border='0' ></td>
          </tr>
          <tr>";
            echo "<td>" . $row['nom'].'_l_'.$l.'-'.'x_'.$x . "</td>
          </tr>
          <tr>";
            echo"<td>" . $row['prix'].'_l_'.$l.'-'.'x_'.$x . "</td>
          </tr>
        </table>";
$l++;
}
        
    echo "</td>
  </tr>
</table>";
 


Ensuite... remplaces le :
for($x=0;$x<12;$x++){
par ton While.
et retires les variables que j'ai initialisé pour les tests :
$row['url_image']='zzz';
$row['nom'] ='toto';
$row['prix']="45 euros";


Et normalement... tu auras bien ce que tu veux ....
3 Tableaux par lignes ... le tout. dans un tableau global.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 137 internautes nous ont dit merci ce mois-ci

weetabix40
Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
-
Très sincèrement, merci pour cette réponse qui correspond exactement et clairement à ma demande.

En fait, je crois que j'étais borné a vouloir répéter le tableau de 600px alors qu'il suffisait simplement de rajouter des lignes.

Dans tous les cas, encore merci ;)
Commenter la réponse de jordane45
Messages postés
14617
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2020
138
0
Merci
Bonsoir,

Pourquoi ne pas utiliser un compteur et si % (modulo) 3 = 0 alors créer une nouvelle ligne ?
weetabix40
Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
-
Bonsoir et merci pour cette réponse,

J'avais bien pensé a une solution de ce style mais honnêtement je ne sais vraiment pas comment la mettre en oeuvre. Les bases de données ce n'est pas vraiment ma tasse de thé ^^
NHenry
Messages postés
14617
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
14 janvier 2020
138 -
Tu incrémentes dans ta boucle "while" et ensuite tu fais un "if" pour vérifier si tu dois faire une nouvelle ligne.
jordane45
Messages postés
27277
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
321 -
un truc du genre :
$l = 0;  
while($row = mysql_fetch_array($result)) {
$l++;
if($l%3==0 && $l>=3){
 echo " </td>
       </tr>
	   <tr>
	    <td>";
}
weetabix40
Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
-
Bon, j'ai du louper quelque chose car je n'ai que 3 résultats d'affichés pour cette requête...
jordane45
Messages postés
27277
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
321 -
Tu as testé ta requête en direct dans ta bdd ?
Commenter la réponse de NHenry
Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
0
Merci
Bon, je verrai ça une autre fois car je joue a pile ou face en mettant des morceaux de codes au pif et au final ça ne donne rien...

J'utiliserai ma requête initiale et je modifierai ma newsletter avant de l'envoyer car ça me demande plus de temps de tâtonner que de modifier mon premier code généré.

Merci pour vos réponses et votre temps,
Bonne soirée,
Commenter la réponse de weetabix40
Messages postés
27277
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2020
321
0
Merci
Il ne faut pas coller du code au pif...il faut réfléchir a ce que tu veux et utiliser les codes qu'on te donne intelligemment.


weetabix40
Messages postés
9666
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
-
Oui, je suis bien conscient du but pédagogique de la réponse mais je dois clairement avoué que les 250 tutoriels que je viens de lire m'ont grillé le peux de cellules grises que j'ai... donc au final mes solutions du soir étaient :

- payer un prestataire pour 3 lignes de code qui me feront gagner 15min tous les jours,
- poster un message sur CCM pour espérer trouver des lignes guides (je vous remercie encore),
- batailler sur les réponses stackoverflow pour trouver quelque chose qui correspond a mes recherches.
- laisser tomber et essayer de finir les 3 tonnes de taches que j'ai en retard pour espérer partir quelques jours à noël.

Bonne soirée,
Cordialement.
Commenter la réponse de jordane45