![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Czy AJAX obsługuje podzapytania/zapytanie skorelowane?
Mam zapytanie, które jest poprawnie wyświetlane jako zapytanie SQL w PHPMyAdminie (XAMPP 1.8.3-2 dla OSX). Ale którego moja ajaxowa tabela w systemie nie potrafi wyświelić. Nie pojawiają się żadne dane, nawet nie pojawia się pusta tabela zadeklarowana w pliku. Zwykłe zapytania oczywiście działają poprawnie. Ten post edytował x X x 5.03.2014, 16:18:44 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cos ci sie pomieszalo..... mysql nie ma zadnego zwiazku z ajaxem
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Hm no w systemie tworzy się pewna tabela, która ma x kolumn (zadeklarowanych przeze mnie) i 10 rekordów, na dole można klknąć na wybraną stronę z listy pobranych wyników. Za pomocą echo można pobrać rekordy do tej tabeli za pomocą indeksów kolumn wprost z bazy danych lub można też pobierać te indeksy wprost z zapytania sql. Mam takie zapytanie, które zawiera w sobie podzapytanie i left joina. Normalne, proste zapytanie (np. SELECT class_id FROM classes) można bez problemu w tej tabeli wyświelić. Mojego natomiast, mimo poprawności całego kodu (teoretycznie) nie można. Strona ładuje się około 10 sekund (tyle, ile wykonuje się zapytanie w PHPMyAdminie), ale w ekekcie nie otrzymuje żadnej tabeli. Stąd to pytanie. Czy to na pewno nie jest wina AJAXA?
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ja nie mowie, ze to nie jest wina ajaxa. Ja mowie, ze mysql z ajaxem nie ma zadnego zwiazku..... AJAX to żądanie http ino ze bez przeladowania strony.
Zobacz co zwraca ci AJAX, zastosuj sie do tego tematu: Temat: Jak poprawnie zada pytanie to moze bedzie cos wiadomo. Tak teraz nic nie wiadomo. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Plik controller.php:
plik search_result.html (część):
Powinienem otrzymywać podobną tabelę: https://www.dropbox.com/s/vsba9upowyejfv6/Z...%2019.25.04.png Otrzymuje natomiast: https://www.dropbox.com/s/ds71h5w40jygbbe/Z...%2019.27.49.png Po wywołaniu w osobnym pliku zapytania $q dostaję w wyniku treść tego zapytania, więc jest przekazywane. Nie wiem, może w search result po prostu przekazuję złe dane? Dodam jeszcze, że jeżeli chciał bym wywołać zapytanie $q2 i przenieść je do owej tabeli (oczywiście odpowiednio modyfikując) - pobierane dane zostają wyświetlone. Zedytowałem obydwa pliki, ponieważ udało mi się w końcu dodać wyświetlanie rodzaju zajęć, wcześniej dublowało mi każdy przedmiot dla każdego studenta 9 razy (tyle jest rodzajów zajęć). Po prostu zapomniałem dodać połączenia... Proszę o pomoc lub sugestie, bo jest to ostatni krok do tego abym skończył to robić... Myślę jeszcze, czy udało by się w jakiś magiczny sposób duplikować każdy rekord tak, aby każdy student miał z każdego przedmiotu np. 5 rekordów (czyt. 5 ocen)(zakładając, że na początku tabela passes jest pusta)? Bo jeżeli nie będę musiał dorobić do tabeli passes dodatkowe pola na oceny... Ten post edytował x X x 5.03.2014, 23:15:48 |
|
|
![]() ![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
przecież to nie AJAX, to zwykły HTML.
![]() weź spróbuj rozebrać to na części i zrobić jakieś var_dump($Result), żeby zobaczyć czy naprawdę search_result.html dostaje dobre dane (czyli czy ta linijka działa dobrze: $Result = parent::getDB()->run($q); . Także bym zrobił nowy testowy szablon html/php, który zamiast tworzyć skomplikowaną tabelę HTML, luzem wywalałby dane uzyskane z pętli foreach (żeby sprawdzić, czy właśnie z tymi pętlami i tworzeniem HTML nie masz coś schrzanionego w pliku search_result.html). no i oczywiście, na samym początku zobaczyłbym w przegladarce zrodło strony (bo możliwe, że tabelka się robi, tylko jakiegoś znacznika HTML nie zamknąłeś i nie widać kolumn). No i nie ma tu AJAXa, chyba że to nie cały kod. edit: noi. sprawdz w jakiej formie dostajesz te dane z bazy. może one są, ale nie w takim formacie (oczekjjesz tablicy rzedów, gdzie każdy rząd jest tablicą asocjacyjną. To też bym sprawdził) Ten post edytował PrinceOfPersia 6.03.2014, 07:59:26 -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie jest to cały kod. search_result.html to tylko plik html/php z pewnymi skryptami javy, które umożliwiają np. edycję pobranych danych i wysyłanie ich ponownie tam, skąd zostały pobrane. Natomiast za tworzenie tej tabeli odpowiedzialna jest inna funkcja, chyba jest to ta funkcja (tzn. za wyświetlanie tych 10 wyników, sortowanie ich, wybieranie z listy rozwijanej tylko wybranych danych, etc.).
plik nazywa się modules.php i jest to jedna z wielu zawartych w nich funkcji. Pokażę wszystkie, które moim zdaniem mogą być wywoływane do wyświetlania tabeli:
Wydaje mi się, że w tej funkcji leży problem, ponieważ nie pobieram przecież tylko tabeli passes, ale i dane z tabeli classes. Pokażę jeszcze strukturę tych dwóch tabel dla jasności: CLASSES
PASSES
Jak widać tabela classes w zupełności wystarcza mi do wyświetlania wyników. Zapytanie, które przedstawiłem na początku wyświetla przykładowo następujące dane: ZAJĘCIA1 - PRZEDMIOT1 - PROWADZĄCY 1 - RODZAJ ZAJĘC 1 - STUDENT 1 - OCENA/DATA/KOM ZAJĘCIA2 - PRZEDMIOT1 - PROWADZĄCY 1 - RODZAJ ZAJĘC 2 - STUDENT 1 - OCENA/DATA/KOM ZAJĘCIA1 - PRZEDMIOT1 - PROWADZĄCY 1 - RODZAJ ZAJĘC 1 - STUDENT 2 - OCENA/DATA/KOM ZAJĘCIA2 - PRZEDMIOT1 - PROWADZĄCY 1 - RODZAJ ZAJĘC 2 - STUDENT 2 - OCENA/DATA/KOM I tak dalej. Z reguły z jednego przedmiotu są 2 rodzaje zajęć: wykład i ćwiczenia, dlatego dla każdego studenta wyświetla dwa rekordy. Wszystkie te informacje pobieram z tabeli classes, łącząc ją z innymi tabelami poprzez id i do tego doklejam tabelę passes. Ten post edytował x X x 6.03.2014, 13:42:53 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Podam ci jeszcze raz linka do tematu:
Temat: Jak poprawnie zada pytanie Masz tam napisane jak wyswietlac bledy, jak wyswietlac bledy bazy, jak wyswietlac zawartosc zmiennych. Zastosuj sie do tego a nastepnie sprawdz sobie w konsoli FIREBUG co zwraca ci dokladnie AJAX. Bedziesz wiedzial w czym blad. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy robię to dobrze, ale z plikiem html o takiej treści:
dostaję taki wynik: https://www.dropbox.com/s/owq1djq4xea4f9b/Z...%2014.50.51.png Natomiast z takim (gdzie zmienna $Result odwołuje się do wywoływanego wcześniej zapytania, za pomocą której przekazuję również danę do pętli foreach w docelowej tabeli):
wynik jest poniższy: https://www.dropbox.com/s/y0v53h26dkugm5m/Z...%2014.52.33.png |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
mysql_query($Result)
Jakie $result? Przeciez zapytanie masz w $sql -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Tak jak napisałem wcześniej. Tak jak to rozumiem, zmienna $Result przechowuje wynik zapytania, który później w dołączanym pliku search_results.html jest odczytywany za pomocą pętli foreach. Zobacz mój post w którym dałem zrzut pliku controller.php oraz search_result.html.
Jak widać, odwołanie do zmiennej sql w efekcie daje wyświetlenie tej zmiennej. Ten post edytował x X x 6.03.2014, 15:09:17 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
$Result ma zapisane rekordy pobrane z bazy. Po grzyba ty na tym robisz mysql_query()? Nie wiem. Na dodatek jak widac gdy robisz mysql_query($Result) to zmienna ta w ogole nie istnieje.
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
To w jaki sposób wyświetlić zawartość zmiennej $Result z pliku controller.php w dołączanym pliku search_res.html?
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
print_r($Result);
? przenosze na przedszkole -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie dostaję żadnych wyników oraz żadnego komunikatu - o poprawności/błędzie.
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No bo juz ci mowilem, ze widac, ze $Result tam nie istnieje wiec nie ma co sie dziwic ze nic nie zwraca
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
No to dlaczego jeżeli, tak jak w pliku search_results.html w pętli foreach przypiszę $Results do $Pass, i później wyświetlam te dane w sposób, jak to jest pokazane wcześniej dane te się wyświetlają?
Moim zdaniem problem jest z jakąs funkcją przetwarzającą dane zawartą w pliku Modules.php. Jest to główny plik z funkcjami, z którego korzystają wszystkie moduły (wyświetlanie i edycja pracowników, wydziałów, zajęć, etc) w tym systemie i tam znajduje się 90% funkcji. Jeżeli wykonam zwykłe zapytanie (i oczywiście odpowiednio odniose się do niego w search_results.html - tak jak pisałem o tym na przykładzie zapytania $q2) to dane są przekazywane i wyświetlane. Właśnie wykonałem takie zapytanie:
Nie zmieniając nic w pliku search_results.html i otrzymałem swoją tabelę, w której w odpowiednich miejscach są wyświetlane rekordy z tabeli passes. Czyli wszystko jest z tym w porządku, problem leży gdzieś indziej. Jako, że w tym systemie w każdym dostępnym module do wyświetlania danych wystarczyło by właśnie takie zapytanie jak wyżej w tym właśnie wyczuwam problem - iż system nie jest przygotowany do obsługi podzapytań. W swoim przypadku łącze dwie tabele (o których wspomniałem wyżej) i wynik, jaki otrzymuje w PHPMyAdminie jest taki, jak również napisałem powyżej. To samo chcę osiągnąć na stronie internetowej w owej ajaxowej tabeli. I moim zdaniem należy tutaj zmodyfikować funkcję public function GetTable, której kod również wcześniej przesłałem. Edit: Jedną ciekawą rzecz zauważyłem. Przy wywołaniu powyższego zapytania dodałem w search_results.html print_r($Result). W miejscu, w którym go dodałem dostałem taki oto wynik: https://www.dropbox.com/s/lik32p9nohqbnnv/Z...%2019.36.23.png Natomiast gdy do $Result przesyłam swoje zapytanie ($q) nie dostaję ani tabeli, ani tego wyniku jak powyżej. Ten post edytował x X x 6.03.2014, 19:39:25 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie jest to cały kod. search_result.html to tylko plik html/php z pewnymi skryptami javy, które Javy to w to nie mieszaj, bo zapewne chodzi ci o JavaScript... moze wpierw sprobuj wygooglaç czym się różni AJAX od HTML, i czym się różni kod PHP od JavaScriptu i od MySQL, a potem zadawaj pytania... -------------------- |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 21.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
PrinceOfPersia, wielce dziękuję ci za powyższą odpowiedź, rozwiązała wszystkie moje problemy
![]() Pomijając fakt tego, że coś źle zostało nazwane (nie widzę w tym żadnej istotności) ktoś ma pomysł dlaczego nie chce mi się wyświetlić to zapytanie? Wydaje mi się, że przedstawiłem już wystarczająco wiele danych i kodu, bądź też różnych pokrewnych przypadków, w których wszystko działa jak należy. Edit 8.03.2014: Problem został rozwiązany, jak się okazuje poprawny zapis zapytań jest bardzo istotny i niekoniecznie to, co PHPMyAdmin przetwarza poprawnie - PHP zrobi tak samo. W tym wypadku chodzi o znaki. Wiadomo, że po SELECT musi być odstęp. Wyżej widać jak wygląda moje zapytanie. W takiej formie MySQL przetwarza je bez problemu. PHP natomiast nie - nie rozpoznał znaku ENTER jako odstępu, czyli nie widział odstępu między SELECT a pierwszym wybieranym elementem... Dałem spację -> enter - polecenie działa i ładuje dane do mojej tabeli... Uff. Myślę, że temat można zamknąć. Ewentualnie proszę o kosz, bo zbyt dużo tutaj różnych danych... Ten post edytował x X x 8.03.2014, 00:29:40 |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
PrinceOfPersia, wielce dziękuję ci za powyższą odpowiedź, rozwiązała wszystkie moje problemy ![]() Pomijając fakt tego, że coś źle zostało nazwane (nie widzę w tym żadnej istotności) ma taką istotność, że nazywając coś nieprawidłowo zawracasz innym gitarę, bo i tak ci nikt nie pomoże jeśli nazwiesz cos z "z dupy" i trzeba się zastanawiać, o co chodzi. Cytat Problem został rozwiązany, jak się okazuje poprawny zapis zapytań jest bardzo istotny i niekoniecznie to, co PHPMyAdmin przetwarza poprawnie - PHP zrobi tak samo. W tym wypadku chodzi o znaki no właśnie. czyli jak pisałem, rozebrać na części problem i rozwiązanie się znajdzie samo ![]() -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.06.2025 - 11:12 |