Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1345 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  petit pb gestion de news.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

petit pb gestion de news.

n°806697
albator-hc
Posté le 26-07-2004 à 17:27:42  profilanswer
 

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
mood
Publicité
Posté le 26-07-2004 à 17:27:42  profilanswer
 

n°806705
dropsy
et bonne chance surtout...
Posté le 26-07-2004 à 17:30:10  profilanswer
 

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

n°806723
albator-hc
Posté le 26-07-2004 à 17:36:01  profilanswer
 

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
n°806737
dropsy
et bonne chance surtout...
Posté le 26-07-2004 à 17:40:29  profilanswer
 

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.

n°806758
albator-hc
Posté le 26-07-2004 à 17:45:57  profilanswer
 

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


---------------
p4w4
n°806777
dropsy
et bonne chance surtout...
Posté le 26-07-2004 à 17:51:28  profilanswer
 

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)

n°806785
albator-hc
Posté le 26-07-2004 à 17:54:24  profilanswer
 

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


---------------
p4w4
n°806796
albator-hc
Posté le 26-07-2004 à 17:59:38  profilanswer
 

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
n°806992
dropsy
et bonne chance surtout...
Posté le 26-07-2004 à 21:16:05  profilanswer
 

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

n°807006
albator-hc
Posté le 26-07-2004 à 21:36:20  profilanswer
 

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...

mood
Publicité
Posté le 26-07-2004 à 21:36:20  profilanswer
 

n°807143
naceroth
Posté le 27-07-2004 à 00:05:05  profilanswer
 

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);

n°807235
albator-hc
Posté le 27-07-2004 à 09:05:02  profilanswer
 

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
n°807268
dropsy
et bonne chance surtout...
Posté le 27-07-2004 à 09:31:48  profilanswer
 

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:

n°807329
albator-hc
Posté le 27-07-2004 à 10:18:18  profilanswer
 

$jsuispaumée=1;


---------------
p4w4
n°808091
naceroth
Posté le 27-07-2004 à 22:41:57  profilanswer
 

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

n°808105
naceroth
Posté le 27-07-2004 à 22:51:16  profilanswer
 

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

 

n°810840
albator-hc
Posté le 30-07-2004 à 10:42:50  profilanswer
 

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


---------------
p4w4
n°811456
naceroth
Posté le 30-07-2004 à 17:34:06  profilanswer
 

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à...)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  petit pb gestion de news.

 

Sujets relatifs
gestion des popupsPetit problème de requête...
[C/C++] lecture de fichiers dans un format perso - gestion des erreursFenêtre de petit format dans dreamweaver
Petit problème :([Java] Multithreading et gestion des exceptions
Faire un formulaire dajout de news.Petit pbs pour une barre de progression
petit concours de securitéPetit probleme java / php
Plus de sujets relatifs à : petit pb gestion de news.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR