Créer tableau imbriqué newsletter

Résolu
weetabix40 Messages postés 9583 Date d'inscription samedi 12 janvier 2008 Statut Contributeur Dernière intervention 28 novembre 2015 - 19 nov. 2014 à 19:29
weetabix40 Messages postés 9583 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 38207 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 juin 2024 344
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 9583 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 15132 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 juin 2024 159
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 9583 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 15132 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 19 juin 2024 159
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 38207 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 juin 2024 344
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 9583 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 38207 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 juin 2024 344
19 nov. 2014 à 21:21
Tu as testé ta requête en direct dans ta bdd ?
0
weetabix40 Messages postés 9583 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 38207 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 juin 2024 344
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 9583 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
Rejoignez-nous