Deux colonnes pour des news

Deux colonnes pour des news - SQL/NoSQL - Programmation

Marsh Posté le 15-10-2005 à 11:52:54    

Bonjour à tous !
Je suis débutant en php mais surtout avec MySQL.
J'ai trouvé un script sympa de news qui marche plutot bien mais que je n'arrive pas à personaliser. Je m'explique.
 
Dans mon admin, j'ajoute un texte. Il s'affiche dans une colonne.
 
Ex :
Texte 3
Texte 2
Texte 1
 
J'aimerai que ça fasse ça (donc deux colonnes de tableau)
Texte 6      Texte 3
Texte 5      Texte 2
Texte 4      Texte 1
 
Donc voici mon script :
<?php
$db = mysql_connect("$NEWS_host", "$NEWS_login", "$NEWS_pass" );
mysql_select_db("$NEWS_base",$db);
 
if ($p == "5" )
    $query = "SELECT * FROM NEWSnews ORDER BY id DESC LIMIT 0,2";
   
if ($p == "4" )
    $query = "SELECT * FROM NEWSnews ORDER BY id DESC LIMIT 2,4";
 
else
    $query = "SELECT * FROM NEWSnews ORDER BY id DESC LIMIT 0,2";
 
$result = mysql_query($query);
 
while ($row = mysql_fetch_array($result)) {
 
    $contenu = nl2br($row[contenu]);
 
    echo "<table>\n";
    echo "<tr>\n";
    echo "<td>$row[titre]</td>\n";
    echo "<td>$contenu</td>\n";
    echo "</tr>\n";
    echo "</table>\n";
   
}
mysql_close($db);
?>
 
 
J'ai esseyé ça :
 
echo "<table>\n";
    echo "<tr>\n";
    echo "<td>$row[titre]</td>\n";
    echo "<td>$contenu</td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td>$row[titre]</td>\n";
    echo "<td>$contenu</td>\n";
    echo "</tr>\n";
    echo "</table>\n";
 
 
Le probleme c'est qu'il affiche deux fois le contenu... bref, j'ai vraiment du mal. Auriez vous une petite idée ?  
Je vous remercie d'avance.

Reply

Marsh Posté le 15-10-2005 à 11:52:54   

Reply

Marsh Posté le 15-10-2005 à 13:00:25    

de tête ce que je ferais :
 

Code :
  1. $q1 = "SELECT * FROM NEWSnews ORDER BY id DESC LIMIT 0,2";
  2. $q2 = "SELECT * FROM NEWSnews ORDER BY id DESC LIMIT 2,2";
  3. $res1 = mysql_query($q1);
  4. $res2 = mysql_query($q2);
  5. if($res1 && $res2){
  6. //ok les deux req se sont bien executées
  7. if($nb1 = mysql_num_rows($res1) &&  $nb2 = mysql_num_rows($res2)){
  8.  //entete du tableau
  9.  print("<table class='news'>" );
  10.  for($i = 0; $i < max($nb1,$nb2); $i++){
  11.   print("<tr>" );
  12.   if($i < $nb1){
  13.    $uneNews = mysql_fetch_assoc($res1);
  14.    print("<td>".$uneNews['nom_d_un_champ_de_la_bdd_a_afficher']."</td>" );
  15.   }else{
  16.    print("<td>&nbsp;</td>" );
  17.   }
  18.   if($i < $nb2){
  19.    $uneNews = mysql_fetch_assoc($res2);
  20.    print("<td>".$uneNews['nom_d_un_champ_de_la_bdd_a_afficher']."</td>" );
  21.   }else{
  22.    print("<td>&nbsp;</td>" );
  23.   }
  24.   print("</tr>" );
  25.  }
  26.  print("</table>" );
  27. }
  28. }else{
  29.   //la requete sql est fausse
  30. }


 
a verifier si ca fonctionne, mais ca peut te donner une piste


Message édité par fluminis le 15-10-2005 à 13:02:44

---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 15-10-2005 à 14:31:01    

Merci beaucoup je regarde.

Reply

Marsh Posté le 15-10-2005 à 14:47:20    

J'ai fait ça :
 

Code :
  1. <table width="380" border="0" cellspacing="0" cellpadding="0">
  2.   <tr>
  3.     <td width="172" bgcolor="#990000">
  4. <?php
  5. $db = mysql_connect("$dv_host", "$dv_login", "$dv_pass" );
  6. mysql_select_db("$dv_base",$db);
  7. $query = "SELECT * FROM DVnews ORDER BY id DESC LIMIT 0,6";
  8. $result = mysql_query($query);
  9. while ($row = mysql_fetch_array($result)) {
  10. $contenu = nl2br($row[contenu]);
  11. echo "$row[titre]$contenu<br>";
  12. }
  13. ?>
  14. </td>
  15. <td width="208">
  16. <?php
  17. $query = "SELECT * FROM DVnews ORDER BY id DESC LIMIT 6,6";
  18. $result = mysql_query($query);
  19. while ($row = mysql_fetch_array($result)) {
  20. $contenu = nl2br($row[contenu]);
  21. echo "$row[titre]$contenu\n";
  22. }
  23. mysql_close($db);
  24. ?>
  25. </td>
  26.   </tr>
  27. </table>


 
 
Je ne sais pas si c'est correct mais ça marche. Qu'en penses tu ?

Reply

Marsh Posté le 15-10-2005 à 14:50:58    

en programmation il n'y a pas qu'une solution unique alors si ça marche alors c'est le principal :)


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 15-10-2005 à 14:51:38    

s'quoi le rapport avec "SGBD/SQL" ?
 
Là on faît bêtement de la présentation HTML/CSS et de l'algo.

Reply

Marsh Posté le 15-10-2005 à 14:51:51    

J'ai dit que j'étais débutant... je comprends pas tout Beegee :(

Reply

Marsh Posté le 15-10-2005 à 14:56:57    

rimb0 a écrit :

J'ai dit que j'étais débutant... je comprends pas tout Beegee :(


 
surtout que j'ai viré mon post ... :lol:
 
Enfin en gros tu pourrais le faire en SQL directement, mais vu que mySql est assez limité, pas sûr que ça marche.
Le plus simple est de le faire dans le code php, tu stoques le résultat d'une seule et unique requête dans un vecteur, que tu parcoures ensuite intelligemment pour afficher les news dans l'ordre que tu veux.

Reply

Marsh Posté le 15-10-2005 à 20:40:49    

De tout façon, à mon avis c'est mieu de gérer ça via le PHP que via la requête, parceque l'affichage c'est quelquechose de trop dynamique pour être dépendant du flux de données.

Reply

Marsh Posté le 15-10-2005 à 20:44:30    

en l'occurence ca a l'air plutot statique comme affichage et je pense que plusieurs requets pourraient etre economisees (=>rajouter dans le select le numero de colone calcule(modulo?) ou le texte doit apparaitre ?)

Reply

Marsh Posté le 15-10-2005 à 20:44:30   

Reply

Marsh Posté le 15-10-2005 à 21:46:21    

C'est ce que j'avais mis dans le post que j'ai supprimé (le modulo), mais franchement, si c'est juste pour afficher les 6 news les plus récentes selon une certaine mise en page, vaut mieux stoquer dans un vecteur et faire ça en php.

Reply

Marsh Posté le 16-10-2005 à 11:03:08    

Le coup du modulo ne marchera pas, il veut que les news s'affichent en colonne comme dans un journal de petites annonces : on part du haut et on va jusqu'en bas avant de passer à la colonne suivante.
 
En réalité, au lieu de faire un modulo, votre solution se fait sans rien du tout et avec un bête : <p style="float: right">. C'est encore plus simple.
 
Pour ce qu'il veut faire, un algo tout simple :
 
x = mon nombre de colonnes
y = mon nombre de news par colonne
 
select * from news limit 1, x*y
 
for i = 1 to x
   j = 0
   Affichage de <p width="100/x%" float:left>
   while j < y
      j = j + 1
      Affichage de <p>la news</p>
   loop
   Affichage de </p>
next
 
Et c'est fini. Une seule requête. Le truc 100% paramètrable, et on passe aisément en mode mono-colonne, ou une colonne sur deux.
Affichage indépendant du flux de données quoi. Le B-A-BA du développement web.


Message édité par Arjuna le 16-10-2005 à 11:05:00
Reply

Marsh Posté le 16-10-2005 à 20:23:42    

oui tu as raison
le modulo n'est pas adapte a ce cas

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed