petit pb gestion de news.

petit pb gestion de news. - PHP - Programmation

Marsh Posté le 26-07-2004 à 17:27:42    

Bien le bonjour a vous.
 
une pettie question a vous poser :  
 
je suis en train de creer un site pour moi et un copain. Cependant, je veut gerer les news grace a une bdd sql et le php.
 
 
mon script fonctionne sans probleme, a un petit detail pres.
 
Jai reperer les News avec un news ID, grace auquelle je peut les ouvrir. Le probleme est a l'endroit ou je veut supprimer les news: comme le champs ID s'increment automatiquement, des que je veut en supprimer une, il manque un ID dans ma table.
 
De ce fait, quand je veut les consulter, jai fait un fichier avec un bouton suivant et precedent avec un paramettre variable dans l'url.
 
quand je fait mon boutton suivant ou precedent et que jai effacer une news, forcement il ne trouve pas ID+1(vu qu'il n'existe plus).
 
si quelqu'un a la solution....stile faire une boucle avant opour verifier si l'id+1 existe.
 
merci d'avance.


---------------
p4w4
Reply

Marsh Posté le 26-07-2004 à 17:27:42   

Reply

Marsh Posté le 26-07-2004 à 17:30:10    

pour trouver le suivant, fait un "select min(id) from table where id > id_afficher" pour récupérer la news à afficher

Reply

Marsh Posté le 26-07-2004 à 17:36:01    

Voila ma page d'affichage des news avec mes 2 fameux bouton.
 
<?
function post($text) //Fonction de verification des formulaires de post avec ajout des smileys et adresses cliquables
  {
    $text = wordwrap($text, 150, " ", 1); //coupe les mots trop longs
    $text = htmlentities($text);
     $text=preg_replace("/(\[img\]www)(.[^\"\'\(\)\<\>\]\[]*?)(\[\/img\])/i", " <img src='http://www\\2' border=0> ", $text);
     $text=preg_replace("/(\[img\])(.[^\"\'\(\)\<\>\]\[]*?)(\[\/img\])/i", " <img src='\\2' border=0> ", $text);
     $text=preg_replace("/(\[url\]www)(.[^\"\'\(\)\<\>\]\[]*?)(\[\/url\])/i", "<a href=\"http://www\\2\">www\\2</a>", $text);
     $text=preg_replace("/(\[url\]http)(.[^\"\'\(\)\<\>\]\[]*?)(\[\/url\])/i", "<a href=\"http\\2\">http\\2</a>", $text);
     $text=preg_replace("/(\[url=(.[^\"\'\(\)\<\>\]\[]*?)\])(.*?)(\[\/url\])/i", "<a href=\"\\2\">\\3</a>", $text);
 
       $text = str_replace('alert','!alert!',$text);
       $text = str_replace('javascript','!javascript!',$text);
       $text = str_replace(':)','<img src="admin/smileys/icon1.gif">',$text);
       $text = str_replace(':(','<img src="admin/smileys/icon2.gif">',$text);
       $text = str_replace(':o','<img src="admin/smileys/icon3.gif">',$text);
       $text = str_replace(';)','<img src="admin/smileys/icon4.gif">',$text);
       $text = str_replace('8)','<img src="admin/smileys/icon5.gif">',$text);
       $text = str_replace(':|','<img src="admin/smileys/icon6.gif">',$text);
       $text = str_replace(':?','<img src="admin/smileys/icon7.gif">',$text);
       $text = str_replace(':#','<img src="admin/smileys/icon8.gif">',$text);
       $text = str_replace(':8','<img src="admin/smileys/icon9.gif">',$text);
       $text = str_replace(';(','<img src="admin/smileys/icon10.gif">',$text);
       $text = str_replace(':p','<img src="admin/smileys/icon11.gif">',$text);
       $text = str_replace('p)','<img src="admin/smileys/icon12.gif">',$text);
       $text = str_replace('[hr]','<hr>',$text);
       $text = str_replace('[hr]','<hr>',$text);
 
      $text=preg_replace("/(\[couleur=([#a-zA-Z0-9]*)\])/i", "</span><span style=\"color:\\2\">", $text);
      $text=preg_replace("/(\[\/#)(.*?)(\])/i", "</SPAN>", $text);
 
       $text = str_replace('

Citation :

','<DIV class=comUserStat><SPAN class=comUserStatCaption>Citation :</SPAN><BR>',$text);
       $text = str_replace('

','</DIV>',$text);
       $text = str_replace('','<b>',$text);
       $text = str_replace('','<u>',$text);
       $text = str_replace('','<i><font size="1">',$text);
       $text = str_replace('
','</i>',$text);
       $text = str_replace('[ /i]','</i>',$text);
       $text = str_replace('
','</b>',$text);
       $text = str_replace('','</u>',$text);
       $text = str_replace ('[glow]','<div style="width:100%;filter:glow(color=#000000,strength=1);">',$text) ;
       $text = str_replace ('[/glow]','</div>',$text) ;
       $text = str_replace('','<b>',$text);
       $text = str_replace('
','</b>',$text);
       $text = str_replace('[cpp]','<table border="1" cellspacing="0" cellpadding="0"><tr><td bgcolor="#FFFFFF">C++ :<font size="2"><br>',$text);
       $text = str_replace('','</td></tr></table>',$text);
 
    $text = nl2br($text);
    $text = stripslashes($text);
 
    return $text;
  }
 
//bare des news
include("/home/techworl/public_html/admin/config.php" );
$connection= mysql_connect($host_db,$user_db,$password_db,$bdd_db);
$db=mysql_select_db($bdd_db,$connection);
 
$id=$_GET['sid'];
 
$sql = "SELECT * FROM news WHERE id='$id'";
 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
 
while ($data = mysql_fetch_array($req)) {
 
 
    $titre = $data['titre'];
   $texte = $data['texte'];
 $date = $data['date'];
 
 
$idmi=$id-1;
$idma=$id+1;
 
 
    echo '</br>';
    echo '<table width="60%" height="5%" border="3"> <TD width="10%" bgcolor="#FFFFFF"><div align="center"></div>'.$date.'<td width="50%" bgcolor="#FFFFFF"><div align="center"></div>'.$titre.'';
    echo '</table>';?>
<table width="60%" height="15%" border="3"><td width="50%" bgcolor="#FFFFFF"></div><? echo post($texte)?>;
<?
echo '</table>';
 
    //recup idmax
$result = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,1" );
$req2 = mysql_fetch_array($result);
$idmax = $req2["id"];
 
//condition idmax
if ($id==$idmax)
{
echo "<ol><A HREF=index.php>retour au sommaire<ol>";
}
else
{
echo '<ol><A HREF=news.php?sid='.$idma.'>news suivante</ol>';
}
//recup idmin
$result2 = mysql_query("SELECT * FROM news ORDER BY id ASC LIMIT 0,1" );
$req3 = mysql_fetch_array($result2);
$idmin = $req3["id"];
 
 
//condition idmin
if ($id==$idmin)
{
echo "<ol><A HREF=index.php>retour au sommaire<ol>";
}
else
{
echo '<ol><A HREF=news.php?sid='.$idmi.'>news precedente</ol>';
 
}
 
 
}
 
 
mysql_free_result ($req);  
 
mysql_close ();  
 
?>[/cpp]
 
concretement en code jle fait comment parce que jai pas trop compris ton astuce?


---------------
p4w4
Reply

Marsh Posté le 26-07-2004 à 17:40:29    

je dirai qu'il faut que tu remplaces cette requète: SELECT * FROM news ORDER BY id DESC LIMIT 0,1 par celle que je t'ai donnée.

Reply

Marsh Posté le 26-07-2004 à 17:45:57    

ouais mais jai pas compris celle que tu ma donner.
 
peut tu etre plus clair sur l'explication
 
merci d'avance


---------------
p4w4
Reply

Marsh Posté le 26-07-2004 à 17:51:28    

vue tu requête pour récupérer l'id max et min, ça m'étonne pas vraiment :D
je te conseille de jeter un coup d'oeil sur un tuto sql, c'est toujours utile ;)
 
select min(id) from table where id > id_afficher
cette requête sélectionne le plus petit id (min(id)) supérieur à id_afficher (qui est l'id de la news actuellement afficher)

Reply

Marsh Posté le 26-07-2004 à 17:54:24    

donc dans mon cas :
 
select min(id) from news where id=$id
 
c bien ca?


---------------
p4w4
Reply

Marsh Posté le 26-07-2004 à 17:59:38    

jai fait une recherche sur la fonction, ca affiche le plus petit ou le plus grand de la table.
 
Moi c pas ca dont jai besoin
 
je veut juste qu'il puisse soter id+2 si id+1 existe pas au lieu de faire une erreur.


---------------
p4w4
Reply

Marsh Posté le 26-07-2004 à 21:16:05    

tu as vraiment besoin d'apprendre le SQL :/
 
ça prend le min des id qui vérifie la clause where ;)

Reply

Marsh Posté le 26-07-2004 à 21:36:20    

ouais je sais jsuis un gros nb
 
nempeche que jen ai marre ca me fait galerer
 
alor o lieu de me faire baver si tu c essaye de mexpliquer simplement....
 
merci quand meme a toi pour ton aide...

Reply

Marsh Posté le 26-07-2004 à 21:36:20   

Reply

Marsh Posté le 27-07-2004 à 00:05:05    

Pourquoi faire simple quand il y a moyen de faire compliquer  :sarcastic:  
 
Plutôt que de t'emmerder à récupérer un min(id) puis à faire une autre requête pour enfin avoir ce que tu cherches, passe dans l'url la position "logique" de la news (càd le nombre de news déjà afficher) et fait un

Code :
  1. select * from table_news limit position,1

.
 
(comme tu le fais très bien pour la première :D)
 
En passant albator, dans le code que tu mets plus haut, pourquoi tu fais deux fois de suite

Code :
  1. $text = str_replace('[hr]','<hr>',$text);

Reply

Marsh Posté le 27-07-2004 à 09:05:02    

Citation :

Plutôt que de t'emmerder à récupérer un min(id) puis à faire une autre requête pour enfin avoir ce que tu cherches, passe dans l'url la position "logique" de la news (càd le nombre de news déjà afficher)

 
 
tjr pas compris!!!
 
et oui je me lutte je sais....


---------------
p4w4
Reply

Marsh Posté le 27-07-2004 à 09:31:48    

naceroth a écrit :

Pourquoi faire simple quand il y a moyen de faire compliquer  :sarcastic:  


compliquer?? [:mlc2]
 
la requète lui sort directement le bon id à afficher avec une bête clause WHERE :sarcastic:

Reply

Marsh Posté le 27-07-2004 à 10:18:18    

$jsuispaumée=1;


---------------
p4w4
Reply

Marsh Posté le 27-07-2004 à 22:41:57    

dropsy a écrit :

compliquer?? [:mlc2]
 
la requète lui sort directement le bon id à afficher avec une bête clause WHERE :sarcastic:


 
C'est la méthode compliquée car :
1. Tu tries rarement tes news par id
2. Tu multiplies les accès bdd pour des prunes  :D

Reply

Marsh Posté le 27-07-2004 à 22:51:16    

albator-hc a écrit :

Citation :

Plutôt que de t'emmerder à récupérer un min(id) puis à faire une autre requête pour enfin avoir ce que tu cherches, passe dans l'url la position "logique" de la news (càd le nombre de news déjà afficher)

 
 
tjr pas compris!!!


 
Bon.
 
Je te suggère de mémoriser le nombre de page de news que tu as déjà afficher. Par exemple, pour la première page, tu mets un lien genre

Code :
  1. <a href="news.php?page=1">suivant</a>

 
Pour la deuxième page

Code :
  1. <a href="news.php?page=2">suivant</a>


Pour la Xième page

Code :
  1. <a href="news.php?page=x+1">suivant</a>


 
Et dans ta requête tu mets juste

Code :
  1. select * from table_news limit $page,1

 

Reply

Marsh Posté le 30-07-2004 à 10:42:50    

Et kle code complet a integrer au fichier?
 
car je voit tjr pas commen,t faire.
 
le truc limit me fait lutter...


---------------
p4w4
Reply

Marsh Posté le 30-07-2004 à 17:34:06    

albator-hc a écrit :

Et kle code complet a integrer au fichier?


 
Rassure moi, t'es pas en train de me demander de le faire à ta place là ?  :ange:  
 
Bon, schématiquement (faut bien que tu réfléchisses un peu, c'est toujours mieux de comprendre par soi-même):
 

Code :
  1. // on vérifie l'existence de page dans la querystring
  2. if (isset($_GET['page'])){
  3. // Il existe, on récupère
  4. $page = $_GET['page'];
  5. } else {
  6. // Il n'existe pas, c'est donc la première news
  7. $page = 0;
  8. }
  9. // On récupère la news à afficher
  10. $sql = "select * from news order by x limit $page,1";
  11. $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
  12. /** Là, tu mets ton traitement pour l'affichage **/
  13. ...
  14. // La barre de navigation
  15. echo '<a href="index.php?page='.$page+1.'">Suivante</a>';


 
Voilà en gros comment ça marche, il manque des vérifications (je vérifie pas que $_GET['page'] est un nombre par exemple ou encore que je ne suis pas à la fin quand je mets le lien vers le suivant) et on peut encore facilement l'améliorer.
 
Remarque aussi qu'il est plus logique de trier des news par date que par id, bonjour la cohérence le jour où un sgbd sautera des id ou décidera de remplir les trous (rigole pas, le premier cas existe déjà...)

Reply

Sujets relatifs:

Leave a Replay

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