Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dlaczego pole w klasie nie jest modyfikowanie, porawnie? Zgłupiałem
Aztech
post 1.04.2006, 18:59:17
Post #1





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


Zwątpiłem! Nie wiem dlaczego poniższy kod nie działa.

klasa Forum
  1. <?php
  2.  
  3. /* ... wycięty zbędny kod ... */
  4.  
  5. /**
  6.    * Informuje o aktywowaniu (zatwierdzeniu przez administratora) forum
  7.    * @var boolean
  8.    * @access private
  9.    */
  10. private $active;
  11.  
  12. /* ... wycięty zbędny kod ... */
  13.  
  14. /**
  15.    * Aktywacja forum
  16.    * 
  17.    * @access public  
  18.    */
  19. public function activate(){
  20. $this->active = true;
  21. }
  22.  
  23. /**
  24.    * Deaktywowanie forum
  25.    * 
  26.    * @access public
  27.    *
  28.    */
  29. public function deactivate() {
  30. $this->active = false;
  31. }
  32.  
  33. /**
  34.    * Sprawdzenie stanu forum, (czy zostało aktywowane)
  35.    *
  36.    * @return boolean
  37.    * @access public
  38.    */
  39. public function isActive(){
  40. return $this->active;
  41. } 
  42.  
  43.  
  44. ?>


kod w php, który nie działa - w komentarzach wyjaśnienei problemu
  1. <?php
  2.  
  3. / * kod */
  4. case 'deact': //deaktywowanie forum
  5. if (isset($arr[3])) {
  6. try {
  7. $act_forum = new Forum($arr[3]);
  8. #odczytaj dane z bazy
  9. $act_forum->readDataFromSQLById();
  10. echo "<BR>AKTYWNY? = ".$act_forum->isActive()."<BR>"; #tutaj wyświetla mi się pobrana z bazy wartość 1(true)
  11. #deaktywuj
  12. $act_forum->deactivate();
  13. echo "<BR>AKTYWNY? = ".$act_forum->isActive()."<BR>"; # a tutaj nie wyrzuca mi żadnej wartości, nawet null
  14. #uaktualnij dane
  15. $act_forum->updateSQL();
  16. #zakończenie
  17. $arr[2]==null;
  18. }
  19. catch (PDOException $e) {
  20. echo $e;
  21. }
  22. }
  23. break;
  24. /* kod */
  25.  
  26. ?>


Konia z rzędem dla tego ktro mi wytłumaczy dlaczego to nie działa?

Ten post edytował Aztech 1.04.2006, 18:59:45
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
dr_bonzo
post 1.04.2006, 19:02:55
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  1. <?php
  2. $x = true;
  3. echo "[" . $x . "]<br />";
  4. var_dump( $x );
  5.  
  6. echo "<br />";
  7.  
  8. $x = false;
  9. echo "[" . $x . "]<br />"; // <<<<<<<<<<<<<<
  10. var_dump( $x );// <<<<<<<<<<<<<<
  11. ?>

powinno wystarczyc


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Aztech
post 1.04.2006, 19:16:09
Post #3





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


var_dump() zwróciło:
Kod
wartość po odczytaniu z bazy: string(1) "1"
wartość po deaktywowaniu: bool(false)


jak widać, potem jest funkcja updateSQL, która zapisuje wartość z pola active i zapisuje za pomocą setSql do obiektu PDOStatement
  1. <?php
  2. if (isset($update_id)) {
  3. $this->setSql("UPDATE rbx_forums"
  4. ." SET"
  5. ." forum_id = ".$update_id.","
  6. ." app_order = ".$this->getAppearanceOrder().","
  7. ." subforums = ".$this->getSubforumNum().","
  8. ." topics = ".$this->getTopicNum().","
  9. ." title = '".$this->getTitle()."',"
  10. ." last_post_id = ".$this->getLastPostId().","
  11. ." last_topic_id = ".$this->getLastTopicId().","
  12. ." active = ".$this->isActive().","
  13. ." posts = ".$this->getPostNum().","
  14. ." description = '".$this->getDescription()."'"
  15. ." WHERE forum_id = ".$update_id
  16. ." LIMIT 1");
  17.  
  18. ?>

no i print_r() zwraca mi:
Kod
PDO Object ( ) [result:private] => [sql:private] => UPDATE rbx_forums SET forum_id = 4, app_order = 5, subforums = 0, topics = 0, title = 'algebra', last_post_id = 0, last_topic_id = 0, active = , posts = 0, description = 'Zadania oraz materiały z wykładu' WHERE forum_id = 4 LIMIT 1

a PDO wyrzuca wyjątek:
Kod
exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 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 ' posts = 0, description = 'Zadania oraz materiały z wykładu' WHERE forum_id = 4 '
Go to the top of the page
+Quote Post
dr_bonzo
post 1.04.2006, 19:22:49
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


1. $this->isActive() wyswietla ci pusty string, wiec zapytanie wyglada:
  1. WHERE active = , posts = 3 ...

w powodu wyzej wymienionego: jesli w bazie zapisujesz stan active:
active: 1
non active: 0

to najlepiej tak samo zapisywac w obiekcie

  1. <?php
  2. public function activate(){
  3. $this->active = 1;
  4. }
  5.  
  6. public function deactivate() {
  7. $this->active = 0;
  8. }
  9.  
  10. public function isActive(){
  11. return $this->active !== 0;
  12. } 
  13. ?>


wtedy zapytanie bedzie prawidlowe.

Lub przy zapytaniu:

  1. <?php
  2. active = " . ( $this->isActive() ? 1 : 0 ) . ", posts = ". ....
  3. ?>


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Aztech
post 1.04.2006, 19:32:02
Post #5





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

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


Dzieki, pomogło. Wszystko guitar.gif Już zrozumiałem, gdzie popełniałem błąd.
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:23