Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dlaczego po klinięciu w link znika reszta ?
Forum PHP.pl > Forum > Przedszkole
piotr485
Witam, napisałem taki kod:

  1. echo '<dl id="menu1"><dt class="glowne_01"><div><a href="index.php">KATALOG FIRM</a></div></dt>';
  2. include("connection.php");
  3. $zapytanie = "
  4. SELECT kategoria.kategoria_pl AS kategoria,
  5. kategoria.id AS id,
  6. kategoria.id AS id_katt
  7. FROM kategoria
  8. ORDER BY kategoria_pl
  9. ";
  10. $wynik = @mysql_query ($zapytanie) or die (mysql_error());
  11. while($row = mysql_fetch_array($wynik)) {
  12. $kategoria = $row['kategoria'];
  13. $id = $row['id'];
  14. $id_kat2 = $row['id_katt'];
  15. echo '<dd><dl><dt class="glowne_02"><div><a href="index.php?id='.$id_kat2.'">';
  16.  
  17. if ($_GET['id'] == $id_kat2) {
  18. echo '<b>'.$kategoria.'</b>';
  19. }
  20.  
  21. else {echo $kategoria;}
  22.  
  23. echo '</a></div></dt>';
  24.  
  25. $zapytanie2 = "
  26. SELECT podkategorie.podkategoria AS podkategoria,
  27. podkategorie.id_kategoria AS id_kat,
  28. podkategorie.id AS id_pod
  29. FROM podkategorie
  30. WHERE podkategorie.id_kategoria = $id
  31. ORDER BY podkategorie.podkategoria
  32. ";
  33. $wynik2 = @mysql_query ($zapytanie2) or die (mysql_error());
  34. while($row2 = mysql_fetch_array($wynik2)) {
  35. $podkategoria = $row2['podkategoria'];
  36. $id_pod = $row2['id_pod'];
  37. $id_kat = $row2['id_kat'];
  38.  
  39. $zapytanie3 = "
  40. SELECT katalog_firm.id_podkategoria AS ilosc
  41. FROM katalog_firm
  42. WHERE katalog_firm.id_podkategoria = $id_pod
  43. ORDER BY katalog_firm.id_podkategoria
  44. ";
  45. $wynik3 = @mysql_query ($zapytanie3) or die (mysql_error());
  46. $suma = mysql_num_rows($wynik3);
  47. if ($suma >=1) {
  48.  
  49. if ($_GET['id'] == $id_kat AND $_GET['pod'] == $id_pod) {
  50. echo '<dd class="glowne_03"><div><a href="index.php?id='.$id_kat.'&pod='.$id_pod.'"><b>'.$podkategoria.'</b></a></div></dd>';
  51. }
  52.  
  53. else {
  54. echo '<dd class="glowne_03"><div><a href="index.php?id='.$id_kat.'&pod='.$id_pod.'">'.$podkategoria.'</a></div></dd>';
  55. }
  56.  
  57. }}
  58. echo '</dl></dd>';
  59. }


Tworzy to menu w postaci:
kategoria
- podkategoria
- podkategoria
itd.

Pytanie:
Dlaczego po wcisnięciu w link podkategorii, znikaja wszystkie kategorie co sa pod spodem ?
Podejrzewam, ze gdzies jest blad w kodzie i gdy tamta operacja sie wykona reszta juz sie niewykonuje, dlaczego tak sie dzieje ?
lars_91
Pousuwaj te wszystkie or die(mysql_error()).
marian2299
Właśnie dobrze, że je ma.
lars_91
A jaki ma sens umieszczanie najpierw @ przed mysql_query(), a potem po nim or die(mysql_error()). Ja obstawiam, że to te die sprawia problemy.
marian2299
Przecież lepiej wyświetlić błąd, niż nie wiedzieć. Niech usunie @.
vokiel
Cytat(lars_91 @ 17.08.2009, 11:32:21 ) *
A jaki ma sens umieszczanie najpierw @ przed mysql_query(), a potem po nim or die(mysql_error()). Ja obstawiam, że to te die sprawia problemy.


Raczej odwrotnie. Przez zakomentowanie @mysql_query() die() się nie wykona, bo błąd zostaje wygaszony, ukryty. Usunięcie @ pozwoli uruchomić die() z błędem, będzie wiadomo co powoduje błąd.
piotr485
Cytat(vokiel @ 17.08.2009, 11:58:19 ) *
Raczej odwrotnie. Przez zakomentowanie @mysql_query() die() się nie wykona, bo błąd zostaje wygaszony, ukryty. Usunięcie @ pozwoli uruchomić die() z błędem, będzie wiadomo co powoduje błąd.


Usunełem @ z przed dwóch zapytań, ale nadal to samo i nie wyrzuca zadnego błedu, czy ktos ma jakis pomysl ? Z gory dziekuje za pomoc

Z usunięciem or die też próbowałem, ale niestety bez żadnych zmian. Proszę o pomoc!
vokiel
Po każdym zapytaniu rób debug zapytania, następnie sprawdź sobie każde zapytanie np w SQLyog, czy MySQL Query Browser.

Debug:)
  1. $zapytanie2 = "SELECT podkategorie.podkategoria AS podkategoria, podkategorie.id_kategoria AS id_kat, podkategorie.id AS id_pod FROM podkategorie WHERE podkategorie.id_kategoria = $id ORDER BY podkategorie.podkategoria";
  2. echo "<!--\n".$zapytanie2."\n-->";
A potem w źródle strony będziesz miał ładnie w komentarzach zapytania.
piotr485
Cytat(vokiel @ 17.08.2009, 15:11:02 ) *
Po każdym zapytaniu rób debug zapytania, następnie sprawdź sobie każde zapytanie np w SQLyog, czy MySQL Query Browser.

Debug:)
  1. $zapytanie2 = "SELECT podkategorie.podkategoria AS podkategoria, podkategorie.id_kategoria AS id_kat, podkategorie.id AS id_pod FROM podkategorie WHERE podkategorie.id_kategoria = $id ORDER BY podkategorie.podkategoria";
  2. echo "<!--\n".$zapytanie2."\n-->";
A potem w źródle strony będziesz miał ładnie w komentarzach zapytania.


Zrobiłem tak jak mówisz i się okazuje, że w źródle niczego nie brakuje, tak więc nie wiem jakim cudem to znika, może to wina js ? sad.gif
f1xer
W sensie że w źródle są wyświetlone wszystkie kategorie a na stronie ich nie wyświetla? ta strona jest na jakimś serwerze? możesz podać link?
vokiel
Cytat(piotr485 @ 17.08.2009, 18:24:07 ) *
Zrobiłem tak jak mówisz i się okazuje, że w źródle niczego nie brakuje, tak więc nie wiem jakim cudem to znika, może to wina js ? sad.gif

W źródle masz zapytania, teraz sprawdź w jakimś sql mangerze (SQLyog, phpMyadmin) co zwracają te zapytania, bo może nie przekazuje zmiennych do zapytania, albo cudzysłowy trzeba poprawić, etc.

Jak sprawdzisz i okaże się, że zapytania zapisane w źródle są poprawne, to wtedy trzeba szukać błedów w kodzie...
Rookie
  1. while($row2 = mysql_fetch_array($wynik2)) {
  2. $podkategoria = $row2['podkategoria'];
  3. $id_pod = $row2['id_pod'];
  4. $id_kat = $row2['id_kat'];

zmień na:
  1. while($row2 = mysql_fetch_array($wynik2)) {
  2. $podkategoria = ($row2['podkategoria']);
  3. $id_pod = ($row2['id_pod']);
  4. $id_kat = ($row2['id_kat']);

I te nawiasy dodaj w taki sposób do każdej takiej pętli while.
Spróbuj, może pomoże smile.gif
vokiel
@Rookie co dają wg Ciebie te nawiasy? Do czego służą?
Rookie
Miałem podobny problem,
po zalogowaniu skrypt miał odczytywać dane z bazy za pomocą
  1. while($row=mysql_fetch_assoc($sql))
(podobne w działaniu co mysql_fetch_array)
niestety zmiennych nie "wypuszczał" poza pętlę while, ani nawet kiedy zrobiło się
  1. $_SESSION[zmienna] = $row[zmienna];

nie przypisywał jej do sesyjnej, dopiero po objęciu
  1. $row[zmienna]
zwykłymi nawiasami, przypisywał je do sesji.
Autor tematu nie odezwał się co do działania po zastosowaniu mojego pomysłu więc mam nadzieję, że zajrzał, spróbował i zadziałało, tylko po prostu nie odpisał smile.gif
Ale mam nadzieję, że jeszcze odpisze i rozwieje wątpliwości co do działania tego, co napisałem.
EDIT: I właśnie zauważyłem, że chyba również powinien zmienić mysql_fetch_array, na mysql_fetch_assoc, bo array robi tablicję $row[0] $row[1] itd., bez nazw
EDIT2: Czyli autor powinien mieć tak:
  1. while($row2 = mysql_fetch_assoc($wynik2)) {
  2. $podkategoria = ($row2['podkategoria']);
  3. $id_pod = ($row2['id_pod']);
  4. $id_kat = ($row2['id_kat']);

I w każdej takiej pętli while powinien mieć mysql_fetch_assoc i objęte zmienne $row[] nawiasami.
Pozdrawiam.
piotr485
Cytat(Rookie @ 19.08.2009, 10:59:09 ) *
Miałem podobny problem,
po zalogowaniu skrypt miał odczytywać dane z bazy za pomocą
  1. while($row=mysql_fetch_assoc($sql))
(podobne w działaniu co mysql_fetch_array)
niestety zmiennych nie "wypuszczał" poza pętlę while, ani nawet kiedy zrobiło się
  1. $_SESSION[zmienna] = $row[zmienna];

nie przypisywał jej do sesyjnej, dopiero po objęciu
  1. $row[zmienna]
zwykłymi nawiasami, przypisywał je do sesji.
Autor tematu nie odezwał się co do działania po zastosowaniu mojego pomysłu więc mam nadzieję, że zajrzał, spróbował i zadziałało, tylko po prostu nie odpisał smile.gif
Ale mam nadzieję, że jeszcze odpisze i rozwieje wątpliwości co do działania tego, co napisałem.
Pozdrawiam.


Zastosowałem się do tego, ale niestety niepomogło, jak również sprawdziłem wszystkie zapytania w php_my_admin i przy 3 zapytaniu wyszla dziwna tabelka, ale i tak bede pisal wszystko od nowa aby niezagniezdzac zapytan w zapytaniu - tylko wyswietlic wszystko za pomoca tablic, zobaczymy czy wtedy problem bedzie sie powtarzal
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.