Créer tableau imbriqué newsletter

Résolu
weetabix40
Messages postés
9577
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015
- 19 nov. 2014 à 19:29
weetabix40
Messages postés
9577
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,

4 réponses

jordane45
Messages postés
35402
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
20 nov. 2014 à 01:03
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.
1
weetabix40
Messages postés
9577
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015

Modifié par weetabix40 le 20/11/2014 à 09:01
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 ;)
0
NHenry
Messages postés
14925
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
162
19 nov. 2014 à 19:44
Bonsoir,

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

19 nov. 2014 à 19:46
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é ^^
0
NHenry
Messages postés
14925
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
162
19 nov. 2014 à 20:05
Tu incrémentes dans ta boucle "while" et ensuite tu fais un "if" pour vérifier si tu dois faire une nouvelle ligne.
0
jordane45
Messages postés
35402
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
19 nov. 2014 à 20:11
un truc du genre :
$l = 0;  
while($row = mysql_fetch_array($result)) {
$l++;
if($l%3==0 && $l>=3){
 echo " </td>
       </tr>
	   <tr>
	    <td>";
}
0
weetabix40
Messages postés
9577
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015

19 nov. 2014 à 21:17
Bon, j'ai du louper quelque chose car je n'ai que 3 résultats d'affichés pour cette requête...
0
jordane45
Messages postés
35402
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
19 nov. 2014 à 21:21
Tu as testé ta requête en direct dans ta bdd ?
0
weetabix40
Messages postés
9577
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015

19 nov. 2014 à 22:22
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,
0
jordane45
Messages postés
35402
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 mai 2022
356
19 nov. 2014 à 22:30
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.


0
weetabix40
Messages postés
9577
Date d'inscription
samedi 12 janvier 2008
Statut
Contributeur
Dernière intervention
28 novembre 2015

19 nov. 2014 à 23:00
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.
0