Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][Smarty] Problem z wyświetleniem wszystkich komentarzy
Forum PHP.pl > Forum > PHP
Tajgeer
Witam,

Postanowiłem stworzyć przy użyciu Smarty możliwość komentowania newsów na moim portalu. Podkreślam od razu, że przerabiam skrypt z połączenia portalu z forum (IPB przy użyciu IPB SDK) na "zwykłe możliwości", tzn. wpisanie komentarza do bazy danych, a następnie wyświetlenie go na podstronie z komentarzami. Poniżej przedstawiam odpowiednie fragmenty pliku .php i pliku .tpl.

Plik comment.php
  1. $zapytanie = "SELECT `tekst`, `autor`, `data` FROM `fp_db_comments` WHERE id=$cleanID ORDER BY data ASC";
  2. $ilosc_wierszy = mysql_query("SELECT * FROM `fp_db_comments` WHERE id=$cleanID ORDER BY data ASC");
  3. $idzapytania = mysql_query($zapytanie);
  4. $ile_kom = mysql_num_rows($ilosc_wierszy);
  5. while ($wiersz = mysql_fetch_row($idzapytania)) {
  6. $smarty -> assign('DATATEKST',$wiersz[0]);
  7. $smarty -> assign('DATAAUTOR',$wiersz[1]);
  8. $smarty -> assign('DATADATA',$wiersz[2]);
  9. }
  10.  
  11. $smarty -> assign('ILE_KOM',$ile_kom);


Plik koment.tpl
  1. {section name=comments loop=$ILE_KOM}
  2. <table width="95%" border="0" cellspacing="1" cellpadding="0">
  3. <tr>
  4. <td valign="middle" bgcolor="#C4C7CA">
  5. <table width="100%" border="0" cellspacing="0" cellpadding="0">
  6. <tr>
  7. <td width="17"><img src="{$PATH}/layout/kom_iko.gif" width="17" height="16"></td>
  8. <td class="kom_up">&nbsp;{$DATAAUTOR} | {$DATADATA}</font></td>
  9. </tr>
  10. </table></td>
  11. </tr>
  12. <tr>
  13. <td valign="top" bgcolor="#D8D9DC" class="kom_down">
  14. {$DATATEKST} </td>
  15. </tr>
  16. </table><br>
  17. {/section}


Ilość komentarzy wyświetla dobrą (tzn. tworzy dobrą ilość tabel - plik .tpl), ale jest problem z wyświetleniem zawartości zapytania. Zamiast wyświetlać wszystkie komentarze, wyświetla on najnowszy, bądź najstarszy w zależności od metody sortowania. Jak sprawić, aby wyświetlały się wszystkie komentarze, a nie jeden ?
jarmiar
co zawiera zmienna $cleanID questionmark.gif
Tajgeer
Zmienna $cleanID jest numerem ID wyświetlaniego newsa.

Tzn, jeśli ktoś np. wejdzie w adres http://www.fifapolonia.pl/comment.php?id=1...amp;akcja=pokaz (wyswietlanie pojedynczego newsa + komentarze) to zmienna $cleanID przyjmuje wartość 1494.
JoShiMa
W kwestii formalnej. Jeśli już musi to być w tabelach to chociaż daruj sobie zagnieżdżenia. To naprawdę można zrobić ładnie i jednocześnie semantycznie dzięki innym niż tabela elementom blokowym.

  1. <?php
  2. while ($wiersz = mysql_fetch_row($idzapytania)) {
  3.  rows[] = $wiersz;
  4. }
  5.  $smarty -> assign('komentarze',$rows);
  6. ?>



  1. <ul>
  2. {section name=comments loop=$komentarze}
  3. <li>
  4. <img src="{$PATH}/layout/kom_iko.gif" width="17" height="16">
  5. <div>
  6. <h3>{$komentarze[comment][1]} | {$komentarze[comment][2]}</h3>
  7. <p>{$komentarze[comment][0]}</p>
  8. </div>
  9. </li>
  10. {/section}
  11. </ul>


Wstawia ci ostatni wczytany wiersz, gdyż wpisujesz w pętli wszystko pod tymi samymi zmiennymi zamazując poprzednie wartości.
Tajgeer
Teraz to już nic nie mam sleep.gif
JoShiMa
To przyjrzyj dobrze się bo zrobiłam literówkę:

  1. <ul>
  2. {section name=comment loop=$komentarze}
  3. <li>
  4. <img src="{$PATH}/layout/kom_iko.gif" width="17" height="16">
  5. <div>
  6. <h3>{$komentarze[comment][1]} | {$komentarze[comment][2]}</h3>
  7. <p>{$komentarze[comment][0]}</p>
  8. </div>
  9. </li>
  10. {/section}
  11. </ul>


Nawet nie zadałeś sobie trudu zrozumienia tego skryptu. Gdybyś to zrobił zauważyłbyś błąd.
Tajgeer
Teraz chyba jest ok, ale nie wiem czemu wyświetla błąd: unexpected '[' w linii, w której znajduje się:

rows[] = $wiersz;

Nie mam pojęcia co jest nie tak.

Cały plik php:
  1. <?php include('eanations.php'); ?>
  2. <?
  3. require_once 'libs/Smarty.class.php';
  4. require_once "ipbsdk/ipbsdk_class.inc.php";
  5. $SDK =& new IPBSDK();
  6.  
  7. $news = array();
  8.  
  9. $u_ar = $SDK->get_info($_COOKIE['member_id']);
  10. $usernick = $u_ar['name'];
  11. $usermail = $u_ar['mail']; 
  12.  
  13. $cleanID = 0;
  14.  
  15. if (isset($_REQUEST['id'])) {
  16.  
  17. $cleanID = $_REQUEST['id'];
  18. }
  19.  
  20.  
  21. $smarty = new Smarty;
  22. $smarty -> assign('PATH','templates/style01');
  23.  
  24. if($cleanID != 0)
  25. {
  26.  
  27. $query = mysql_query("SELECT * FROM fp_db_news WHERE id=$cleanID");
  28. $rekord = mysql_fetch_array($query);
  29. $topicinfo = $SDK->get_topic_info("$rekord[8]");
  30. $komentarze = $SDK->list_topic_posts ("$rekord[8]", array("start" => "1","order" => "asc", "orderby" => "pid"), "0");
  31.  
  32. $smarty -> assign('NEWS_TITLE',$rekord[2]);
  33. $smarty -> assign('NEWS_DATE',$rekord[1]);
  34. $smarty -> assign('NEWS_TEXT',$rekord[3]);
  35. $smarty -> assign('NEWS_AUTH_MAIL',$rekord[6]);
  36. $smarty -> assign('NEWS_AUTH',$rekord[4]);
  37. $smarty -> assign('NEWS_IMAGE',$rekord[7]);
  38.  
  39. $smarty -> assign('ILE_KOM',$ile_kom);
  40.  
  41. $zapytanie = "SELECT `tekst`, `autor`, `data` FROM `fp_db_comments` WHERE id=$cleanID ORD
    ER BY
  42. data ASC";
  43. $ilosc_wierszy = mysql_query("SELECT * FROM `fp_db_comments` WHERE id=$cleanID ORDER BY data ASC");
  44. $idzapytania = mysql_query($zapytanie);
  45. $ile_kom = mysql_num_rows($ilosc_wierszy);
  46. while ($wiersz = mysql_fetch_row($idzapytania)) {
  47.  rows[] = $wiersz;
  48. }
  49.  $smarty -> assign('komentarze',$rows);
  50.  
  51. $smarty -> assign('ZAPYTANIE',$zapytanie);
  52. $smarty -> assign('ILE_KOM',$ile_kom);
  53.  
  54.  
  55.  
  56. if( (isset($_GET['akcja'])) || (isset($_POST['akcja'])) )
  57. {
  58.  if(isset($_GET['akcja']))
  59. {
  60.  if($_GET['akcja']=='dodaj')
  61.  {
  62. $smarty -> assign('CURRENT_LINK','javascript:history.back()');
  63. $smarty -> assign('ID',$cleanID);
  64. $smarty -> assign('TOPICID',$rekord[8]);
  65. $smarty -> assign('KOM_AUTH',$usernick);
  66. $smarty -> assign('AKCJA','dodaj_post');
  67. $smarty -> display('templates/style01/koment2.tpl');
  68.  }
  69. else
  70.  {
  71. $smarty -> assign('CURRENT_LINK','http://www.fifapolonia.pl/comment.php?id='.$cleanID.'&akcja=dodaj');
  72. $smarty -> display('templates/style01/koment.tpl');
  73.  }
  74.  } 
  75.  if(isset($_POST['akcja']))
  76. {
  77.  if($_POST['akcja']=='dodaj_post')
  78.  {
  79. $SDK->add_post ($topicid, $tekst, 0, 0, 1);
  80. $smarty -> assign('CURRENT_LINK','http://www.fifapolonia.pl/comment.php?id='.$cleanID.'&akcja=dodaj');
  81. $komentarze = $SDK->list_topic_posts ("$rekord[8]", array("start" => "1","order" => "asc", "orderby" => "pid"), "0");
  82. $topicinfo = $SDK->get_topic_info("$rekord[8]");
  83. $ile_kom = $topicinfo['posts']+;
  84. $date_time = date("Y-m-d G:i:s");
  85. $query = mysql_query("INSERT INTO fp_db_comments (`id`, `tekst`, `autor`, `data`)
  86. VALUES ('$cleanID', '$tekst', '$autor', '$date_time')");
  87. $smarty -> assign('ILE_KOM',$ile_kom);
  88. $smarty -> assign('COMMENT',$komentarze);
  89. $smarty -> display('templates/style01/koment.tpl');
  90.  }
  91. }
  92. }
  93.  
  94. } 
  95. ?>
nospor
nie rows[]
a: $rows[]

Analizuj kod ktory dostajesz!
Tajgeer
Dziękuje wszystkim za pomoc i przepraszam za moje laickie błędy winksmiley.jpg Działa jak należy smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.