Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql]Błąd w zapytaniu?!
Forum PHP.pl > Forum > Przedszkole
henio
  1. <?php
  2. include("admin/funkcje.php");
  3. include("admin/baza.php");
  4. naglowek1("Strona główna");
  5. @$data = date("Y-m-d, H:i:s");
  6. strona();
  7. echo "<div id='zawartosc'>n";
  8. if(@$_GET['id_news'])
  9. {
  10. @$autor_komentarz = @$_POST['autor_komentarz'];
  11. @$tresc_komentarza = @$_POST['tresc_komentarza'];
  12. @$data_komentarza = @$_POST['data_komentarza'];
  13. @$id_news = @$_POST['id_news'];
  14.  
  15. if($autor_komentarz && $tresc_komentarza && $data_komentarza && $id_news)
  16. {
  17. $zapytanie = "INSERT INTO komenterze (autor_komentarz, tresc_komentarza, data_komentarza, id_news) VALUES ('$autor_komentarz', '$tresc_komentarza', '$data_komentarza', '$id_news')";
  18. $wynik1 = mysqli_query($mysql, $zapytanie) or die('zapytanie: '.$zapytanie.'---blad:'.mysqli_error($mysql));
  19. echo "Komentarz został dodany!n";
  20. }
  21. $wynik = mysqli_query($mysql, "SELECT * FROM news WHERE id_news = ".$_GET['id_news']."");
  22. echo "<table align='center'>n";
  23. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  24. {
  25. echo "<tr><td colspan='2'>".$rekord['tytul']."</td></tr>n";
  26. if($rekord['link_obraz'])
  27. {
  28. echo "<tr><td colspan='2'><img src='".$rekord['link_obraz']."'><b>".nl2br($rekord['lid'])."</b><br /><br />";
  29. }
  30. else
  31. {
  32. echo "<tr><td colspan='2'><b>".nl2br($rekord['lid'])."</b><br /><br />";
  33. }
  34. echo "".nl2br($rekord['tresc_krotka'])."";
  35. echo "".nl2br($rekord['tresc_dluga'])."</td></tr>n";
  36. echo "<tr><td>Autor: <b>".$rekord['autor']."</b></td><td>Data dodania: <b>".$rekord['data']."</b></td></tr>n";
  37. echo "<tr><td>Źródło: <b>".$rekord['zrodlo']."</b></td><td>Komentarzy: <b>0</b></td></tr>n";
  38. }
  39. echo "</table>n";
  40.  
  41. $wynik = mysqli_query($mysql, "SELECT * FROM komenterze WHERE id_news = ".$_GET['id_news']." ORDER BY data_komentarza DESC");
  42. echo "<table align='center'><tr><th align='center' colspan='2'>Komentarze</th></tr>n";
  43. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  44. {
  45. echo "<tr><td coslpan='2'>".nl2br($rekord['tresc_komentarza'])."</td></tr>n";
  46. echo "<tr><td>Autor: <b>".$rekord['autor_komentarz']."</b></td><td>Data dodania: <b>".$rekord['data_komentarza']."</b></td></tr>n";
  47. }
  48. echo "<br /><br />n";
  49. echo "<form action='index.php?id_news=".$_GET['id_news']."' method='POST'>n";
  50. echo "<table>n";
  51. echo "<tr><th colspan='2'>Dodaj komentarz</th>n";
  52. echo "<tr><td>n";
  53. echo "Autor: </td><td align='center'><input type='text' name='autor_komentarz' maxlength='25' style='width: 250px'> Maks. 25 znakówn";
  54. echo "</td></tr>n";
  55. echo "<tr><td>n";
  56. echo "Treść : </td><td><textarea name='tresc_komentarza' cols='55' rows='7'></textarea>n";
  57. echo "</td></tr>n";
  58. echo "</table>n";
  59. echo "<br><center><input type='hidden' name='id_news' value='".$_GET['id_news']."'><input type='hidden' name='data_komentarza' value='".$data."'><input type='submit' name='czy' value='Dodaj komentarz'></center>n";
  60. echo "</form>n";
  61.  
  62.  
  63. }
  64. else
  65. {
  66. $wynik = mysqli_query($mysql, "SELECT * FROM news WHERE typ = 'Wydarzenie' ORDER BY data DESC LIMIT 0,1") or die;
  67. echo "<table align='center'><tr><th align='center' colspan='2'>Wydarzenie</th></tr>n";
  68. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  69. {
  70. echo "<tr><td colspan='2'>".$rekord['tytul']."</td></tr>n";
  71. if($rekord['link_obraz'])
  72. {
  73. echo "<tr><td colspan='2'><img src='".$rekord['link_obraz']."'><b>".nl2br($rekord['lid'])."</b><br /><br />";
  74. }
  75. else
  76. {
  77. echo "<tr><td colspan='2'><b>".nl2br($rekord['lid'])."</b><br /><br />";
  78. }
  79. echo "".nl2br($rekord['tresc_krotka'])." <a href='index.php?id_news=".$rekord['id_news']."'>Czytaj więcej</a></td></tr>n";
  80. echo "<tr><td>Autor: <b>".$rekord['autor']."</b></td><td>Data dodania: <b>".$rekord['data']."</b></td></tr>n";
  81. $wynik = mysqli_query($mysql, "SELECT * FROM komenterze WHERE id_news = ".$rekord['id_news']."");
  82. $ile = mysqli_num_rows($wynik);
  83. echo "<tr><td>Źródło: <b>".$rekord['zrodlo']."</b></td><td>Komentarzy: <b>".$ile."</b></td></tr>n";
  84. echo "</table>n";
  85. }
  86.  
  87. echo "<table align='center'><tr><th align='center' colspan='4'>Pozostałe newsy</th></tr>n";
  88. echo "<tr><td colspan='2'>n";
  89. $wynik = mysqli_query($mysql, "SELECT * FROM news WHERE typ !='Wydarzenie' ORDER BY data DESC LIMIT 0,7");
  90. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  91. {
  92. echo "<table width='350'>n";
  93. echo "<tr><td colspan='2'>".$rekord['tytul']."</td></tr>n";
  94. if($rekord['link_obraz'])
  95. {
  96. echo "<tr><td colspan='2'><img src='".$rekord['link_obraz']."'><b>".nl2br($rekord['lid'])."</b><br /><a href='index.php?id_news=".$rekord['id_news']."'>Więcej</a></td></tr>n";
  97. }
  98. else
  99. {
  100. echo "<tr><td colspan='2'><b>".nl2br($rekord['lid'])."</b><br /><a href='index.php?id_news=".$rekord['id_news']."'>Więcej</a></td></tr>n";
  101. }
  102. echo "<tr><td colspan='2'>Data dodania: ".$rekord['data']."</td></tr>n";
  103. echo "</table>n";
  104. }
  105. echo "</td><td colspan='2'>n";
  106.  
  107. $wynik = mysqli_query($mysql, "SELECT * FROM news WHERE typ !='Wydarzenie' ORDER BY data DESC LIMIT 7,7");
  108. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  109. {
  110. echo "<table width='350'>n";
  111. echo "<tr><td colspan='2'>".$rekord['tytul']."</td></tr>n";
  112. if($rekord['link_obraz'])
  113. {
  114. echo "<tr><td colspan='2'><img src='".$rekord['link_obraz']."'><b>".nl2br($rekord['lid'])."</b><br /><a href='index.php?id_news=".$rekord['id_news']."'>Więcej</a></td></tr>n";
  115. }
  116. else
  117. {
  118. echo "<tr><td colspan='2'><b>".nl2br($rekord['lid'])."</b><br /><a href='index.php?id_news=".$rekord['id_news']."'>Więcej</a></td></tr>n";
  119. }
  120. echo "<tr><td colspan='2'>Data dodania: ".$rekord['data']."</td></tr>n";
  121. echo "</table>n";
  122. }
  123. echo "</td></tr>n";
  124. echo "<tr><th align='center' colspan='4'>Archiwum newsów</th></tr>n";
  125. echo "<tr><td colspan='2'>n";
  126.  
  127. $wynik = mysqli_query($mysql, "SELECT * FROM news WHERE typ !='Wydarzenie' ORDER BY data DESC LIMIT 14,10");
  128. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  129. {
  130. echo "<table width='350'>n";
  131. echo "<tr><td colspan='2'><a href='index.php?id_news=".$rekord['id_news']."'>".$rekord['tytul']."</a></td></tr>n";
  132.  
  133. echo "<tr><td colspan='2'>Data dodania: ".$rekord['data']."</td></tr>n";
  134. echo "</table>n";
  135. }
  136. echo "</td><td colspan='2'>n";
  137.  
  138. $wynik = mysqli_query($mysql, "SELECT * FROM news WHERE typ !='Wydarzenie' ORDER BY data DESC LIMIT 24,10");
  139. while($wynik && $rekord = mysqli_fetch_assoc($wynik))
  140. {
  141. echo "<table width='350'>n";
  142. echo "<tr><td colspan='2'><a href='index.php?id_news=".$rekord['id_news']."'>".$rekord['tytul']."</a></td></tr>n";
  143.  
  144. echo "<tr><td colspan='2'>Data dodania: ".$rekord['data']."</td></tr>n";
  145. echo "</table>n";
  146. }
  147. echo "</td></tr>n";
  148. echo "<tr><th align='center' colspan='4'>Więcej newsów w archiwum...</th></tr>n";
  149. echo "</table>";
  150. }
  151. echo "</div>n";
  152.  
  153. ?>


Wszystko działało dobrze, aż nagle zamiast newsów zaczęło się wyświetlać.
Notice: Undefined index: tytul in C:\Program Files\Apache Group\Apache2\htdocs\stronka\index.php on line 71
Notice: Undefined link_obraz: tytul in C:\Program Files\Apache Group\Apache2\htdocs\stronka\index.php on line 72
Notice: Undefined lid: tytul in C:\Program Files\Apache Group\Apache2\htdocs\stronka\index.php on line 78

To się powtarza tyle razy ile jest zapętlowane. Do tego cały czas się przywiesza jak włączam tą stronkę. I muszę brać Alt Ctrl Delete. Sprawdzalem w tabeli news na 100% są kolumny tytul, link_obraz, lid

Nie mam pojęcia dlaczego tak jest



Gdy usunąłem komentarz z newsa określanego jako Wydarzenie wszystko znowu dobrze się wyświetla. Nie wiem czemu
Zyryx
spróbuj zamiast
Kod
while($wynik && $rekord = mysqli_fetch_assoc($wynik))
w linii 69 dać takie coś
Kod
while($rekord = mysqli_fetch_assoc($wynik))
henio
Cytat(Zyryx @ 4.08.2007, 09:21:38 ) *
spróbuj zamiast
Kod
while($wynik && $rekord = mysqli_fetch_assoc($wynik))
w linii 69 dać takie coś
Kod
while($rekord = mysqli_fetch_assoc($wynik))

Nie pomogło
drPayton
A we wszystkich pozostałych liniach gdzie to wyrażenie występuje?
henio
Nie moge podać, ponieważ za każdym razem mi się zawiesza jak to włączam
drPayton
Ale zmieniłeś tak jak pisał @Zyryx we wszystkich a nie tylko w 69 linii? Bo tutaj z tego co piszesz wyraźnie następuje nieskończona pętla...
henio
Bez zmian...

  1. <?php
  2. echo "<tr><td>Autor: <b>".@$rekord['autor']."</b></td><td>Data dodania: <b>".@$rekord['data']."</b></td></tr>n";
  3. $wynik = mysqli_query($mysql, "SELECT * FROM komenterze WHERE id_news = ".@$rekord['id_news']."");
  4. $ile = mysqli_num_rows($wynik);
  5. echo "<tr><td>Źródło: <b>".@$rekord['zrodlo']."</b></td><td>Komentarzy: <b>".$ile."</b></td></tr>n";
  6. ?>


Gdy usunąłem ten fragment, wszystko wróciło do normy, ale oczywiście chciałbym aby to wróciło do skryptu.
drPayton
Ja bym obstawiał problem z funkcją: mysqli_num_rows. Zobacz: http://www.php.net/manual/pl/function.mysqli-num-rows.php
Ta funkcja ma jakieś specjalne obwarowania:
Cytat
The use of mysqli_num_rows() depends on whether you use buffered or unbuffered result sets. In case you use unbuffered resultsets mysqli_num_rows() will not correct the correct number of rows until all the rows in the result have been retrieved.

Spróbuj zrobić tak:
  1. <?php
  2. $wynik = mysqli_query($mysql, "SELECT count(*) as ile FROM komenterze WHERE id_news = ".@$rekord['id_news']."");
  3. $ile = $wynik[0]['ile'];
  4. ?>

A tak przy okazji:
FROM komenterze czy FROM komentarze? Może to to?
henio
Cytat(drPayton @ 4.08.2007, 10:17:00 ) *
Ja bym obstawiał problem z funkcją: mysqli_num_rows. Zobacz: http://www.php.net/manual/pl/function.mysqli-num-rows.php
Ta funkcja ma jakieś specjalne obwarowania:
Spróbuj zrobić tak:
  1. <?php
  2. $wynik = mysqli_query($mysql, "SELECT count(*) as ile FROM komenterze WHERE id_news = ".@$rekord['id_news']."");
  3. $ile = $wynik[0]['ile'];
  4. ?>

A tak przy okazji:
FROM komenterze czy FROM komentarze? Może to to?

Nazwa jest dobra. Przez przypadek nazwalem komenterze i nie chcialo mi sie zmieniac.

Wstawiłem to co napisałeś i:
Fatal error: Cannot use object of type mysqli_result as array in C:\Program Files\Apache Group\Apache2\htdocs\stronka\index.php on line 83
drPayton
Sorry, odzwyczaiłem się już od bezpośredniego korzystania z funkcji zapytań winksmiley.jpg
Przerób, chodzi o to, żeby nie zliczać liczby wierszy pobranej zapytaniem (jak miałeś), tylko skorzystać z funkcji MySQL count do policzenia ile tych rekordów jest.
henio
Już działa:

  1. <?php
  2. $wynik1 = mysqli_query($mysql, "SELECT * FROM komenterze WHERE id_news = ".@$rekord['id_news']."");
  3. $row = mysqli_num_rows($wynik1);
  4. echo "<tr><td>Źródło: <b>".$rekord['zrodlo']."</b></td><td>Komentarzy: <b>".$row."</b></td></tr>n";
  5. ?>

Tak wstawiłęm
drPayton
No i gucio. Dopiero teraz jak to napisałeś zauważyłem, że zmienne nazywają się tak samo w obrębie dwóch zagnieżdżonych pętli. Bez przerwy zmieniają wartości (choć nie powinny) i w ten sposób zapętlają się w nieskończoność...
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.