Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> AJAX a zapytania skorelowane/podzapytania - czy współpracują?
x X x
post 5.03.2014, 16:17:50
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
Go to the top of the page
+Quote Post
nospor
post 5.03.2014, 16:22:53
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

Go to the top of the page
+Quote Post
x X x
post 5.03.2014, 16:31:24
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?
Go to the top of the page
+Quote Post
nospor
post 5.03.2014, 16:33:51
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

Go to the top of the page
+Quote Post
x X x
post 5.03.2014, 19:18:54
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 21.01.2014

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


Plik controller.php:

  1. public function Show(){
  2. $q = "SELECT
  3. /*ps.pass_id,*/
  4. x.class_id,
  5. year_id,
  6. y_name, /*year*/
  7. subject_id,
  8. sb_name, /*subject*/
  9. employee_id,
  10. first_name, /*employee*/
  11. last_name, /*employee*/
  12. classestype_id,
  13. ct_name, /*classestype*/
  14. X.student_id,
  15. s_name, /*students*/
  16. sex, /*students*/
  17. ps.pass,
  18. ps.pass_date,
  19. ps.comments
  20. FROM
  21. (
  22. SELECT
  23. cl.class_id,
  24. y.year_id,
  25. y.name AS y_name, /*year*/
  26. sb.subject_id,
  27. sb.name AS sb_name, /*subject*/
  28. e.employee_id,
  29. first_name, /*employee*/
  30. last_name, /*employee*/
  31. ct.classestype_id,
  32. ct.name AS ct_name, /*classestype*/
  33. s.student_id,
  34. s.name AS s_name, /*students*/
  35. sex /*students*/
  36. FROM
  37. classes cl,
  38. years y,
  39. subjects sb,
  40. employees e,
  41. specialties sp,
  42. classestypes ct,
  43. students s
  44. WHERE cl.year_id=s.year_id
  45. AND cl.subject_id=sb.subject_id
  46. AND sb.specialty_id=sp.specialty_id
  47. AND s.specialty_id=sp.specialty_id /*sb.specialty_id*/
  48. AND cl.classestype_id=ct.classestype_id
  49. AND cl.employee_id=e.employee_id
  50. AND y.year_id=s.year_id
  51. ) X
  52. LEFT JOIN passes ps
  53. ON X.class_id=ps.class_id
  54. AND x.student_id=ps.student_id
  55. /*ORDER BY pass ASC*/
  56. WHERE x.employee_id=38
  57. /*WHERE x.class_id=78 OR x.class_id=79*/ /*Przemysław Pardel BSI (ćw. + wyk.) 6 ROK INŻ*/
  58. /*AND classestype_id=1*/";
  59.  
  60. $q2 = "select class_id from classes";
  61.  
  62. $Result = parent::getDB()->run($q);
  63. include('search_result.html');
  64. }


plik search_result.html (część):

  1. <?php foreach($Result as $Pass) : ?>
  2. <tr>
  3. <!-- pass_id -->
  4. <!--<td class="center-align tide"><?php echo $Pass['pass_id']; ?></td>-->
  5.  
  6. <!-- class_id -->
  7. <td name="class_id"><span id="class_id-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['class_id']; ?></span></td>
  8.  
  9. <!-- year_id -->
  10. <td name="year_id"><span id="year_id-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['year_id']; ?></span></td>
  11.  
  12. <!-- year_id -> name -->
  13. <td name="y_name"><span id="y_name-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['y_name']; ?></span></td>
  14.  
  15. <!-- subject_id -->
  16. <td name="subject_id"><span id="subject_id-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['subject_id']; ?></span></td>
  17.  
  18. <!-- subject_id -> name -->
  19. <td name="sb_name"><span id="sb_name-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['sb_name']; ?></span></td>
  20.  
  21. <!-- employee_id -->
  22. <td name="employee_id"><span id="employee_id-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['employee_id']; ?></span></td>
  23.  
  24. <!-- employee_id -> first_name -->
  25. <td name="e_f_name"><span id="e_f_name-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['e_f_name']; ?></span></td>
  26.  
  27. <!-- employee_id -> last_name -->
  28. <td name="e_l_name"><span id="e_l_name-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['e_l_name']; ?></span></td>
  29.  
  30. <!-- classestype_id -->
  31. <td name="classestype_id"><span id="classestype_id-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['classestype_id']; ?></span></td>
  32.  
  33. <!-- classestype_id -> name -->
  34. <td name="ct_name"><span id="ct_name-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['ct_name']; ?></span></td>
  35.  
  36. <!-- student_id -->
  37. <td name="student_id"><span id="student_id-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['student_id']; ?></span></td>
  38.  
  39. <!-- student_id -> name -->
  40. <td name="s_name"><span id="s_name-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['s_name']; ?></span></td>
  41.  
  42. <!-- student_id -> sex -->
  43. <td name="sex"><span id="sex-<?php echo $Pass['pass_id']; ?>"><?php echo $Pass['sex']; ?></span></td>
  44.  
  45. <!-- pass -->
  46. <td name="pass"><span id="pass-<?php echo $Pass['pass_id']; ?>" class="editable-select pass"><?php echo $Pass['pass']; ?></span></td>
  47.  
  48. <!-- date -->
  49. <td name="pass_date"><span id="pass_date-<?php echo $Pass['pass_id']; ?>" class="editable"><?php echo $Pass['pass_date']; ?></span></td>
  50.  
  51. <!-- comments -->
  52. <td name="comments"><span id="comments-<?php echo $Pass['pass_id']; ?>" class="editable"><?php echo $Pass['comments']; ?></span></td>
  53.  
  54. </tr>
  55. <?php endforeach; ?>


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
Go to the top of the page
+Quote Post
PrinceOfPersia
post 6.03.2014, 07:51:59
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. baaasmiley.gif pomieszany z PHP.

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


--------------------
Go to the top of the page
+Quote Post
x X x
post 6.03.2014, 13:28:33
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:
  1. ...
  2.  
  3. public function GetConnectionTab($column, $table){
  4. $Tab = array();
  5. $sql = 'SELECT DISTINCT '.$column.' FROM '.$table;
  6. $Res = $this->DB->run($sql);
  7.  
  8. foreach($Res as $v){
  9. $Tab[] = $v[$column];
  10. }
  11. return $Tab;
  12. }
  13.  
  14. ...
  15.  
  16. public function Select($from, $whe = '', $fields = '*'){
  17. $Res = array();
  18. $Res = $this->DB->select($from, $whe, '', $fields);
  19. return $Res;
  20. }
  21.  
  22. ...
  23.  
  24. public function SelectSingle($from, $whe = '', $fields = '*'){
  25. $R = $this->Select($from, $whe, $fields);
  26. return (isSet($R[0])) ? $R[0] : null;
  27. }
  28.  
  29. ...
  30.  
  31. public function GetResults(){
  32. return $this->GetTable($this->table);
  33. }
  34.  
  35. public function GetPassesTable(){
  36. $Result = $this->DB->select('userpermissions up, results r, subjects sb, classestypes ct, employees e, students st, passes ps', 'up.user_id = '.$this->User->GetID().' AND up.course_id = r.course_id AND sb.subject_id = r.subject_id AND ct.classestype_id = r.classestype_id AND e.employee_id = r.employee_id AND st.student_id = r.student_id AND st.student_id=ps.stutend_id ORDER BY r.pass', 'r.*, ps.*');
  37. return $Result;
  38. } //OWA FUNKCJA, RACZEJ NIE WPŁYWA NA WYŚWIETLANE DANE, PONIEWAŻ ZAKOMENTOWANIE PODOBNYCH DLA INNYCH TABEL NIE WPŁYWA NA TO CO WYŚWIETLA SIĘ W TABELI PLIKU WYNIKOWEGO search_results.html
  39.  
  40. ...
  41.  
  42. public function GetTable($TableName, $Where = ''){
  43. $Result = array();
  44.  
  45. if($this->User->GetPermission() == '99' || '25'){ //25 dodane aby wyświetlała się zawartośc modułu PASSES dla EMPLOYEE
  46. switch($TableName){
  47. case 'passes' : $Result = ($Where != '') ? $this->DB->select($TableName, $Where) : $this->DB->select($TableName); break;
  48. case 'employees' : $Result = ($Where != '') ? $this->DB->select($TableName, $Where.' ORDER by last_name') : $this->DB->select($TableName, ' 1 = 1 ORDER By last_name'); break;
  49. case 'classes' : $Result = ($Where != '') ? $this->DB->select($TableName, $Where) : $this->DB->select($TableName); break;
  50. case 'users' : $Result = ($Where != '') ? $this->DB->select($TableName, $Where) : $this->DB->select($TableName); break;
  51. case 'logs' :$Result = ($Where != '') ? $this->DB->select($TableName, $Where) : $this->DB->select($TableName); break;
  52. default : $Result = ($Where != '') ? $this->DB->select($TableName, $Where.' ORDER by name') : $this->DB->select($TableName, ' 1 = 1 ORDER By name'); break;
  53.  
  54. }
  55. } else {
  56. switch($TableName){
  57. case 'passes' : $Result = $this->GetPassesTable(); break; //TABELA PASSES
  58. case 'courses' : $Result = $this->GetCoursesTable(); break;
  59. case 'units' : $Result = $this->GetUnitsTable(); break;
  60. case 'specialties' : $Result = $this->GetSpecialtiesTable(); break;
  61. case 'subjects' : $Result = $this->GetSubjectsTable(); break;
  62. case 'classes' : $Result = $this->GetClassesTable(); break;
  63. case 'employees' : $Result = $this->GetEmployeesTable(); break;
  64. case 'students' : $Result = $this->GetStudentsTable($Where); break;
  65. default : $Result = ($Where != '') ? $this->DB->select($TableName, $Where) : $this->DB->select($TableName);
  66.  
  67. }
  68. }
  69. return $Result;
  70. }
  71.  
  72. ...
  73.  
  74. public function RewriteTable($Table, $LabelID){
  75. $NewArray = array();
  76. foreach($Table as $row){
  77. $NewArray[$row[$LabelID]] = $row;
  78. }
  79. return $NewArray;
  80. }
  81.  
  82. ...
  83.  
  84. public function RewriteSpecialTable($Table, $LabelID1, $LabelID2){
  85.  
  86. $NewArray = array();
  87. foreach($Table as $row){
  88. $Label = $row[$LabelID1].$row[$LabelID2];
  89. $NewArray[$Label] = $row;
  90. }
  91. return $NewArray;
  92. }
  93.  
  94. ...
  95.  
  96. public function RewriteSpecialDashTable($Table, $LabelID1, $LabelID2){
  97.  
  98. $NewArray = array();
  99. foreach($Table as $row){
  100. $Label = $row[$LabelID1].'_'.$row[$LabelID2];
  101. $NewArray[$Label] = $row;
  102. }
  103. return $NewArray;
  104. }


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
  1. CREATE TABLE IF NOT EXISTS `classes` (
  2. `class_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `subject_id` int(11) NOT NULL,
  4. `year_id` int(11) NOT NULL,
  5. `employee_id` int(11) NOT NULL,
  6. `classestype_id` int(11) NOT NULL,
  7. PRIMARY KEY (`class_id`)
  8. );


PASSES
  1. CREATE TABLE IF NOT EXISTS `passes` (
  2. `pass_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `class_id` int(11) NOT NULL,
  4. `student_id` int(11) NOT NULL,
  5. `pass` enum('0','2','3','3.5','4','4.5','5','ZAL') COLLATE utf8_polish_ci DEFAULT '0',
  6. `pass_date` varchar(256) COLLATE utf8_polish_ci NOT NULL,
  7. `comments` varchar(100) COLLATE utf8_polish_ci DEFAULT NULL,
  8. PRIMARY KEY (`pass_id`)
  9. );


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
Go to the top of the page
+Quote Post
nospor
post 6.03.2014, 13:50:41
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

Go to the top of the page
+Quote Post
x X x
post 6.03.2014, 14:55:18
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:

  1. <?php
  2.  
  3. ini_set('display_errors','1');
  4.  
  5. $connection = @mysql_connect('localhost', 'root', '')
  6. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  7. echo "Udało się połączyć z serwerem!<br />";
  8. $db = @mysql_select_db('szkolenie', $connection)
  9. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  10. echo "Udało się połączyć z bazą danych!";
  11.  
  12. $sql = "SELECT
  13. /*ps.pass_id,*/
  14. x.class_id,
  15. year_id,
  16. y_name, /*year*/
  17. subject_id,
  18. sb_name, /*subject*/
  19. employee_id,
  20. first_name, /*employee*/
  21. last_name, /*employee*/
  22. classestype_id,
  23. ct_name, /*classestype*/
  24. X.student_id,
  25. s_name, /*students*/
  26. sex, /*students*/
  27. ps.pass,
  28. ps.pass_date,
  29. ps.comments
  30. FROM
  31. (
  32. SELECT
  33. cl.class_id,
  34. y.year_id,
  35. y.name AS y_name, /*year*/
  36. sb.subject_id,
  37. sb.name AS sb_name, /*subject*/
  38. e.employee_id,
  39. first_name, /*employee*/
  40. last_name, /*employee*/
  41. ct.classestype_id,
  42. ct.name AS ct_name, /*classestype*/
  43. s.student_id,
  44. s.name AS s_name, /*students*/
  45. sex /*students*/
  46. FROM
  47. classes cl,
  48. years y,
  49. subjects sb,
  50. employees e,
  51. specialties sp,
  52. classestypes ct,
  53. students s
  54. WHERE cl.year_id=s.year_id
  55. AND cl.subject_id=sb.subject_id
  56. AND sb.specialty_id=sp.specialty_id
  57. AND s.specialty_id=sp.specialty_id /*sb.specialty_id*/
  58. AND cl.classestype_id=ct.classestype_id
  59. AND cl.employee_id=e.employee_id
  60. AND y.year_id=s.year_id
  61. ) X
  62. LEFT JOIN passes ps
  63. ON X.class_id=ps.class_id
  64. AND x.student_id=ps.student_id
  65. WHERE x.employee_id=938 and x.student_id=5883";
  66.  
  67.  
  68.  
  69. echo 'ZAPYTANIE: '.$sql.'</br></br>';
  70. mysql_query($sql) or die('BŁĄD:'.mysql_error().'</br></br>');
  71.  
  72.  
  73. //echo 'ZAPYTANIE: '.$Result.'</br></br>';
  74. //mysql_query($Result) or die('BŁĄD:'.mysql_error().'</br></br>');
  75.  
  76.  
  77. //var_dump($Result);
  78. var_dump($sql);
  79.  
  80. mysql_close($connection);
  81. ?>

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):

  1. <?php
  2.  
  3. ini_set('display_errors','1');
  4.  
  5. $connection = @mysql_connect('localhost', 'root', '')
  6. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  7. echo "Udało się połączyć z serwerem!<br />";
  8. $db = @mysql_select_db('szkolenie', $connection)
  9. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  10. echo "Udało się połączyć z bazą danych!";
  11.  
  12. $sql = "SELECT
  13. /*ps.pass_id,*/
  14. x.class_id,
  15. year_id,
  16. y_name, /*year*/
  17. subject_id,
  18. sb_name, /*subject*/
  19. employee_id,
  20. first_name, /*employee*/
  21. last_name, /*employee*/
  22. classestype_id,
  23. ct_name, /*classestype*/
  24. X.student_id,
  25. s_name, /*students*/
  26. sex, /*students*/
  27. ps.pass,
  28. ps.pass_date,
  29. ps.comments
  30. FROM
  31. (
  32. SELECT
  33. cl.class_id,
  34. y.year_id,
  35. y.name AS y_name, /*year*/
  36. sb.subject_id,
  37. sb.name AS sb_name, /*subject*/
  38. e.employee_id,
  39. first_name, /*employee*/
  40. last_name, /*employee*/
  41. ct.classestype_id,
  42. ct.name AS ct_name, /*classestype*/
  43. s.student_id,
  44. s.name AS s_name, /*students*/
  45. sex /*students*/
  46. FROM
  47. classes cl,
  48. years y,
  49. subjects sb,
  50. employees e,
  51. specialties sp,
  52. classestypes ct,
  53. students s
  54. WHERE cl.year_id=s.year_id
  55. AND cl.subject_id=sb.subject_id
  56. AND sb.specialty_id=sp.specialty_id
  57. AND s.specialty_id=sp.specialty_id /*sb.specialty_id*/
  58. AND cl.classestype_id=ct.classestype_id
  59. AND cl.employee_id=e.employee_id
  60. AND y.year_id=s.year_id
  61. ) X
  62. LEFT JOIN passes ps
  63. ON X.class_id=ps.class_id
  64. AND x.student_id=ps.student_id
  65. WHERE x.employee_id=938 and x.student_id=5883";
  66.  
  67.  
  68.  
  69. //echo 'ZAPYTANIE: '.$sql.'</br></br>';
  70. //mysql_query($sql) or die('BŁĄD:'.mysql_error().'</br></br>');
  71.  
  72.  
  73. echo 'ZAPYTANIE: '.$Result.'</br></br>';
  74. mysql_query($Result) or die('BŁĄD:'.mysql_error().'</br></br>');
  75.  
  76.  
  77. var_dump($Result);
  78. //var_dump($sql);
  79.  
  80. mysql_close($connection);
  81. ?>


wynik jest poniższy:

https://www.dropbox.com/s/y0v53h26dkugm5m/Z...%2014.52.33.png
Go to the top of the page
+Quote Post
nospor
post 6.03.2014, 14:59:13
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

Go to the top of the page
+Quote Post
x X x
post 6.03.2014, 15:08:41
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
Go to the top of the page
+Quote Post
nospor
post 6.03.2014, 15:17:42
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

Go to the top of the page
+Quote Post
x X x
post 6.03.2014, 15:20:49
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?
Go to the top of the page
+Quote Post
nospor
post 6.03.2014, 15:21:48
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

Go to the top of the page
+Quote Post
x X x
post 6.03.2014, 15:44:05
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.
Go to the top of the page
+Quote Post
nospor
post 6.03.2014, 15:52:34
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

Go to the top of the page
+Quote Post
x X x
post 6.03.2014, 15:59:19
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:

  1. $q3 = "select * from passes";
  2.  
  3. $Result = parent::getDB()->run($q3);
  4. include('search_results.html');


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
Go to the top of the page
+Quote Post
PrinceOfPersia
post 7.03.2014, 07:12:25
Post #18





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


Cytat(x X x @ 6.03.2014, 13:28:33 ) *
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...


--------------------
Go to the top of the page
+Quote Post
x X x
post 7.03.2014, 13:01:30
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 smile.gif

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
Go to the top of the page
+Quote Post
PrinceOfPersia
post 8.03.2014, 07:00:51
Post #20





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


Cytat(x X x @ 7.03.2014, 13:01:30 ) *
PrinceOfPersia, wielce dziękuję ci za powyższą odpowiedź, rozwiązała wszystkie moje problemy smile.gif

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 wink.gif


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Wersja Lo-Fi Aktualny czas: 14.06.2025 - 11:12