Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zmiana wartosci rekordu
Wolfie
post 12.03.2009, 19:58:24
Post #1





Grupa: Zarejestrowani
Postów: 686
Pomógł: 0
Dołączył: 10.11.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam

Napisalem taki skrypcik treningowy, szczerze to praktycznie przepisalem go z ksiazki, niestety w kodzie jak sie okazuje jest sporo bledow a errata online wydaje sie niekompletna. Poproawilem z 3 bledy ale z tym nie potrafie sobie poradzic.
Chodzi o zmiane wartosci w tabeli mysql przez wywolanie odpowiedniej metody w klasie.
Oto kod.

  1. <?php
  2. //class.Widget.php
  3.  
  4. class Widget {
  5.  
  6.    private $id;
  7.    Private $name;
  8.    private $description; private $hDB;
  9.    private $needsUpdating = false;
  10.    
  11.    public function __construct($widgetID) {
  12.        //parametr widgetID to klucz główny rekordu
  13.        //w bazie danych zawierajacego dane
  14.        //tego obiektu
  15.        
  16.        //tworzy uchwyt połaczenia i zachowuje go w prywatnej zmiennej skladowej
  17.        $this->hDB = mysql_connect('localhost', 'root', "");
  18.        if(!is_resource($this->hDB)) {
  19.            throw new Exception ('Nie mozna polaczyc sie z baza danych.');
  20.            }
  21.            
  22.        $db = mysql_select_db ('webserv',$this->hDB);
  23.        
  24.        $sql = "SELECT nazwa, opis FROM artykul WHERE nr_artykulu = '$widgetID' ";
  25.        $rs = mysql_query($sql, $this->hDB);
  26.        if(!is_resource($rs)) {
  27.            throw new Exception ("Blad przy wykonywaniu instrukcji wyboru.");
  28.            }
  29.            
  30.        if(!mysql_num_rows($rs)) {
  31.            throw new Exception('Szukanego artykulu nie ma w bazie!');
  32.            }
  33.            
  34.        $data = mysql_fetch_array($rs);
  35.        $this->id = $widgetID;
  36.        $this->name = $data['nazwa'];
  37.        $this->description = $data['opis'];
  38.    
  39.    }
  40.    
  41.    public function getName() {
  42.        return $this->name;
  43.        }
  44.        
  45.    public function getDescription() {
  46.        return $this->description;
  47.        }
  48.        
  49.    public function setName($name) {
  50.        $this->name = $name;
  51.        $this->needsUpdating = true;
  52.        }
  53.    
  54.    public function setDescription($description) {
  55.        $this->description = $description;
  56.        $this->needsUpdating = true;
  57.        }
  58.    
  59.    public function __desctruct() {
  60.        if(!$this->needsUpdating) {
  61.            return;
  62.            }
  63.        
  64.        $sql = 'UPDATE artykul SET';
  65.        $sql .= "nazwa = '" .mysql_escape_string($this->name). "'.";
  66.        $sql .= "opis = '" .mysql_escape_string($this->description). "'.";
  67.        $sql .= "WHERE nr_artykulu = " .$this->id;
  68.        
  69.        $rs = mysql_query($sql, $this->hDB);
  70.        if(!is_resource($rs)) {
  71.            throw new Exception ('Wystapil blad podczas aktualizacji bazy danych');
  72.        }
  73.        
  74.    //koniec operacji na bazie danych. Zamkniecie połączenia.
  75.    mysql_close($this->hDB);
  76.    
  77.    }    
  78.  
  79. }
  80. ?>


A tutaj miejsce inicjalizacji obiketu oraz wywolanie metod :

  1. <?php
  2.  
  3. require_once('class.Widget.php');
  4.  
  5. try {
  6.    $objWidget = new Widget(1);
  7.    
  8.    print "Nazwa artykułu: " . $objWidget->getName(). "<br>\n";
  9.    print "Opis artykulu: " . $objWidget->getDescription(). "<br>\n";
  10.    
  11.    $objWidget->setName('Trampki');
  12.    $objWidget->setDescription('Trampki o duzym przebiegu!');
  13. } catch (Exception $e) {
  14.    die ("Wystapil problem: " . $e->getMessage());
  15.    }
  16. ?>


Jak zapewnia autor po kolejnym wywolaniu strony automatycznie powinny zmienic sie wartosci w bazie danych poprzez uzycie metod setName oraz setDescription. Jednak kolejne wywolania nic nie daja, dopiero po wyswietleniu wartosci po instrukcji try...catch widac wyswietla sie zmieniona wartosc , lecz w bazie danych pozostaje bez zmian.

Ten post edytował Wolfie 12.03.2009, 20:03:47
Go to the top of the page
+Quote Post

Posty w temacie
- Wolfie   Zmiana wartosci rekordu   12.03.2009, 19:58:24
- - Foxx   Musisz dodać jeszcze jedną linijkę niszczącą obiek...   12.03.2009, 20:06:12
- - Wolfie   Niestety nic to nie pomoglo , ciagle to samo.....   12.03.2009, 20:28:35
- - Foxx   Zmień metodę __destruct klasy Widget tak: [PHP] po...   12.03.2009, 20:35:13
- - Wolfie   CytatNazwa artykułu: Korale Opis art...   12.03.2009, 20:54:27
- - erix   Funkcji zamykania połączenia/etc nie powinno się u...   12.03.2009, 20:57:18
- - Mephistofeles   A zwróciłeś uwagę na " __desctruct()"? P...   12.03.2009, 21:01:37
- - erix   Ponieważ prowadzi to nieraz do nieprzewidywalnych ...   12.03.2009, 21:03:35
- - Mephistofeles   No OK, ale jak chcę automatycznie zapisać dane do ...   12.03.2009, 21:05:28
- - Wolfie   Chyba zaczyna sie robic OT. Ja chce tylko znac pop...   12.03.2009, 21:07:45
- - Mephistofeles   Zapytałem, czy zwróciłeś uwagę na błąd w nazwie de...   12.03.2009, 21:09:22
- - Wolfie   Wlasnie nie wiedzialem do kogo to pytanie Teraz j...   12.03.2009, 21:14:26
- - artur_dziocha   no to przejrzyj/wyświetl sobie zapytanie chyba coś...   12.03.2009, 21:20:34
- - Mephistofeles   To nie przecinki a kropki. Popraw. No i brakuje sp...   12.03.2009, 21:34:40
- - Wolfie   Wprowadzilem nieznaczne zmiany w zapytaniu , teraz...   12.03.2009, 21:35:15
- - Foxx   Wprowadź taką zmianę (o której ju...   12.03.2009, 21:37:04
- - Mephistofeles   Skoro trzymasz się wyjątków to lepiej - ...   12.03.2009, 21:38:53
- - Wolfie   Wyswietla sie taki komunikat : CytatSomething is ...   12.03.2009, 21:42:52
- - Mephistofeles   Spójrz wyżej! Brakuje ci przecinka.   12.03.2009, 21:44:14
- - Wolfie   Tez to zauwazylem po dokladnym przyjrzeniu sie dla...   12.03.2009, 21:46:05


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: 21.06.2025 - 12:19