Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Objektówka, niby brak błędów a nie działa
primo
post
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


Witam,

próbuję zrozumieć działanie prostego skryptu pobierającego dane z bazy, niby błędy nie wyskakują (nawet jak coś celowo usunę z kodu i powinno je pokazać)

  1. <?php
  2. require_once(&#092;"BD.class.php\");
  3.  
  4. class Widget {
  5. private $id;
  6. private $name;
  7. private $description; 
  8. private $bd;
  9. private $needsUpdating = false;
  10.  
  11.  
  12. public function _construct($widgetID){
  13.  
  14. $bd = new BD;
  15.  
  16. if (!$bd->otworz()) {
  17. die ($bd->blad());
  18. }
  19.  
  20. if (!$bd->zapytaj(&#092;"SELECT \"nazwa\", \"opis\" FROM artykul WHERE nr_artykulu = $widgetID\")) {
  21. die ($db->error());
  22. }
  23.  
  24. if (!pobierzTablice) {
  25. throw new Exception ('Szukanego artykułu nie ma w bazie !');
  26. }
  27.  
  28. $bd->pobierzTablice();
  29.  
  30. $data->pobierzTablice();
  31. $this->id = $widgetID;
  32. $this->name = $data['nazwa'];
  33. $this->description = $data['opis'];
  34. }
  35.  
  36. public function getName() {
  37. return $this->name;
  38. }
  39.  
  40. public function getDescription() {
  41. return $this->description;
  42. }
  43.  
  44. public function setName($name) {
  45. $this->name = $name;
  46. $this->needsUpdating = true;
  47. }
  48.  
  49. public function setDescription($description) {
  50. $this->description = $description;
  51. $this->needUpdating = true;
  52. }
  53.  
  54. public function _destruct () {
  55. if (! $this->needsUpdating){
  56. return;
  57. }
  58.  
  59. $bd = 'UPDATE \"artykul\" SET';
  60. $bd.= &#092;"\"nazwa\" = '\" .msql_escape_string($this->name) . \"', \";
  61. $bd.= &#092;"\"opis\" = '\" .msql_escape_string($this->description) . \"' \";
  62. $bd.= &#092;"WHERE nr_artykulu = \" .$this->id;
  63.  
  64. }
  65.  
  66. }
  67. ?>


  1. <?php
  2. require_once('class.Widget.php');
  3.  
  4. try {
  5. $objWidget = new Widget (1);
  6.  
  7. print &#092;"Nazwa artykułu: \" .$objWidget->getName() .\"<br>n\";
  8. print &#092;"Opis artykułu: \" .$objWidget->getDescription() . \"<br>n\";
  9.  
  10. $objWidget->setName ('Trampki');
  11. $objWidget->SetDescription ('Trampki o dużym przebiegu !');
  12. } catch (Exception $e) {
  13. die (&#092;"Wystąpił problem: \" .$e->getMessage());
  14. }
  15. ?>


jak odpalę ten drugi skrypt to pokazuje mi tylko w przeglądarce:
Nazwa artykułu:
Opis artykułu:

nic poza tym.

macie jakieś pomysły ?


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
czachor
post
Post #2





Grupa: Zarejestrowani
Postów: 897
Pomógł: 40
Dołączył: 16.12.2003
Skąd: Warszawa

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


  1. <?php
  2. $bd = 'UPDATE \"artykul\" SET';
  3. $bd.= &#092;"\"nazwa\" = '\" .msql_escape_string($this->name) . \"', \";
  4. $bd.= &#092;"\"opis\" = '\" .msql_escape_string($this->description) . \"' \";
  5. $bd.= &#092;"WHERE nr_artykulu = \" .$this->id;
  6. ?>
to Ci się luzem wala...


--------------------
how many SEO experts does it take to change a light bulb,lightbulb,light,bulb,lamp,lighting,switch,sex,xxx
5-Reasons-why-you-should-NEVER-fix-a-computer-for-free
Go to the top of the page
+Quote Post
Imperior
post
Post #3





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

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


Widzę tutaj dwa zasadnicze błędy:
1. metody specjalne zaczynają się od __ zatem powinno być:
  1. <?php
  2. public function __construct(...) {}
  3. public function __destruct(...) {}
  4. ?>


2. Dwie rzeczy są ni z gruszki ni z pietruszki:
  1. <?php
  2. if (!pobierzTablice) {...}
  3. ?>

Oraz:
  1. <?php
  2. $data->pobierzTablice();
  3. ?>

Skąd to się wzieło (w drugim chodzi mi o $data)?

--EDIT--

No i własnie jeszcze SQL... nazwy pól masz zapisane jako stringi...
Używaj `pole`.

--EDIT2--

Dopiero teraz zrozumiałem post poprzednika biggrin.gif
Tworzysz zapytanie, ale go nie wykonujesz.
No i jeszcze podstawianie zapytania do zmiennej o takiej samej nazwie, jak wcześniej była baza danych, daje nieczytelny kod.

Ten post edytował Imperior 26.05.2005, 13:08:25


--------------------
Com powiedział, powiedziałem.
Go to the top of the page
+Quote Post
primo
post
Post #4





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


Ad. 1 -- poprawione
Ad. 2

poprawiłem na:
  1. <?php
  2. $data = $bd->pobierzTablice();
  3. ?>


funkcja ta pochodzi z includowanej clasy Baza - msql_fetch_array

Ad. 3

  1. $sql = 'UPDATE "artykul" SET';
  2. $sql.= "\"nazwa\" = $this->name ,";
  3. $sql.= "\"opis\" = $this->description";
  4. $sql.= "WHERE nr_artykulu = " .$this->id;


a co dalej to nie mam zielonego pojęcia ;(


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
Imperior
post
Post #5





Grupa: Zarejestrowani
Postów: 105
Pomógł: 0
Dołączył: 16.10.2004

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


No jeszcze pozostało Ci wykonać to zapytanie (czyli tak jak u góry z tym bd->zapytaj() )


--------------------
Com powiedział, powiedziałem.
Go to the top of the page
+Quote Post
primo
post
Post #6





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


  1. <?php
  2. if (!$bd->zapytaj(&#092;"UPDATE artykul SET nazwa = $this->name, opis = $this->description WHERE nr_artykulu = $this->id\")) {
  3. die ($bd->blad());
  4. }
  5. ?>


Wyskakuje komunikat o błędzie:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'o dużym przebiegu ! WHERE nr_artykulu = 1' at line 1


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ale napisy w mysql ttrzeba w ciapkach dawac:
  1. <?php
  2.  
  3. if (!$bd->zapytaj(&#092;"UPDATE artykul SET nazwa = '$this->name', opis = '$this->description' WHERE nr_artykulu = $this->id\")) {
  4.         die ($bd->blad());
  5.     }
  6.  
  7. ?>


że już nie wspomnę o ich ewentualnym escapowaniu

Ten post edytował nospor 27.05.2005, 08:35:12


--------------------

"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
primo
post
Post #8





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


Cytat
że już nie wspomnę o ich ewentualnym escapowaniu


a co to oznacza questionmark.gif

Wszystkie błędy usunięte, a jak nie było pobrania z bazy tak i dalej nie ma. A cholewcia obiektówka miała być o wiele łatwiejsza winksmiley.jpg a nie mogę nawet rekordu z bazy wyciągnąć, co dopiero przerobić kod strony (za 5 lat się odezwę) winksmiley.jpg


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




escapowanie: mysql_escape_string

Cytat
a nie mogę nawet rekordu z bazy wyciągnąć
Nie żebym się czepial, ale update nie slyzu do wyciągania danych

edit: aha, nie doczytalem calego topicu winksmiley.jpg
może pokaż jeszcze raz caly oprawiony kod

Ten post edytował nospor 27.05.2005, 08:58:52


--------------------

"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
primo
post
Post #10





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


no bez przesady, przecież jest powyżej kod z zapytaniem select.

dopisałem jeszcze:

  1. <?php
  2. if (!$sql = $bd->zapytaj(&#092;"UPDATE artykul SET nazwa = '$this->name', opis = '$this->description' WHERE nr_artykulu = $this->id\")) {
  3. die ($bd->blad());
  4. }
  5.  
  6. $rs = $bd->zapytaj($this->bd, $sql);
  7. if(! is_resource($rs)) {
  8. throw new Exception('Wystąpił błąd podczas aktualizacji bazy danych');
  9. }
  10.  
  11. $bd->zamknij($this->bd);
  12. ?>


Cytat
escapowanie: mysql_escape_string


jak teraz zescapuje to zapytanie to czy przypadkiem nie wyskoczy błąd że mój obiekt BD tego nie obsługuje questionmark.gif


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
jak teraz zescapuje to zapytanie
Ale ty nie masz apytania escxapować, a wartości tekstowe, czyli np mysql_escape_string($this->name)
Miales to robione wyżej w postach


--------------------

"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
primo
post
Post #12





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


  1. IF (!$sql = $bd->zapytaj("UPDATE artykul SET nazwa = '". mysql_escape_string ($this->name)."', opis = '". mysql_escape_string ($this->description)."' WHERE nr_artykulu = $this->id")) {
  2. die ($bd->blad());
  3. }


oki poszło.

jak dodałem ten kod poniżej zapytania to mam błąd: Fatal error: Exception thrown without a stack frame in Unknown on line 0

cały poprawiony kod:

  1. <?php
  2. require_once(&#092;"BD.class.php\");
  3.  
  4. class Widget {
  5. private $id;
  6. private $name;
  7. private $description; 
  8. private $bd;
  9. private $needsUpdating = false;
  10.  
  11.  
  12. public function __construct($widgetID){
  13.  
  14. $bd = new BD;
  15.  
  16. if (!$bd->otworz()) {
  17. die ($bd->blad());
  18. }
  19.  
  20. if (!$bd->zapytaj(&#092;"SELECT nazwa, opis FROM artykul WHERE nr_artykulu = $widgetID\")) {
  21. die ($bd->blad());
  22. }
  23.  
  24. $data = $bd->pobierzTablice();
  25. $this->id = $widgetID;
  26. $this->name = $data['nazwa'];
  27. $this->description = $data['opis'];
  28. }
  29.  
  30. public function getName() {
  31. return $this->name;
  32. }
  33.  
  34. public function getDescription() {
  35. return $this->description;
  36. }
  37.  
  38. public function setName($name) {
  39. $this->name = $name;
  40. $this->needsUpdating = true;
  41. }
  42.  
  43. public function setDescription($description) {
  44. $this->description = $description;
  45. $this->needUpdating = true;
  46. }
  47.  
  48. public function __destruct () {
  49. if (! $this->needsUpdating){
  50. return;
  51. }
  52.  
  53. $bd = new BD;
  54.  
  55. if (!$bd->otworz()) {
  56. die ($bd->blad());
  57. }
  58.  
  59. if (!$sql = $bd->zapytaj(&#092;"UPDATE artykul SET nazwa = '\". mysql_escape_string ($this->name).\"', opis = '\". mysql_escape_string ($this->description).\"' WHERE nr_artykulu =\" .$this->id)) {
  60. die ($bd->blad());
  61. }
  62.  
  63. $bd->zamknij($this->bd);
  64.  
  65. }
  66.  
  67. }
  68. ?>


Ten post edytował primo 27.05.2005, 09:07:21


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale sluchaj. Robisz zabytanie update, a potem sprawdzzasz czy wynik tego zapytania jest resource. Jelsi nie to wyrzucasz wyjątek. Jaki sens i logika? przecież zapytania typu update zwracają true lub false i nigdy nie będą resorcem, więc zawsze po takim zapytaniu wywali ci wyjątek tongue.gif


--------------------

"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
primo
post
Post #14





Grupa: Zarejestrowani
Postów: 254
Pomógł: 0
Dołączył: 30.12.2003
Skąd: Strzegom

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


właśnie to dostrzegłem i wywaliłem winksmiley.jpg ale dzięki


--------------------
Bieganie jest tym co kocham najbardziej, jest dla mnie powietrzem w moich płucach, krwią płynącą w żyłach, dawką endorfin, źródłem szczęścia i celem samym w sobie... A w skrócie to jestem uzależniony od biegania.
primo
gg1148730
Go to the top of the page
+Quote Post

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 Aktualny czas: 22.08.2025 - 06:36