我有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&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;
}
}
?>
为什么我有错误
注意:未定义的属性:第8行的C:\ xampp \ htdocs .. \ mydb.php中的MyDB :: $ dbo /
请帮帮我。 我现在不必对此做些什么?
答案 0 :(得分:0)
由于int
扩展(int)ch
,您不需要单独的属性来保存数据库连接。 ch
对象本身代表连接,因此您只需在代码中使用MyDB
代替mysqli
。