Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Błąd na prostym forum w php
Forum PHP.pl > Forum > Przedszkole
mozart2008
Witam.
Mam strasznie głupi błąd dotyczący małego forum które piszę.
Otóż moje forum wyświetla wszystkie posty z bazy danych MySQL.
Można dodać też nowy post.
Czyli dodawanie i włączanie postów działa ALE:
kiedy skasuję obojętnie jaki post.... wtedy kiedy dodaje nowy.. noto w liście postów są tylko 2 przecinki

tutoriale.php
  1. <center>FORUM - TUTORIALE</center>
  2. <?php
  3. @mysql_connect('tajne','tajne','tajne')
  4. or die('Nieudane połączenie');
  5. @mysql_select_db('tajne')
  6. or die('Nieudane wybranie bazy');
  7. if(isset($_SESSION['zalogowany'])) {
  8. ?>
  9. <div id="naglowek1">
  10. <br/>
  11. <b>OPCJE:</b>
  12. <br/><br/>
  13. </div>
  14. <hr/>
  15. <form method='POST' action='index.php?url=tutoriale'>
  16. <input type="submit" name="odswiez" class="wyslij" value="Odśwież/Powrót" />
  17. <input type="submit" name="nowy_watek" class="wyslij" value="Nowy wątek" />
  18. </form>
  19. <hr/>
  20. <br/>
  21. <center>
  22. <div id="naglowek1">
  23. <br/>
  24. <b>WSZYSTKIE POSTY:</b>
  25. </div>
  26. </center>
  27. <?php
  28. if (isset($_POST['odswiez'])) {
  29. header ('Location:index.php?url=tutoriale') ;
  30. }
  31. if (isset($_POST['nowy_watek'])) {
  32. header ('Location:index.php?url=nowywatek') ;
  33. }
  34. ?>
  35. <hr/>
  36. <div style="width: 1000px; height: 700px; overflow: scroll;">
  37. <?php
  38. // Wyświetlanie forum dyskusyjnego. Jeżeli jest podany numer postu,
  39. // wyświetla się on i jego odpowiedzi. Jeżeli nie - całe forum.
  40. function wypiszforum ($nr) {
  41. // Funkcja rekurencyjnie wyświetla wszystkie rekordy, będące poniżej
  42. // w hierarchii postów (czyli odpowiedzi, odpowiedzi na odpowiedzi,
  43. // itd...
  44. global $fref; global $fdata; global $fosoba; global $ftytul;
  45.  
  46. $str = '';
  47. for ($i=count($fref); $i>=1; $i--) {
  48. if ($fref[$i] == $nr) {
  49. $str .= "<li><a href=\"http://www.alteringphotos.cba.pl/index.php?url=tutoriale&nr=$i\">$ftytul[$i]</a>, ".
  50. "<i>$fosoba[$i], $fdata[$i]</i>\n";
  51. $str .= wypiszforum ($i);
  52. $str .= "</li>";
  53. }
  54. }
  55. if($str != '')
  56. return "<ul>$str</ul>";
  57. else
  58. return $str;
  59. }
  60. if(isSet($_GET['nr'])) $nr = $_GET['nr'];
  61. else $nr = '';
  62. if ($nr>0) { // chcesz wyświetlić post
  63. $wynik = mysql_query ("SELECT osoba, tytul, tresc, data ".
  64. "FROM forumdyskusyjne WHERE nr=$nr");
  65. if ($rekord = mysql_fetch_array ($wynik)) { // i ten post jest
  66. $tresc = $rekord[2]; $tytul = $rekord[1];
  67. echo ("<h3>$rekord[1]</h3>");
  68. echo ("<p>wysłany przez <b>$rekord[0]</b>, <b>$rekord[3]</b>:");
  69. echo ("</p><p>$rekord[2]</p><hr />");
  70. echo emotki("<a href=\"http://www.alteringphotos.cba.pl/index.php?url=nowywatek&ref=$nr\">Wylij odpowiedź
  71. </a><hr />");
  72. if (isset($_POST['usunwatek'])) {
  73.  
  74. $zapytanie = "DELETE FROM forumdyskusyjne WHERE nr = '$nr' ";
  75. $idzapytania = mysql_query($zapytanie);
  76.  
  77.  
  78. ?>
  79.  
  80. <script type="text/javascript">
  81.  
  82. alert ("Usunąłeś swojego posta!") ;
  83.  
  84. window.location ="http://www.alteringphotos.cba.pl/index.php?url=tutoriale";
  85.  
  86. </script>
  87. <?php
  88. }
  89. ?>
  90. <form method='POST' action='?url=tutoriale&nr=<?php echo $nr; ?>'>
  91. <input type="submit" name="usunwatek" class="wyslij" value="Usuń post" onclick="if (!confirm('Czy na pewno chcesz usunąć swojego posta?')) return false"/>
  92. </form>
  93. <?php
  94. } else { $nr = 0; }
  95. } else { $nr = 0; }
  96. // odczyt danych, które będą wykorzystane w funkcji rekurencyjnej
  97. $wynik = mysql_query ("SELECT nr, osoba, tytul, data, ref ".
  98. "FROM forumdyskusyjne");
  99. while ($rekord = mysql_fetch_array ($wynik)) {
  100. $fref[$rekord[0]] = $rekord[4];
  101. $fdata[$rekord[0]] = $rekord[3];
  102. $ftytul[$rekord[0]] = $rekord[2];
  103. $fosoba[$rekord[0]] = $rekord[1];
  104. }
  105. // wypisanie postów potomnych - rekurencja
  106. print wypiszforum ($nr);
  107. ?>
  108. </div>
  109. <?php
  110. }else{
  111. ?>
  112. <br/><br/><br/>
  113. <center>
  114. Musisz być zalogowany aby oglądać tę stronę!!
  115. </center>
  116. <br/><br/><br/><br/><br/>
  117. <br/><br/><br/><br/><br/>
  118. <?php
  119. }
  120. ?>
  121. <br/>

nowywatek.php
  1. <div id="naglowek1">
  2. <br/>
  3. <b>OPCJE:</b>
  4. <br/><br/>
  5. </div>
  6. <hr/>
  7. <form method='POST' action='http://www.alteringphotos.cba.pl/index.php?url=nowywatek'>
  8. <input type="submit" name="powroot" class="wyslij" value="Powrót" />
  9. </form>
  10. <hr/>
  11. <?php
  12.  
  13. @mysql_connect('tajne','tajne','tajne')
  14. or die('Nieudane połączenie');
  15. @mysql_select_db('tajne')
  16. or die('Nieudane wybranie bazy');
  17. if (isset($_POST['powroot'])) {
  18. header ('Location:index.php?url=tutoriale') ;
  19. }
  20. if (isSet($_POST['co']) && $_POST['co'] == 'wyslij') {
  21.  
  22. $ty = addslashes(htmlspecialchars ($_POST['tytul']));
  23. $os = addslashes(htmlspecialchars ($_SESSION['login']));
  24. $tr = addslashes(nl2br(htmlspecialchars ($_POST['tresc'])));
  25. if ($ty && $os && $tr) { // dopisujesz!
  26. $query = ("INSERT INTO forumdyskusyjne (osoba, tytul, tresc, ".
  27. "data, ref) valueS ('$os', '$ty', '$tr', now(),
  28. '".$_POST['ref']."')");
  29. mysql_query ($query);
  30. print 'Wpis został dokonany.';
  31. } else {
  32. $tresc = $_POST['tresc'];
  33. $tytul = $_POST['tytul'];
  34. $osoba = $_POST['osoba'];
  35. }
  36. } elseif (isSet($_GET['ref']) && $_GET['ref']>0) {echo "aaaa";
  37.  
  38. $wynik = mysql_query ("SELECT osoba, tytul, tresc, data ".
  39. "FROM forumdyskusyjne WHERE nr=
  40. ".$_GET['ref']);
  41. if ($wynik && $rekord = mysql_fetch_assoc ($wynik)) {
  42.  
  43. $tresc = $rekord['tresc']; $tytul = $rekord['tytul'];
  44. $tresc = str_replace ("<br />", "", $tresc);
  45. $tresc = str_replace ("\n", "\n: ", $tresc); $tresc =
  46. ": ".$tresc;
  47. if (!(ereg ("^RE: ", $tytul))) { // dopisujesz RE,
  48. // o ile nie ma
  49. $tytul = "Re: ".$tytul;
  50. }
  51. print "<h3>Odpowiedz na post: ".$rekord['tytul'].
  52. "</h3><p>Wysłany przez ";
  53. print "<b>".$rekord['osoba']."</b>,
  54. <b>".$rekord['data']."</b></p>".$rekord['tresc']."<br /><hr />";
  55. }
  56. }
  57. // Wyświetlenie formularza
  58. if(!isSet($osoba)) $osoba = '';
  59. if(!isSet($tytul)) $tytul = '';
  60. if(!isSet($tresc)) $tresc = '';
  61. if(isSet($_GET['ref'])) $ref = $_GET['ref']; else $ref = 0;
  62. print "<h3>Poślij post:</h3>";
  63. print "<center>" ;
  64. print "<div id=\"maina\">";
  65. print "<form method='post' action='http://www.alteringphotos.cba.pl/index.php?url=nowywatek'>";
  66. print "<input type=\"image\" src=\"grafika/usmiech.gif\" onclick=\"tresc.value += ';)';\">" ;
  67. print "<input type=\"image\" src=\"grafika/beczy.gif\" onclick=\"tresc.value += '[beczy]';\">" ;
  68. print "<input type=\"image\" src=\"grafika/bezradny.gif\" onclick=\"tresc.value += '[bezradny]';\">" ;
  69. print "<input type=\"image\" src=\"grafika/eee.gif\" onclick=\"tresc.value += ';/';\">" ;
  70. print "<input type=\"image\" src=\"grafika/email.png\" onclick=\"tresc.value += '[email]';\">" ;
  71. print "<input type=\"image\" src=\"grafika/glupek.gif\" onclick=\"tresc.value += '[glupek]';\">" ;
  72. print "<input type=\"image\" src=\"grafika/hehe.gif\" onclick=\"tresc.value += ';d';\">" ;
  73. print "<input type=\"image\" src=\"grafika/yyy.gif\" onclick=\"tresc.value += ';|';\">" ;
  74. print "<input type=\"image\" src=\"grafika/hura.gif\" onclick=\"tresc.value += '[hura]';\">" ;
  75. print "<input type=\"image\" src=\"grafika/jezyk.gif\" onclick=\"tresc.value += ';p';\">" ;
  76. print "<input type=\"image\" src=\"grafika/mutny.gif\" onclick=\"tresc.value += ':(';\">" ;
  77. print "<input type=\"image\" src=\"grafika/smutny.gif\" onclick=\"tresc.value += '[smutny]';\">" ;
  78. print "<input type=\"image\" src=\"grafika/prosi.gif\" onclick=\"tresc.value += '[prosi]';\">" ;
  79. print "<input type=\"image\" src=\"grafika/zly.gif\" onclick=\"tresc.value += '[zly]';\">" ;
  80. print "</div>";
  81. print "<div id=\"maina\">";
  82. print "<input class=\"wyslij\" type=\"hidden\" name=\"co\" value=\"";
  83. print "wyslij\" /><input class=\"wyslij\" type=\"hidden\" name=\"ref\"
  84. value=\".$ref.\" />";
  85. print "<b>Użytkownik:</b>" ."<div id=\"uzytkowniki\">" . $_SESSION['login'] . "</div><br/>" ;
  86. print "<br /><b>Tytuł postu:</b><br/>";
  87. print "<input class=\"wyslij\" type=\"text\" name=\"tytul\" value=\"$tytul\" ";
  88. print "size='50' /><br /><br/><b>Treść:</b><center><textarea name=\"tresc\" ";
  89. print "rows='10' id=\"text\"cols='130'>$tresc</textarea><br /><br/>\n";
  90. print "<input class=\"wyslij\" type=\"submit\" value=\"Wyślij\" />";
  91. print "</center>" ;
  92. print "</form>";
  93. print "</div>";
  94. print "</center>" ;
  95. ?>
  96. <br/>
  97. <br/><br/>


Mam jeszcze jeden błąd.
KIedy dodaję nowego posta noto jak wpisze temat, potem piszę treści chcę wkleić sobie emotikonkę, klikam na któryś obrazek, imotikonka sie dodaje ale jednocześnie wysyła się formularz.

PYTANIA:
1.Jak zrobić żeby po dodaniu emotikonki formularz sie nie wysyłał?
2.CO zrobić żeby po skasowaniu jakiegoś postu można było dodać nowy?

Z emotikonkami sobie poradziłem.
Na końcu wpisałem return false;
Ale nadal zostaje jeden błąd,dotyczący tych przecinków kiedy skasuje sie post i chce sie dodać nowy.
nospor
Rety... ale sieczka. Dałeś tyle "smieci" tutaj że się nawet nie chce przykładać do analizy tego.
Czy naprawdę ta masa kodu jest nam potrzebna? Czy naprawdę musisz na dwie strony dawać kod, jak np. to:
print "<input type=\"image\" src=\"grafika/usmiech.gif\" onclick=\"tresc.value += ';)';\">" ;
jak np. to:
<b>OPCJE:</b>
<br/><br/>

I inne tego typu "smieci", ktore tylko zaciemniają kod?
Chcesz by ci pomoc, to wysil się trochę i przygotuj czysty kod bez masy smieci.

Zanim przygotujesz następny post, zastosuj się proszę do podanych tu porad:
Temat: Jak poprawnie zada pytanie

Podaj też strukturę swojej bazy.
mozart2008
Kod:

plik tutoriale.php

  1. @mysql_connect('tajne','tajne','tajne')
  2. or die('Nieudane połączenie');
  3. @mysql_select_db('tajne')
  4. or die('Nieudane wybranie bazy');
  5.  
  6.  
  7. function wypiszforum ($nr) { //funkcja wyswietlania listy wątków
  8. global $fref; global $fdata; global $fosoba; global $ftytul;
  9. $str = '';
  10. for ($i=count($fref); $i>=1; $i--) {
  11. if ($fref[$i] == $nr) {
  12. $str .= "<li><a href=\"http://www.alteringphotos.cba.pl/index.php?url=tutoriale&nr=$i\">$ftytul[$i]</a>, ".
  13. "<i>$fosoba[$i], $fdata[$i]</i>\n";
  14. $str .= wypiszforum ($i);
  15. $str .= "</li>";
  16. }
  17. }
  18. if($str != '')
  19. return "<ul>$str</ul>";
  20. else
  21. return $str;
  22. }
  23.  
  24. if(isSet($_GET['nr'])) $nr = $_GET['nr']; // wyswietlanie wybranego wątku
  25. else $nr = '';
  26. if ($nr>0) {
  27. $wynik = mysql_query ("SELECT osoba, tytul, tresc, data ".
  28. "FROM forumdyskusyjne WHERE nr=$nr");
  29. if ($rekord = mysql_fetch_array ($wynik)) { // i ten post jest
  30. $tresc = $rekord[2]; $tytul = $rekord[1];
  31. echo ("<h3>$rekord[1]</h3>");
  32. echo ("<p>wysłany przez <b>$rekord[0]</b>, <b>$rekord[3]</b>:");
  33. echo ("</p><p>$rekord[2]</p><hr />");
  34. echo emotki("<a href=\"http://www.alteringphotos.cba.pl/index.php?url=nowywatek&ref=$nr\">Wylij odpowiedź
  35. </a><hr />");
  36.  
  37. if (isset($_POST['usunwatek'])) {//usuwanie wątku na którym się jest
  38. $zapytanie = "DELETE FROM forumdyskusyjne WHERE nr = '$nr' ";
  39. $idzapytania = mysql_query($zapytanie);
  40. } else { $nr = 0; }
  41. } else { $nr = 0; }
  42. // odczyt danych, które będą wykorzystane w funkcji rekurencyjnej
  43. $wynik = mysql_query ("SELECT nr, osoba, tytul, data, ref ".
  44. "FROM forumdyskusyjne");
  45. while ($rekord = mysql_fetch_array ($wynik)) {
  46. $fref[$rekord[0]] = $rekord[4];
  47. $fdata[$rekord[0]] = $rekord[3];
  48. $ftytul[$rekord[0]] = $rekord[2];
  49. $fosoba[$rekord[0]] = $rekord[1];
  50. }
  51.  
  52. print wypiszforum ($nr);//wyswietlanie listy wątków


PYTANIE:
1.CO zrobić żeby po skasowaniu jakiegoś postu można było dodać nowy,który by nie był wyświetlany w liście wątków tak: ,, ?
nospor
1) Prosiłem byś podał strukturę bazy
2) Prosiłem byś zapoznał się z tematem "Jak zadać pytanie"
3) Prosiłem byś usunał "smieci". Miales to zrobić inteligentnie a nie na chybił trafił. W tej chwili ten kod to jeden wielki PARSE ERROR. Pomijam już fakt, że pominąłeś kluczowe kody.
4) Pytasz już o to tu:
Temat: Usuwanie watkow na forum w PHP
Jeden temat o tym samym wystarczy

5) Jak się zapewne domyślasz - zamykam
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.