Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z poprawnym ID przy komentowaniu newsów...
nightmoon
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Witam, Panowie mam problem z poprawnym odesłaniem na forum, żeby można było komentować na nim newsa, każde ID przy opcji komentowania jest identyczne, zapewne jest to problem z pętlą ale nie mam za choinkę pojęcia jak to zrobić, kod wygląda następująco:

  1. $res = mysql_query("SELECT * FROM news ORDER BY added DESC LIMIT 5") or sqlerr(__FILE__, __LINE__);
  2.  
  3. if (mysql_num_rows($res) > 0) {
  4. print("<table width=100% border=1 cellspacing=0 cellpadding=10><tr><td align=center>\n");
  5.  
  6. while($array = mysql_fetch_array($res)) {
  7.  
  8. print("<table class='kratka' width=100% border=1 cellspacing=0 cellpadding=5><tr><td class='colhead' colspan='2'>" . gmdate("Y-m-d G:i:s",strtotime($array['added'])) . " - " . $array['title'] . "");
  9.  
  10.  
  11. $ros = mysql_query("SELECT id FROM topics WHERE forumid = 77 ORDER BY id DESC LIMIT 1") or sqlerr();
  12. while ($orr = mysql_fetch_assoc($ros)) {
  13. $topicid = $orr["id"];
  14. }
  15.  
  16. print(" <font class='small'>[<a class=altlink href='forums.php?action=viewtopic&topicid=$topicid'><b><u>Skomentuj</u></b></a>]</font>");
  17.  
  18. if (get_user_class() >= UC_MODERATOR) {
  19. print(" <font class='small'>[<a class=altlink href=news.php?action=edit&newsid=" . $array['id'] . "&returnto=" . urlencode($_SERVER['PHP_SELF']) . "><b><u>Edycja</u></b></a>]</font>");
  20. print(" <font class='small'>[<a class=altlink href=news.php?action=delete&newsid=" . $array['id'] . "&returnto=" . urlencode($_SERVER['PHP_SELF']) . "><b><u>Usuń</u></b></a>]</font></td></tr>");
  21. }
  22. print("<tr><td width='10%'><img src=" . htmlspecialchars($array["img"]) . "></td><td class='text' width='90%'>" . format_comment($array["body"],0) . "</td>");
  23.  
  24.  
  25. print("</tr></table><br>");
  26.  
  27. }
  28.  
  29. }


Jak zmienię zapytanie na:

  1. $ros = mysql_query("SELECT id FROM topics WHERE forumid = 77 ORDER BY id DESC LIMIT 2") or sqlerr();


Wtedy opcja [Skomentuj] przy obudwu postach zmienia wartość na poprzedni temat napisany w forumid = 77 np. 3030...

Jak dopisać tam pętle, żeby to działało?

Zdjęcie:

Go to the top of the page
+Quote Post
-lukasamd-
post
Post #2





Goście







Zauważ, że przy każdym przebiegu pętli zapytanie wygląda identycznie, więc MUSI pobrać taki sam id, i tu błędu nie ma smile.gif
Błąd jest w logice rozwiązania - skoro nie ma warunku, nie możesz w wewnątrz pętli pobierać czegoś takiego, trzeba zmodyfikowac pierwsze zapytanie:


  1. $res = mysql_query("SELECT n.*, t.id FROM news as n, topics as t WHERE t.forumid = 77 ORDER BY n.added DESC LIMIT 5") or sqlerr(__FILE__, __LINE__);


ew. robisz dwa zapytania:

  1. $res = mysql_query("SELECT * FROM news ORDER BY added DESC LIMIT 5") or sqlerr(__FILE__, __LINE__);
  2. $ros = mysql_query("SELECT id FROM topics WHERE forumid = 77 ORDER BY id DESC LIMIT 5") or sqlerr();


Pętlą pobierasz dane z $res, a w pętli z $ros:

  1. while($array = mysql_fetch_array($res)) {
  2. $orr = mysql_fetch_assoc($ros);
  3. $topicid = $orr["id"];
  4. <-- INNY KOD ->>
  5. }


Go to the top of the page
+Quote Post
nightmoon
post
Post #3





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Dziękuję za pomoc teraz dopiero w 100% zrozumiałem zasadę działania.

Całość ostatecznie wygląda tak i wszystko śmiga smile.gif

  1. $res = mysql_query("SELECT * FROM news ORDER BY added DESC LIMIT 3") or sqlerr(__FILE__, __LINE__);
  2. $ros = mysql_query("SELECT id FROM topics WHERE forumid = 77 ORDER BY id DESC LIMIT 3") or sqlerr();
  3.  
  4. if (mysql_num_rows($res) > 0) {
  5.  
  6. print("<table width=100% border=1 cellspacing=0 cellpadding=10><tr><td align=center>\n");
  7.  
  8. while($array = mysql_fetch_array($res)) {
  9.  
  10. print("<table class='kratka' width=100% border=1 cellspacing=0 cellpadding=5><tr><td class='colhead' colspan='2'>" . gmdate("Y-m-d G:i:s",strtotime($array['added'])) . " - " . $array['title'] . "");
  11.  
  12. $orr = mysql_fetch_assoc($ros);
  13. $topicid = $orr["id"];
  14.  
  15. print(" <font class='small'>[<a class=altlink href='forums.php?action=viewtopic&topicid=$topicid'><b><u>Skomentuj</u></b></a>]</font>");
  16.  
  17. if (get_user_class() >= UC_MODERATOR) {
  18. print(" <font class='small'>[<a class=altlink href=news.php?action=edit&newsid=" . $array['id'] . "&returnto=" . urlencode($_SERVER['PHP_SELF']) . "><b><u>Edycja</u></b></a>]</font>");
  19. print(" <font class='small'>[<a class=altlink href=news.php?action=delete&newsid=" . $array['id'] . "&returnto=" . urlencode($_SERVER['PHP_SELF']) . "><b><u>Usuń</u></b></a>]</font></td></tr>");
  20. }
  21. print("<tr><td width='10%'><img src=" . htmlspecialchars($array["img"]) . "></td><td class='text' width='90%'>" . format_comment($array["body"],0) . "</td>");
  22.  
  23.  
  24. print("</tr></table><br>");
  25.  
  26. }
  27.  
  28. }



Chociaż jeśli dało by radę wytłumaczyć zawartość tego wywołania a raczej zasadę jego działania to był bym również wdzięczny, ponieważ nie mogę go rozszyfrować...

Kod
   1.
      $res = mysql_query("SELECT n.*, t.id FROM news as n, topics as t WHERE t.forumid = 77 ORDER BY n.added DESC LIMIT 5") or sqlerr(__FILE__, __LINE__);


Co to robie pobierz n.*?, t.id forum nes as n, to niby rozumiem ale dalej to samo t t.forumid no nie bardzo :/

Ten post edytował nightmoon 30.01.2010, 15:29:29
Go to the top of the page
+Quote Post
-lukasamd-
post
Post #4





Goście







Aliasy, aby mysql wiedział o jakie pola w jakich tabelach Ci chodzi, no i żeby skrócić zapis, bo można pisać i tak:

Kod
$res = mysql_query("SELECT news.*, topics.id FROM news, topics WHERE topics.forumid = 77 ORDER BY news.added DESC LIMIT 5") or sqlerr(__FILE__, __LINE__);


Ten post edytował lukasamd 30.01.2010, 16:35:50
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 03:59