Tom's Guide > Forum > Programmation > Système page
Mot :    Pseudo :           
 

Bonjour,
J'ajoute des news au fur et à mesure sur mon site (pas encore en ligne), et je trouve que la lsite devient longue. Je vais utiliser un gestionnaire de news que je vais faire avec une DB en MySQL et un script PHP. Donc en gros je voudrais que dès qu'on ajoute une news ca décale celle d'en dessous en dessous, et la 5ème à la page 2 et ainsi de suite. En gros je voudrais que ca affiche du plus récent au plus vient de 1 à ... et que ca fasse un décalage des news et de page automatique. Mais je sais pas commetn faire ce système donc si vous pouvier m'aider, merci.

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Si la table contenant les news a pour nom news et pour clé primaire news_id, la premeire page devrait donner a peut pres ceci (pas testé):

Code :
  1. <?
  2. //identifiants
  3. $host = "";
  4. $login = "";
  5. $pass = "";
  6. $base = "";
  7. //initialisation de la variable $i à 0
  8. $i = 1;
  9. //connexion à la base de donnée
  10. $bd=mysql_connect($host , $login , $pass);
  11. $bd=mysql_select_db($base);
  12. //requete sql
  13. $query="SELECT * FROM news ORDER BY news_id DESC";
  14. $result=mysql_query($query);
  15. //boucle d'affichage du contenu
  16. while ($row = mysql_fetch_array($result)) {
  17.     //on teste $i
  18.     // $i correspond au nombre de news affichées
  19.     if (i != 6) {
  20.         $id = $row[news_id];
  21.         echo $id;
  22.         //ainsi de suite pour chaque champ ...
  23.         //on implemente i
  24.         $i++
  25.     }
  26. }
  27. ?>



en esperat que ca t'aide. J'ai essayé de commenter un maximum pour que ca soit comprehensible. Si ca te pôse probleme, hesites pas a demander ;)


Message édité par Le22 le 02-07-2007 à 06:05:58
------------------------------ Triple Champion du monde, à titre honorifique, de Kamoulox !
Répondre à Le22

Ok merci, ca je l'implante dans la page ou je veux mettre les news ? Et donc au bout de 5 news avec cela ca créer automatiquement les pages ?

Répondre à r2d22

Enfete la news est faites en plusieurs parties, le titre, une image, le contenu, la date. Tout ca incorporé dans divers endroit d'un tableau. Je donne le code de mon tableau avec les endroits ou je veux ajouter les contenu. PS : Sinon comment faire un système de UP d'image dans les gestionnaire des news et que doit on mettre comme type sur la DB pour une image ?

Code :
  1. <table width="600" border="0" cellspacing="0" cellpadding="0">
  2.               <tr>
  3.                   <th colspan="2" background="img_site/medias/titre.png" class="Texte" scope="col" >TITRE</th>
  4.               </tr>
  5.                 <tr>
  6.                   <th width="124" scope="row">IMAGE</th>
  7.                   <td width="522">CONTENU</td>
  8.                 </tr>
  9.                 <tr>
  10.                   <th colspan="2" bgcolor="#D26C6C" scope="row">DATE, autres.. </th>
  11.               </tr>
  12.               </table>
  13.             <br />
  14.             <br />
  15.           </div></th>
  16.         </tr>
  17.        
  18.        
  19.       </table>


Merci d'avance

Répondre à r2d22

Yo!

A mon avis il y a plus simple, en incluant un "LIMIT" dans ta requête SQL.

<?php

mysql_connect('localhost','login','pass'); //connexion au serveur
mysql_select_db('bdd'); //sélection de la base de données

extract($_GET); // extraction du $_GET['page'] en $page
$lim1 = ($page - 1)*5; //définition de la limite minimum
$lim2 = $page * 5; // définition de la limite maximum
$tbl = mysql_query("SELECT * FROM news LIMIT $lim1,$lim2" ); //requête SQL pour sélectionner seulement 5 news suivant la page

while ($row = mysql_fetch_array($tbl)) { //début de la boucle d'affichage
echo '<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<th colspan="2" background="img_site/medias/titre.png" class="Texte" scope="col" >TITRE</th>
</tr>
<tr>
<th width="124" scope="row">'.$row['image'].'</th>
<td width="522">'.$row['contenu'].'</td>
</tr>
<tr>
<th colspan="2" bgcolor="#D26C6C" scope="row">'.$row['date'].'</th>
</tr>
</table>
<br>
<br>
</div></th>
</tr>


</table>
';
} // fin de la boucle d'affichage

mysql_close(); // arrêt de la connexion SQL

?>



Voilà j'ai pas testé :D. Il te faut ensuite une table dans une bdd qui s'appelle "news" et qui contient les champs "date", "image" et "contenu"

Ensuite va juste sur news.php?page=1 pour avoir la première page, etc...

Répondre à demo_jouable

J'ai une erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/160/sdb/9/c/*****/contact.php on line 29

Ca le rapporte à cette ligne : while ($row = mysql_fetch_array($tbl)) {

Par contre moi j'ai une table qui s'appelle News, qui contient comme champ id, titre, contenu, date, image


Message édité par r2d22 le 02-12-2007 à 18:11:38
Répondre à r2d22

J'ai beau essayer d'optimiser le code avec ce que je sais, mais l'erreur es toujours au même endroit :

Code :
  1. <?php
  2. mysql_connect("sql.free.fr", "*****", "*****" ); // Connexion à MySQL
  3. mysql_select_db("*****" ); // Sélection de la base coursphp
  4. extract($_GET); // extraction du $_GET['page'] en $page
  5. $lim1 = ($page - 1)*5; //définition de la limite minimum
  6. $lim2 = $page * 5; // définition de la limite maximum
  7. $tbl = mysql_query("SELECT * FROM News LIMIT $lim1,$lim2" ); //requête SQL pour sélectionner seulement 5 news suivant la page
  8. while ($row = mysql_fetch_array($tbl) )
  9. { ?>
  10. <table width="600" border="0" cellspacing="0" cellpadding="0">
  11.               <tr>
  12.                   <th colspan="2" background="img_site/medias/titre.png" class="Texte" scope="col" ><?php echo $row['titre']; ?></th>
  13.               </tr>
  14.                 <tr>
  15.                   <th width="124" scope="row"><?php echo $row['image']; ?></th>
  16.                   <td width="522"><?php echo $row['contenu']; ?></td>
  17.                 </tr>
  18.                 <tr>
  19.                   <th colspan="2" bgcolor="#D26C6C" scope="row"><?php echo $row['date']; ?></th>
  20.               </tr>
  21.               </table>
  22.             <br>
  23.             <br>
  24.           </div></th>
  25.         </tr>
  26.      
  27.      
  28.       </table>
  29. <?php } // fin de la boucle d'affichage
  30. mysql_close(); // arrêt de la connexion SQL
  31. ?>

Répondre à r2d22

Petite parenthèse : je crois que "localhost" à la place de "sql.free.fr" est mieux, car sql.free.fr n'est pas l'adresse du serveur SQL de free.

Et je ne comprends pas... Chez moi ça marche très bien. J'ai créé une table appelée "news" avec les même champs que toi, ensuite je suis allé sur test.php?page=1 et test.php?page=2 et ça marchait nickel.
Je pense que tu as oublié de préciser dans l'adresse : page=x, ce que beaucoup d'internautes oublieront également. Pour empêcher l'erreur, il faut préciser un nombre par défaut si $page n'existe pas :

if (!$page) { $page = 1; }


Et voilà!

Je te donne le code complet que j'ai essayé d'optimiser au maximum. J'ai aussi rajouté la variable $nbnews. Elle définit le nombre de news à afficher par page :)

<?php

$nbnews = 5; //nombre de news à afficher par page

mysql_connect('localhost','*****','*****'); //connexion au serveur
mysql_select_db('*****'); //sélection de la base de données

extract($_GET); // extraction du $_GET['page'] en $page
if (!$page) { $page = 1; }
$lim1 = ($page - 1) * $nbnews; //définition de la limite minimum
$lim2 = $page * $nbnews; // définition de la limite maximum
$tbl = mysql_query("SELECT * FROM news LIMIT $lim1,$lim2" ); //requête SQL pour sélectionner seulement 5 news suivant la page

while ($row = mysql_fetch_array($tbl)) { //début de la boucle d'affichage
echo '<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<th colspan="2" background="img_site/medias/titre.png" class="Texte" scope="col" >'.$row['titre'].'</th>
</tr>
<tr>
<th width="124" scope="row">'.$row['image'].'</th>
<td width="522">'.$row['contenu'].'</td>
</tr>
<tr>
<th colspan="2" bgcolor="#D26C6C" scope="row">'.$row['date'].'</th>
</tr>
</table>
<br>
<br>
</div></th>
</tr>


</table>
';
} // fin de la boucle d'affichage

mysql_close(); // arrêt de la connexion SQL

?>


Message édité par demo_jouable le 18-07-2008 à 20:31:10
Répondre à demo_jouable

Toujours cette erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/160/sdb/9/c/*******/contact.php on line 17
Pourtant j'ai mis localhost, et j'ai mis ton dernier code. Et sql.free.fr marche, j'en suis sur je l'utilise pour une lecture dans la base de donné. Mais là je comprend pas pourquoi ca ne veut pas marcher snif

Merci beaucoup de ta patience pour m'aider


Message édité par r2d22 le 02-12-2007 à 18:12:41
Répondre à r2d22

Alors la je suis sur le cul parce que chez moi ça marche très bien... Et je l'ai testé sur un site sous free aussi...

Sans l'inclure à ta page, en le mettant sur une page à part en recopiant juste le code que je t'ai donné, tu peux vérifier si ça marche?

Vérifie aussi que la variable $page est préservée et que toutes les informations de connexion sont correctes (sans faute de frappe)

Répondre à demo_jouable

Ca marche !! J'ai recréer ma table et ca à marché, car dans la table j'avais id. Maintenant j'essaye de l'insérer sur le site, et voir si les 5 news par page marche

Répondre à r2d22

Par contre ca me fait un gros bordel, j'ai 2 problèmes :
1/ La news en haut est la plus vieille, moi je voudrais que la news la plus récente, avec la date s'affiche en haut, donc que les autres descendent d'un "case".
2/ La première s'affiche bien ou je veux, mais lotre sort complètement du cadre et la troisième aussi, voilà le code de ma page, c'est un morceau de la page car mon site est fait en includes.

Code :
  1. <?php include("haut.php" ); //Appelle du logo
  2. include("menu.php" ); //Appelle du menu
  3. ?>
  4. <html>
  5. <style type="text/css">
  6. .Texte {
  7.     font-family: Arial, Helvetica, sans-serif;
  8.     font-size: 12px;
  9.     font-style: normal;
  10.     color: #C33939;
  11. }
  12. </style>
  13. </html>
  14. <body onLoad="MM_preloadImages('img_site/le_bar/bar1bis.jpg','img_site/le_bar/bar2bis.jpg','img_site/le_bar/billard2.jpg')">
  15. <th width="4" scope="col" valign="top">&nbsp;</th>
  16.       <th width="646" scope="col" valign="top"><table width="646" height="400" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000">
  17.         <tr>
  18.           <th align="left" valign="top" scope="col" ><?php 
  19. $nbnews = 5; //nombre de news à afficher par page
  20. mysql_connect('localhost','****',***'); //connexion au serveur 
  21. mysql_select_db(****'); //sélection de la base de données 
  22. extract($_GET); // extraction du $_GET['page'] en $page 
  23. if (!$page) { $page = 1; }
  24. $lim1 = ($page - 1) * $nbnews; //définition de la limite minimum 
  25. $lim2 = $page * $nbnews; // définition de la limite maximum 
  26. $tbl = mysql_query("SELECT * FROM news LIMIT $lim1,$lim2" ); //requête SQL pour sélectionner seulement 5 news suivant la page 
  27. while ($row = mysql_fetch_array($tbl)) { //début de la boucle d'affichage 
  28. echo '<br/><table width="600" border="0" cellspacing="0" cellpadding="0"> 
  29.               <tr> 
  30.                   <th colspan="2" background="img_site/medias/titre.png" class="Texte" scope="col" >'.$row['titre'].'</th> 
  31.               </tr> 
  32.                 <tr> 
  33.                   <th width="124" scope="row">'.$row['image'].'</th> 
  34.                   <td width="522">'.$row['contenu'].'</td> 
  35.                 </tr> 
  36.                 <tr> 
  37.                   <th colspan="2" bgcolor="#D26C6C" scope="row">'.$row['date'].'</th> 
  38.               </tr> 
  39.               </table> 
  40.             <br> 
  41.             <br> 
  42.           </div></th> 
  43.         </tr> 
  44.        
  45.        
  46.       </table><br/>
  47. '; 
  48. } // fin de la boucle d'affichage 
  49. mysql_close(); // arrêt de la connexion SQL 
  50. ?>
  51.           <p>&nbsp;</p></th>
  52.         </tr>
  53.        
  54.        
  55.       </table>
  56.         <br />
  57. <?php include("bas.php" ); //Appelle du bas
  58. ?>



Message édité par r2d22 le 05-07-2007 à 23:04:25
Répondre à r2d22

Tu as oublié le ORDER BY id DESC (remplace id par le nom de champ de la clé primaire) ;)
par contre ca risque de t'afficher de la 5eme a la 1ere news sur la premiere page, il faut changer les limites.

par exemple, si tu as 20 news, sur la premiere page, tu affichage :
20 19 18 17 16
donc il faut que $lim1 soit egal a 20 et $lim2 soit egal a 16 sur la page 1.

J'espère m'etre fait comprendre :D


Message édité par Le22 le 06-07-2007 à 00:05:53
------------------------------ Triple Champion du monde, à titre honorifique, de Kamoulox !
Répondre à Le22

Merci encore de votre aide.
1/J'ai résolu mon problème, presque tout marche ^^ mais j'ai essayé de comprendre ton résonnement le22, mais j'ai pas tout compris, donc si tu pouvais me modifier le code ^^.

 

2/Comment faire une barre de changement de page en bas de la page et que ca ajoute les numéros de page à chaque fois que l'on doit svp ?

 

3/Sinon les guillemets c'est pas mon point fort ni les balises au bon endroit :D donc mon script marche pas car je m'embrouille les pinceaux , l'erreur vient surement dans le insert to avec des mélanges balises html et php:)
Donc si on peut me dire les erreurs svp

Code :
  1. $titre = $_POST['titre'];
  2. $contenu = $_POST['contenu'];
  3. $image = $_POST['image'];
  4. $lien = $_POST['lien'];
  5. mysql_query("INSERT INTO `medias` ( `id` , `titre` , `image` , `contenu` , `date` , `lien` )
  6. VALUES ('', '.$titre', '<img src=".$image" width="150">', '.$contenu', NOW( ) , '<a href="photos/.$lien/index.html">ICI</a>')" );
  7. mysql_close();
  8. ?>


Message édité par r2d22 le 08-07-2007 à 00:14:44
Répondre à r2d22

Déjà remplace

$titre = $_POST['titre'];
$contenu = $_POST['contenu'];
$image = $_POST['image'];
$lien = $_POST['lien'];


par

extract($_POST);


C'est magique et ça fait la même chose ;)

Sinon pour ta requête ça ferait plutôt : mysql_query("INSERT INTO medias(titre,image,contenu,date,lien) VALUES($titre,$image,$contenu,$date,$lien)" );

avec un auto-incerement sur ton id

Répondre à demo_jouable

Ok, merci
Le truc enfete c'est que je dois garder ca pour lien : "<a href="photos/'.$lien'/index.html">ICI</a>" et ce pour image "<img src=" $image " width="150">". Il faut que ca soit écrit dans la BDD Bon je sais qu'il y a des fautes ^^, car c me met erreur de variables. Sinon demon_jouable tu as pas msn pour en parler ? Si oui envoi le moi en MP stp

Répondre à r2d22

C'est bon j'ai résolu le problème ! Il me reste plus que celui de l'odre des news !

 

edit : tout semble marcher !!!! C'est super merci encore. Maintenant juste une dernière chose.


Message édité par r2d22 le 08-07-2007 à 22:58:19
Répondre à r2d22
Tom's Guide > Forum > Programmation > Système page
Aller à :

Il y a 2280 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens