Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] błąd Call to a member function Fields()...
Forum PHP.pl > Forum > Przedszkole
TeTaim
Witam. Jestem początkująca w temacie php i baz danych, więc postanowiłam prosić Was o pomoc.
Otóż stworzyłam bazę danych w formacie .mdb. Ma pięć kolumn - klub, drink, cena, składnik 1, składnik 2.
Chcę teraz zrobić na stronie internetowej (konkretniej w drupalu) wyszukiwarkę drinków wg maksymalnej ceny.

Oto kod:
  1. <table border="1">
  2. <tr>
  3. <th>Klub</th>
  4. <th>Drink</th>
  5. <th>Cena</th>
  6. <th>Składnik 1</th>
  7. <th>Składnik 2</th>
  8. </tr>
  9.  
  10. <?php
  11.  
  12.  
  13. // polaczenie z baza danych
  14. include_once('adodb5\adodb.inc.php');
  15. $db = NewADOConnection('access');
  16. $db->Connect('Driver={Microsoft Access Driver (*.mdb)};Dbq='.
  17. realpath('sites\http://***.lab.kti.ue.poznan.pl\firma.mdb'));
  18.  
  19. // polecenie SQL
  20. $drink = $_REQUEST['drink'];
  21. $cena = $_REQUEST['cena'];
  22. $sql = "select * from drinki where drink like '$drink%' and cena <=
  23. $cena";
  24. $rs = $db->Execute($sql);
  25.  
  26. // odczyt danych
  27. while (!$rs->EOF) {
  28. echo "<tr><td>";
  29. echo $rs->Fields("klub");
  30. echo "</td><td>";
  31. echo $rs->Fields("drink");
  32. echo "</td><td>";
  33. echo $rs->Fields("cena");
  34. echo "</td><td>";
  35. echo $rs->Fields("składnik1");
  36. echo "</td><td>";
  37. echo $rs->Fields("składnik2");
  38. echo "</td></tr>";
  39. $rs->MoveNext();
  40. }
  41. $db->Close();
  42. ?>
  43. </table>


a to błąd, który nie daje mi żyć:

Fatal error: Call to a member function Fields() on a non-object in C:\bin\apache22\htdocs\includes\common.inc(1695) : eval()'d code on line 29

Czy może mi jakaś dobra dusza wytłumaczyć gdzie jest błąd i co spartaczyłam? I w ogóle co znaczy ten błąd? Będę wdzięczna:)
I tak w sumie skąd wzięła się ta cała ścieżka C:\bin\... skoro nawet mój komputer jej nie posiada?
Rid
Z tego co widze to masz zadeklarowane tylko:
  1. #
  2. $drink = $_REQUEST['nazwa'];
  3. #
  4. $cena = $_REQUEST['cena'];
a gdzie pozostałe wartości??
TeTaim
Pozostałe wartości nie są mi potrzebne, że tak powiem.

Na zajęciach miałam do czynienia z jedną bazą danych i kod wyglądał niemal identycznie jak ten, baza danych też była podobna, też były zdeklarowane tylko dwie wartości, a reszta się miała tylko wyświetlać i działało.
Mephistofeles
$rs nie jest obiektem. Sprawdź var_dumpem co zwraca execute.
TeTaim
Jestem na tyle początkująca, że nie wiem czego ode mnie wymagasz:(

Po przeładowaniu strony z tym błędem wyskakuje mi kolejny:
warning: odbc_connect() [function.odbc-connect]: SQL error: [Microsoft][ODBC Microsoft Access Driver] Cannot open database '(unknown)'. It may not be a database that your application recognizes, or the file may be corrupt., SQL state S1000 in SQLConnect in C:\bin\php\includes\adodb5\drivers\adodb-odbc.inc.php on line 60.


Dodam też, że część skryptu
// polaczenie z baza danych
została stworzona przez prowadzącego zajęcia, więc raczej jest ok

Bazę danych też umieściłam tam, gdzie prowadzący chciał.

Chcę zrobić dokładnie to samo, co na zajęciach, mam tylko inną bazę danych, ale w kodzie php pozmieniałam - tam, gdzie w poprzednio była "nazwa" teraz mam "drink" itd.
Jak to możliwe, że jest błąd?
Mephistofeles
Sprawdź, czy ta baza rzeczywiście istnieje (dla skryptu, bo się mogą różne magiczne rzeczy dziać czasami biggrin.gif), wywołaj file_get_contents z adresem do niej - jak działa to dalej sprawdź co zwraca metoda Execute:
  1. var_dump($rs = $db->Execute($sql));

Ściągnij sobie tą bazę do katalogu skryptu i wtedy sprawdź.
Ale mam pytanie, czemu używasz AdoDB? W tej chwili to samo osiągniesz przez natywne PDO, nie ma sensu zaprzęgać dodatkowych bibliotek do pracy.
TeTaim
Już to jakoś postawiłam na nogi, dziękuję bardzo za pomoc smile.gif
Wybrałam rozwiązanie najprostsze, napisałam z pytaniami do wykładowcy:)
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.