Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyswietlanie komentarzy
Forum PHP.pl > Forum > Gotowe rozwiązania
SoulRipper
Witam

Majac ostatnio nieco wolnego czasu postanowilem zabrac sie za swoj system newsow oparty na mysql.Wszystko przebiegalo bez problemu do momentu kiedy musialem napisac fragment kodu odpowiedzialny za wyswietlanie komentarzy do newsow.

tabela w ktorej sa zapisywane rekordy z komentarzami wyglada tak:

| ID | ID_NEWSA | AUTOR | TEXT | MAIL | DATA |
| | | | | | |

problem polega na tym ze gdy probuje pobrac komentarze i wyswietlic je,
wyswietlanu jest tylko pierwszy komentarz(z 4 roznych komentarzy o tym samym "id_newsa") 4-krotnie

zapytanie odbywa sie przez :

  1. <?php
  2.  
  3. $query = mysql_query(&#092;" SELECT * FROM comment where id_newsa = '$id_newsa'\");
  4.  
  5. ?>


nastepnie komentarze sa wyswietlane za pomoca funkcji: mysql_fetch_array().

Mam nadzieje, ze wystarczajaco objasnilem problem, i ze bedziecie w stanie mi pomoc.

Z gory dzieki
Spirit86
musisz użyć pętli, aby wypisać wszystkie komentarze, np. while:

  1. <?php
  2.  
  3. while($re = mysql_fetch_array($query)){
  4. bla bla bla
  5. }
  6.  
  7. ?>


pisałem z głowy, bez testowania, więc może nie dizałać smile.gif
Ive
w petli stosujesz ten mysql_fetch_array() ? wklej caly kod odpowiedzialny za wyswietlanie bo nie do konca mozna zrozumiec ;]
Aztech
Po pierwsze:

  1. <?php
  2.  
  3. $query = mysql_query(&#092;" SELECT * FROM comment where id_newsa = \".$id_newsa);
  4.  
  5. ?>


plus to co napisał Spirit

np tak żeby było jasno biggrin.gif:

  1. <?php
  2. $i = 0;
  3. while($re = mysql_fetch_array($query)){
  4. $i++;
  5.  echo $i.&#092;" jakis tekst\".$re[\"Autor\"].\" - \".$re[\"tekst\"]
  6. }
  7.  
  8. ?>
SoulRipper
  1. <?php
  2.  
  3.  
  4. include &#092;"../../code.php\";
  5. include &#092;"conf.php\";
  6. con();
  7.  
  8. $id_newsa = $_GET['id'];
  9. $query = mysql_query(&#092;"select * from comment where id_newsa = '$id_newsa'\");
  10. $count = mysql_num_rows($query);
  11. $start = 0 ;
  12.  
  13. while($start<$count)
  14. {
  15. $start++;
  16.  $query1 = mysql_query(&#092;"select * from comment where id_newsa='$id_newsa'\");
  17.  $result = mysql_fetch_array($query1);
  18.  echo 
  19.  
  20. &#092;"<table width='400' border='1' align=center>
  21. <tr><td colspan=3>&nbsp;&nbsp;&nbsp;&nbsp;$result[4]</td></tr>
  22. <tr>
  23. <td height=50 width=100>$result[2]</td>
  24. <td width=100>$result[3]</td>
  25. <td width=200>$result[5]</td>
  26. </tr>
  27.  <BR>
  28.  
  29. </table>&#092;" ;
  30.  
  31. }
  32.  
  33.  
  34. /* dodanie komenta */ 
  35. echo &#092;"
  36. <form action='parse.php' method='post'>
  37. <input type='hidden' name='id_newsa' value='$id_newsa'>
  38. <table cellpadding='0' cellspacing='0' border='0' align='center' width='600' height='100'>
  39. <tr>
  40. <td height='50' align='right'>
  41. Autor:<BR>
  42. E-mail:
  43. </td>
  44. <td>
  45. <input type='text' name='autor' size='8'><BR>
  46. <input type='text' name='mail' size='8'>
  47. </td>
  48. </tr>
  49. <tr>
  50. <td valign='top' align='right'>
  51. Tresc:
  52. </td>
  53. <td>
  54. <textarea rows='5' cols='20' name='comment' ></textarea><BR>
  55. </td>
  56. </tr>
  57. <tr>
  58. <td>
  59. </td>
  60. <td height='50'>
  61. <input type='submit' name='dodaj' value='Dodaj'>
  62. </td>
  63.  
  64. </tr>
  65. </table>
  66. </form>
  67. &#092;";
  68.  
  69. ?>


Prawdopodobnie przyczepicie sie do tego, wykonalem 2 identyczne zapytania.
1 query ma na celu pobranie ilosci rekordow z komentarzami do konkretnego newsa (id_newsa) poprzez mysql_num_rows. Pozniej zmienna zawierajaca licczbe wierszy ustala ile razy ma byc wykonana petla w ktorej jest zawarty kod wyswietlania poszczegolnych komentarzy.

Wprawdzie mam pomysl na rozwanie tego problemu poprzez dodanie jeszcze jeszcze jednej kolumny w tabeli z komentarzami do ktorej zapisywane bylyby
id komenta wzgledem konkretnego newsa(czyli jak dodano 2 komentarze to id_commenta wynosilby 2 ).Jednak nie chce tego robic bo to nie bylby sposob na nauke sql`a.Pewnie da sie to latwo i przyjemnie srobic niekoniecznie korzystajac z mysql_fetch_array();
slepy
Nie rozumiem czego zamiast tego:
  1. <?php
  2.  
  3.  
  4. while($start<$count)
  5. {
  6. $start++;
  7. $query1 = mysql_query(&#092;"select * from comment where id_newsa='$id_newsa'\");
  8. $result = mysql_fetch_array($query1);
  9.  
  10. &#092;"<table width='400' border='1' align=center>
  11. <tr><td colspan=3>&nbsp;&nbsp;&nbsp;&nbsp;$result[4]</td></tr>
  12. <tr>
  13. <td height=50 width=100>$result[2]</td>
  14. <td width=100>$result[3]</td>
  15. <td width=200>$result[5]</td>
  16. </tr>
  17.  <BR>
  18.  
  19. </table>&#092;" ;
  20.  
  21. }
  22.  
  23. ?>

NIe zrobisz tak:
  1. <?php
  2.  
  3. while($result = mysql_fetch_array($query))
  4. {
  5.  
  6. &#092;"<table width='400' border='1' align=center>
  7. <tr><td colspan=3>&nbsp;&nbsp;&nbsp;&nbsp;$result[4]</td></tr>
  8. <tr>
  9. <td height=50 width=100>$result[2]</td>
  10. <td width=100>$result[3]</td>
  11. <td width=200>$result[5]</td>
  12. </tr>
  13.  <BR>
  14.  
  15. </table>&#092;" ;
  16. }
  17.  
  18. ?>


Jedna petla żadne zmiene $start ani $cout nie są CI potrzebne..
SoulRipper
no dobra to jest raczej rozwiazanie estetyczne nijak wplywajace na moj problem.
Mimo to dzieki za rade
Ive
estetyczne?! człowieku to znacznie poprawi predkosc wyswietlania danych ... przeciez wykonywanie np. 30x jednego zapytania zajmie wiecej czasu niz zastosowanie tego zapytania 1x a potem
while($cz=mysql_fetch_array($query))
tylko
Spirit86
Cytat(Ive @ 2004-12-02 14:25:55)
estetyczne?! człowieku to znacznie poprawi predkosc wyswietlania danych ... przeciez wykonywanie np. 30x jednego zapytania zajmie wiecej czasu niz zastosowanie tego zapytania 1x a potem
while($cz=mysql_fetch_array($query))
tylko

święta prawda, wyobraź sobie, że serwis dobrze prosperuje, użytkownicy dużo komentują, piszą po 300 komentarzy (marzenia rolleyes.gif ) do jednego newsa. I załóżmy, że stronę z tymi komentarzami ogląda 100 osób. teraz pomnóż sobie 300 zapytań * 100 użytkowników = zapchanie serwera. A tak masz tylko ( rolleyes.gif ) 100 zapytań.
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-2024 Invision Power Services, Inc.