Actualiser une liste de données tirées d'une table Mysql en PHP

Actualiser une liste de données tirées d'une table Mysql en PHP - PHP - Programmation

Marsh Posté le 30-11-2010 à 18:50:46    

Hello,
 
J'ai un site géré en php avec une base Mysql qui m'affiche une liste de livres, classés par catégorie.
Ce que j'aimerai faire c'est un menu qui en fonction de la catégorie cliquée, m'affiche uniquement les livres de cette catégorie. Et a chaque nouveau clic, la liste se met a jour avec les nouveaux livres.
 
J'ai bien une variable avec l'ID de la catégorie que je peux récupérer mais je ne sais pas :
- Changer cette variable avec le nouvel ID, avec un clic sur un item du menu
- Actualiser la liste une fois la variable modifiée
 
J'ai bien fait un include de mon fichier php qui contient ma liste a afficher, dans un <DIV> mais voila, comment lui dire que quand on va cliquer sur le lien du menu, ça va devoir relancer la recherche et afficher la nouvelle liste ?
 
Je ne sais pas si mes explications sont tres claire.?
Alors j'ai entendu parler d'ajx pour faire cela mais tous les tuto que je trouvent utiliser des formulaire, ce qui ne conviens pas a mon cas.
 
Si quelqu'un a une idée, je suis preneur. Merci d'avance

Reply

Marsh Posté le 30-11-2010 à 18:50:46   

Reply

Marsh Posté le 30-11-2010 à 19:05:53    

Est ce que, lorsque tu clique sur une categorie, tu veux recharger ta page ( genre listeLivres.php?id_categorie=3 ) ou est ce que tout doit se faire sans rechargement ?  
la première solution est simple et en php  
la seconde, un poil plus complexe et en javascript + PHP

Reply

Marsh Posté le 30-11-2010 à 21:35:17    

bin j'avoue que ça m'arrangerai de ne recharger que la partie qui doit etre modifiée.
Mais sinon recharger la page entiere pourquoi pas.
Je suis ouvert aux différentes propositions :)

Reply

Marsh Posté le 30-11-2010 à 22:05:28    

prends pas trop de risques, il peut y avoir des propositions indécentes

 

Le plus simple

Code :
  1. if(!empty($_GET['idCategorie'] ) && is_int($_GET['idCategorie'])) // on verifie qu'on a une categorie et qeu c'est bien un entier, ne jamais faire confiance a un utilisateur
  2. {
  3.  
  4. $idCategorie = $_GET['idCategorie'];
  5. }else{
  6. $idCategorie = '';
  7. }
  8.     afficheLesLivresAvecEventuellementUneCategorieSiOnAEnvie($idCategorie);
 


Code :
  1. function  afficheLesLivresAvecEventuellementUneCategorieSiOnAEnvie($idCategorie = '')
  2. {
  3.    $query ="SELECT tous,mes,champs FROM livres";
  4.     if($idCategorie)
  5.     {
  6.           $query.=" WHERE idCategorie =".mysql_real_escape_string($idCategorie); //ici des requetes preparée, ce serait mieux, mais bon, c'est deja pas mal
  7.     }
  8.    $result =mysql_query($query);
  9.    while($data = mysql_fetch_array($result))
  10.   {
  11.        afficheUnSeulLivre($data);
  12.   }
  13.  
  14. }


Message édité par flo850 le 30-11-2010 à 22:06:02
Reply

Marsh Posté le 30-11-2010 à 23:39:03    

Merci
J'ai modifié mon code pour m'approcher de ce que tu proposes et ça fonctionne bien, j'ai bien ma liste pour la première categorie par contre je suis toujours bloqué au niveau du clic pour afficher les autres categorie.
 
pour chaque item du menu j'ai un evenement onClick qui lance une fonction Javascript avec en parametre la categorie et dans cette fonction j'ai trouvé ce genre de code sur le net, mais ça ne fait rien du tout :'(
 

Code :
  1. if (idSerie=="" )
  2. {
  3.    document.getElementById("DisplayBooks" ).innerHTML="";
  4.    return;
  5. }
  6. if (window.XMLHttpRequest)
  7. {// code for IE7+, Firefox, Chrome, Opera, Safari
  8. xmlhttp=new XMLHttpRequest();
  9. }
  10. else
  11. {// code for IE6, IE5
  12. xmlhttp=new ActiveXObject("Microsoft.XMLHTTP" );
  13. }
  14. xmlhttp.onreadystatechange=function()
  15. {
  16. if (xmlhttp.readyState==4 && xmlhttp.status==200)
  17. {   
  18.           document.getElementById("DisplayBooks" ).innerHTML=xmlhttp.responseText;
  19.         }
  20. }
  21. xmlhttp.open("GET","displayBook.php?NewID="+idSerie,true);
  22. xmlhttp.send();

 
L'element DisplayBook est un id sur la balise DIV qui inclu le code php qui affiche les livres


Message édité par leloos le 30-11-2010 à 23:40:19
Reply

Marsh Posté le 01-12-2010 à 09:24:39    

pas besoinde js tu fais un lien ( ou un bouton ) . commence déjà apr avoir une navigation qui marche sans , avant de compliquer

 
Code :
  1. <a href="mapageoujaffichemeslivres.php?id=1">livres pornographiques</a>
  2. <a href="mapageoujaffichemeslivres.php?id=2">livres sur les gladiateurs</a>


Message édité par flo850 le 01-12-2010 à 09:25:08
Reply

Marsh Posté le 01-12-2010 à 10:28:51    

Et non, malheureusement je ne peut pas proceder comme ça, car la, ça ne me lance que le fichier php qui contient ma partie qui affiche la liste, et donc je me retrouve avec pleins d'erreur de fonctions manquantes.
 
Je vais poster quelques un de mes script (en virant certaines infos genre infos de connexion, etc.) pour que ce soit plus compréhensible. Bon par contre, etant plus ou moins debutant, je code comme un pied et c'est surement bourré de fautes.......lol
Le souci venant du script CreateMenu qui contient le menu et les liens pour afficher une nouvelle liste.  
Il faudrait soit que j'arrive a mettre a jour une variable globale que je puisse récupérer lors d'un refresh de la page index.php (mais bon la c'est pas super), le mieux etant de pouvoir relancer displayBooks.php, contenu dans une balise DIV.
Il doit y avoir moyen de le faire avec du javscript mais la je seche completement.
 
 
PS : désolé pour le pavé de code  
 
index.php

Code :
  1. <?php
  2. // On demarre une nouvelle session
  3. session_start();
  4. ?>
  5. <html lang="en" dir="ltr" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7.  <!-- lien vers la feuille css -->
  8.  <link rel="stylesheet" type="text/css" href= "design.css">
  9.  <!-- lien vers fichier avec les script-->
  10.  <script type="text/javascript" src="script.js"></script>
  11. </head>
  12. <body>
  13. <!-- Connection a la base -->
  14. <?php include './PhpScripts/DBConnexion.php'; ?>
  15. <!-- Fonctions PHP -->
  16. <?php include './PhpScripts/functions.php'; ?>
  17. <!-- Titre avant la liste -->
  18. <span id="Big_Title">JUMP ANIME COMICS</span>
  19. <span id="Less_Big_Title">Jump Comics Selection</span>
  20. <span id="Little_Title">Database</span>
  21. <BR/><BR/><BR/><BR/><BR/><BR/>
  22. <table id="Conteneur">
  23. <tr id="Conteneur">
  24. <!-- Colonne avec le menu -->
  25. <td id="Menu"><div align="center">
  26.  <ul id="Navigation">
  27.  <!-- Creation du menu -->
  28.  <?php include './PhpScripts/CreateMenu.php'; ?>
  29.  </ul>
  30. </td></div>
  31. <!-- Colonne avec le contenu -->
  32. <td id="Conteneur"><div align="center" id="DisplayBooks">
  33.  <?php
  34.   $_GET['NewID']   = $_SESSION['NewSerieID'];
  35.   $_GET['SerieFR']  = $_SESSION['NewSerieNameFR'];
  36.   $_GET['SerieVO']  = $_SESSION['NewSerieNameVO'];
  37.   include './PhpScripts/displayBooks.php';
  38.  ?>
  39. </div></td>
  40. </TR></TABLE>
  41. </DIV>
  42. <!-- Deconnection a la base -->
  43. <?php mysql_close($base); ?>
  44. </body>
  45. </html>
  46. <!-- Destruction des variables de session et la session -->
  47. <?php
  48. session_unset();
  49. session_destroy(); 
  50. ?>


 
CreateMenu.php

Code :
  1. <?php
  2. // Selection des series
  3. $reqSerie = mysql_query("SELECT * FROM Serie" );
  4. // Un menu par série
  5. for($i=0 ;$i < mysql_num_rows($reqSerie) ;$i++)
  6. {
  7.  $NewSerieNameFR = mysql_result($reqSerie,$i,1);
  8.  $NewSerieNameVO = mysql_result($reqSerie,$i,2);
  9.  $NewSerieID    = mysql_result($reqSerie,$i,0);
  10.  echo "<li><a href=\"./PhpScripts/displayBooks.php?NewID=$i\" id=\"Link-$i\" title=\"$NewSerieNameFR ($NewSerieNameVO)\">&nbsp;&nbsp;";
  11.  //echo "onClick=\"Get_Books($NewSerieID, $NewSerieNameFR, $NewSerieNameVO);\">&nbsp;&nbsp;";
  12.  echo $NewSerieNameFR;
  13.  echo "</a></li>";
  14. }
  15. // On initialise avec la première série
  16. $NewSerieNameFR = mysql_result($reqSerie,0,1);
  17. $NewSerieNameVO = mysql_result($reqSerie,0,2);
  18. $NewSerieID    = mysql_result($reqSerie,0,0);
  19. // On créé nos varaibles sessiosn  
  20. $_SESSION['NewSerieNameFR'] = $NewSerieNameFR ;
  21. $_SESSION['NewSerieNameVO'] = $NewSerieNameVO ;
  22. $_SESSION['NewSerieID']  = $NewSerieID ;
  23. ?>


 
displayBooks.php

Code :
  1. <?php
  2. // On récupère l'ID de la série
  3. if(!empty($_GET['NewID'] ) && is_int($_GET['NewID']))
  4.   {
  5.  $IDSerie = $_GET['NewID'];
  6.   }else{
  7.  $IDSerie = '';
  8.   }
  9. // On affiche les livres de la série
  10. DisplayBooks($IDSerie, "", "" );
  11. ?>


 
functions.php

Code :
  1. <?php
  2. function DisplayBooks($idSerie='', $SerieFR='', $SerieVO='')
  3.     {
  4.  // Affichage du titre de la serie en cours
  5.  echo"<table id='HeaderSerie'>";
  6.  echo"<tr id='HeaderSerie'>";
  7.  echo"<td id='HeaderSerie'>";
  8.  echo"<span id=HeaderSerie>";
  9.  echo $SerieFR;
  10.  echo"</span>";
  11.  echo"<span id='TitreJPRomaji1'>(";
  12.  echo $SerieVO;
  13.  echo" )</span></td></tr></table><br/>";
  14.  // Selection des livres
  15.  $query ="SELECT * FROM Book";
  16.         if($idSerie)
  17.         {
  18.   $query.=" WHERE IDSerie =".mysql_real_escape_string($idSerie);
  19.         }
  20.         $result =mysql_query($query);
  21.  DisplayOneBook($result);
  22.     }
  23. function DisplayOneBook($req)
  24. {
  25.  // Affichage des Anime Books correspondants a la serie
  26.  for($j=0 ;$j < mysql_num_rows($req) ;$j++)
  27.  {
  28.   echo"<TABLE id='Book'>";
  29.   echo"<TR id='Book'><TD id='Book'>";
  30.   // Ligne d'entete avec les titres JP
  31.   echo"<tr id='HeaderBook'>";
  32.   echo"<td id='HeaderBook' colspan='2'>";
  33.   echo"<span id='TitreJP'>";
  34.   echo mysql_result($req,$j,3);
  35.   echo"</span>";
  36.   // Titre JP2 (Romaji)
  37.   echo"<span id='TitreJPRomaji2'>";
  38.   echo mysql_result($req,$j,4);
  39.   echo"</span>";
  40.   echo"</td></tr>";
  41.   // Info du livre
  42.   echo"<tr id='InfoBook'>";
  43.   echo"<td id='InfoBookLeft'>";
  44.   // Image
  45.   echo"<img src='";
  46.   echo mysql_result($req,$j,10);
  47.   echo"' id='ImageBook'>";
  48.   echo"</td>";
  49.   // Partie de gauche
  50.   echo"<td id='InfoBookRight'>";
  51.   // Titre FR
  52.   echo"<div id='BookTitreFR'>";
  53.   echo mysql_result($req,$j,5);
  54.   echo"</div>";
  55.   // Titre FR2
  56.   echo"<div id='BookTitreFR2'>";
  57.   echo mysql_result($req,$j,6);
  58.   echo"</div><BR/>";
  59.   // Numero et Date
  60.   echo"<div id='BookNumDate'>";
  61.   echo mysql_result($req,$j,8);
  62.   echo" (";
  63.   echo mysql_result($req,$j,7);
  64.   echo" )</div><BR/>";
  65.   //ISBN
  66.   echo"<div id='BookISBN'>ISBN-";
  67.   $Isbn = mysql_result($req,$j,9);
  68.   echo $Isbn;
  69.   echo"</div><BR/>";
  70.   echo"</td>";
  71.   echo"</tr>";
  72.   echo"</table>";
  73.  }
  74. }
  75. ?>


 
en tout cas merci d'avance pour ton aide ;)

Reply

Marsh Posté le 01-12-2010 à 14:11:41    

Ok je pense avoir trouvé, je suis passé par l'ajax et maintenant j'arrive bien a actualiser le texte de ma balise. Me reste plus qu'a corriger quelques erreurs de scripts php mais sinon ça me semble good.
Merci pour tout

Reply

Sujets relatifs:

Leave a Replay

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