2015-09-03 23 views
-1

我在mydb.php:

<?PHP 
class MyDB extends mysqli 
{ 
    //Tutaj treść metod getQuerySingleResult, getQueryResultAsTableRows,        getPagination 
    function getQuerySingleResult($query) 
    { 
     //Brak obiektu $dbo 
     if(!$this->dbo) return false; 
     //Wykonanie zapytania 
     if(!$result = $this->dbo->query($query)){ 
      //echo 'Wystąpił błąd (getQuerySingleResult): nieprawidłowe  zapytanie...'; 
      return false; 
     } 
     if($row = $result->fetch_row()){ 
      //Zwrócenie wyniku 
      return $row[0]; 
     } 
     else{ 
      //Brak wyników zapytania 
      return false; 
     } 
    } 

    function getQueryResultAsTableRows($query, $colNames = false) 
    { 
     //Brak obiektu $dbo 
     if(!$this->dbo) return false; 
     //Odrzucone zapytanie 
     if(!$result = $this->dbo->query($query)) return false; 
     if(!$columns = $result->fetch_fields()) return false; 
     //Zmienna przechowująca wynik działania metody 
     $str = ''; 
     //Uzyskanie nazw kolumn, o ile są potrzebne 
     $colsNo = count($columns); 
     if($colNames){ 
      $str .= '<tr>'; 
      foreach($columns as $col){ 
       $str .= '<td>' . $col->name . '</td>'; 
      } 
      $str .= '</tr>'; 
     } 
     //Uzyskanie wyników zapytania 
     while($row = $result->fetch_row()){ 
      $str .= "<tr>"; 
      foreach($row as $val){ 
       $str .= "<td>$val</td>"; 
      } 
      $str .= "</tr>"; 
     } 
     //Zwrócenie ostatecznego wyniku 
     return $str; 
    } 

    function getPagination($page, $pages, $link, $msg) 
    { 
     $str = ''; 
     for($i = 0; $i < $pages; $i++){ 
      if($i != $page){ 
       $str .= "<a href=\"$link&amp;page=$i\">".($i+1)."</a>"; 
      } 
      else{ 
       $str .= '<span class="activePaginationPage">' . ($i+1) 
        . '</span>'; 
      } 
      $str .= '<span class="space"> </span>'; 
     } 
     $str = $msg . $str; 
     return $str; 
    } 

} 
?> 

和basket.php:

<?php 
class Basket 
{ 
    private $dbo = null; 
    function __construct($dbo) 
    { 
     $this->dbo = $dbo; 
     //Utworzenie koszyka, jeśli to konieczne 
     if(!isset($_SESSION['basket'])){ 
      $_SESSION['basket'] = array(); 
     } 
    } 
    function add() 
    { 
     //Sprawdzenie poprawności parametru id 
     if(!isset($_GET['id'])){ 
      return FORM_DATA_MISSING; 
     } 
     if(($id = intval($_GET['id'])) < 1){ 
      return INVALID_ID; 
     } 
     //Sprawdzenie, czy istnieje książka o podanym id 
     $query = "SELECT COUNT(*) FROM ksiazki WHERE id=$id"; 
     if(!$this->dbo->getQuerySingleResult($query)){ 
      return INVALID_ID; 
     } 
     //Zapisanie identyfikatora książki w koszyku 
     if(isset($_SESSION['basket'][$id])){ 
      $_SESSION['basket'][$id]++; 
     } 
     else{ 
      $_SESSION['basket'][$id] = 1; 
     } 
     return ACTION_OK; 
    } 
    function show($msg, $allowModify = true) 
    { 
     echo '<div id="basketDiv">'; 
     if(count($_SESSION['basket']) == 0){ 
      echo 'Koszyk jest pusty.'; 
     } 
     else{ 
      //Pobranie listy identyfikatorów dla warunku zapytania 
      $ids = implode(',', array_keys($_SESSION['basket'])); 
      //Pobranie danych dotyczących książek z koszyka 
      $query = 'SELECT `id`, `tytul`, `cena` FROM ksiazki '; 
      $query .= 'WHERE id IN('.$ids.') ORDER BY `tytul`'; 
      if($result = $this->dbo->query($query)){ 
       echo '<form action="index.php?action=modifyBasket" method="post">'; 
       echo '<table>'; 
       //Górny wiersz tabeli z komunikatem z $msg 
       echo '<tr><td colspan="4" class="textMiddle">'.$msg.'</td></tr>'; 
       //Nagłówki kolumn 
       echo '<tr><th>Tytuł</th><th class="textRight">Cena</th>'; 
       echo '<th class="textRight">Liczba</th><th class="textRight">'; 
       echo 'Wartość</th></tr>'; 
       //Odczytanie wyników zapytania 
       $suma = 0; 
       while($row = $result->fetch_row()){ 
        //Wyświetlanie zawartości koszyka 
       } 
       //Formatowanie sumy zamówienia 
       $suma = sprintf("%01.2f", $suma); 
       echo '<tr><td colspan="3">Całkowita wartość</td>'; 
       echo '<td class="textRight">'.$suma.'</td></tr>'; 
       if($allowModify){ 
        echo '<tr><td colspan="4" class="textRight"><input type="submit"'; 
        echo 'value="Zapisz zmiany"></td></tr>'; 
       }  
       echo '<tr><td colspan="4" class="textRight">'; 
       if($allowModify){ 
        //Odnośnik do podsumowania zamówienia 
        echo '<a href="index.php?action=checkout">Do kasy</a>'; 
       } 
       else{ 
        //Odnośnik do zapisywania zamówienia w systemie 
        echo '<a href="index.php?action=saveOrder">'; 
        echo 'Złóż zamówienie</a>'; 
       } 
       echo '</td></tr>'; 
       echo '</table>'; 
      } 
      else{ 
       echo 'Błąd serwera. Zawartość koszyka nie jest dostępna.'; 
      } 
     } 
     echo '</div>'; 
    } 

    function modify() 
    { 
     foreach($_SESSION['basket'] as $key => $val){ 
      if(!isset($_POST[$key])){ 
       unset($_SESSION['basket'][$key]); 
      } 
      else if(intval($_POST[$key]) < 1){ 
       unset($_SESSION['basket'][$key]); 
      } 
      else{ 
       $_SESSION['basket'][$key] = intval($_POST[$key]); 
      } 
     } 
    } 

    function saveOrder(&$orderId) 
    { 
     //Sprawdzenie, czy koszyk ma zawartość 
     if(count($_SESSION['basket']) < 1){ 
      return EMPTY_BASKET; 
     } 
     //Sprawdzenie, czy użytkownik jest zalogowany 
     if(!isset($_SESSION['userId'])){ 
      return LOGIN_REQUIRED; 
     } 
     //Pobranie identyfikatorów książek z koszyka 
     $ids = implode(',', array_keys($_SESSION['basket'])); 
     $userId = $_SESSION['userId']; 
     //Wyłączenie automatycznego zatwierdzania transakcji 
     $this->dbo->autocommit(false); 
     //Utworzenie nowego zamówienia 
     $query = 'INSERT INTO zamowienia '; 
     $query .= "VALUES(0, $userId, NOW(), NULL, 0)"; 
     if(!$this->dbo->query($query)){ 
      return SERVER_ERROR; 
     } 
     if(($orderId = $this->dbo->insert_id) < 1){ 
      return SERVER_ERROR; 
     } 
     //Pobranie aktualnych cen książek 
     $query = "SELECT id, cena FROM ksiazki WHERE id IN($ids) "; 
     if(!$result = $this->dbo->query($query)){ 
      return SERVER_ERROR; 
     } 
     //Zapisanie danych do tabeli KsiazkiZamowienia 
     while($row = $result->fetch_row()){ 
      $id = $row[0]; 
      $cena = $row[1]; 
      $ile = $_SESSION['basket'][$row[0]]; 
      $query = "INSERT INTO ksiazkizamowienia VALUES($id, $orderId, "; 
      $query .= "$ile, $cena)"; 
      //Jeśli nie udało się wykonać zapytania: 
      if(!$this->dbo->query($query)){ 
       return SERVER_ERROR; 
      } 
      //Jeśli liczba dodanych rekordów jest inna niż 1: 
      if($this->dbo->affected_rows <> 1){ 
       return SERVER_ERROR; 
      } 
     } 
     //Zatwierdzenie transakcji 
     $this->dbo->commit(); 
     //Wyczyszczenie koszyka 
     $_SESSION['basket'] = array(); 
     return ACTION_OK; 
    } 

} 
?> 

爲什麼我有錯誤

注意:未定義的屬性:MyDB :: $ dbo在C:\ xampp \ htdocs .. \ mydb.php上線8/

請幫幫我。 我現在不用我必須做什麼呢?

+0

你的'MyDB'類使用'$ this-> dbo',但它永遠不會定義'dbo'屬性。在Basket類中有一個'dbo'屬性。 – Barmar

+0

所以我如何改變代碼? –

+0

您需要添加一個設置'$ this-> dbo'的構造函數。 – Barmar

回答

0

由於MyDB延伸mysqli,您不需要單獨的屬性來保存數據庫連接。 mysqli對象本身代表連接,因此您可以在整個代碼中只使用$this而不是$this->dbo

+0

我改變像你寫的,但沒有任何作品 –