plik który łączy z bazą
<? include("config.php"); class DB{ public $_lacz; public function __construct() { $this->_lacz = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); if(mysqli_connect_errno() != 0) { } } public function __destruct() { $this->_lacz->close(); } public function query($sql) { return $this->_lacz->query($sql); }
index.php
// include("db.class.php"); $db = new DB();
działa dobrze
chat.php
<?php require_once("chat.class.php"); $mode = $_POST['mode']; $id = 0; $chat = new Chat($db); if($mode == 'SendAndRetrieveNew') { // pobiera parametry wysłanej wiadomości z aplikacji $name = $_POST['name']; $message = $_POST['message']; $color = $_POST['color']; $id = $_POST['id']; // sprawdza, czy podane wartości są poprawne if ($name != '' && $message != '' && $color != '') { // wysyła wiadomość do bazy danych $chat->postMessage($name, $message, $color); } } // jeżeli ma być wywołana metoda DeleteAndRetrieve elseif($mode == 'DeleteAndRetrieveNew') { // usuwa istniejące wiadomości $chat->deleteMessages(); } // jeżeli ma być wywołana metoda Retrieve elseif($mode == 'RetrieveNew') { // poniera identyfikator ostatniej wiadomości pobranej przez klienta $id = $_POST['id']; } // czyści dane wyjściowe // nagłówki są wysyłane aby zapobiec zapisywaniu starych danych przez przeglądarki // pobiera nową wiadomośc z serwera ?>
klasa
<?php // klasa zawierająca funkcjonalności strony serwera class Chat { public function __construct($sql) { $this->sql = $sql; } // kasuje zawartość tabeli zawierającej wiadomości public function deleteMessages() { // tworzy zapytanie SQL, które dodaje nową wiadomość do serwera $query = $db->query('TRUNCATE TABLE chat'); // wykonuje zapytanie SQL $result = $this->mMysqli->query($query); } /* Metoda postMessages dodaje nową wiadomość do bazy - $name odpowiada nazwie użytkownika wysłanej wiadomości - $messsage to wysłana wiadomość - $color zawiera parametry koloru wybranego przez użytkownika */ public function postMessage($name, $message, $color) { // usuwa znaki specjalne przez dodaniem wiadomości do bazy $db = $this->sql; // tworzy zapytanie SQL, które dodaje nową wiadomość do serwera $query = $db->query('INSERT INTO chat(posted_on, user_name, message, color) ' . 'VALUES (NOW(), "' . $name . '" , "' . $message . '","' . $color . '")'); // wykonuje zapytanie SQL } /* Metoda retrieveMessages pobiera wiadomości, które zostały wysłane na serwer - parametr $id jest wysyłany przez klienta i odpowiada identyfikatorowi ostatniej wiadomości pobranej przez niego. Wiadomości o późniejszych id będą pobrane z serwera i wysłane klientowi w formacie XML */ public function retrieveNewMessages($id=0) { $db = $this->sql; // usuwa znaki specjalne przez dodaniem wiadomości do bazy $id = $db->real_escape_string($id); // tworzy zapytanie SQL, które pobiera wiadomość do serwera if($id>0) { // pobiera wiadomości świeższe niż te o danym $id $query = $db->query('SELECT chat_id, user_name, message, color, ' . 'DATE_FORMAT(posted_on, "%Y-%m-%d %H:%i:%s") ' . 'AS posted_on ' . 'FROM chat WHERE chat_id > ' . $id . ' ORDER BY chat_id ASC'); } else { // przy pierwszym uruchomieniu wyświetla ostatnich 50 wiadomości z serwera $query = $db->query('SELECT chat_id, user_name, message, color, posted_on FROM ' . '(SELECT chat_id, user_name, message, color, ' . 'DATE_FORMAT(posted_on, "%Y-%m-%d %H:%i:%s") AS posted_on ' . 'FROM chat ' . 'ORDER BY chat_id DESC ' . 'LIMIT 50) AS Last50 ' . 'ORDER BY chat_id ASC'); } // wykonuje zapytanie // tworzy odpowiedź XML $response = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; $response .= '<response>'; // wysyła czystą flagę $response .= $this->isDatabaseCleared($id); // sprawdza czy jest odpowiedź // przegląda w pętli wszystkie przechwycone wiadomości, aby stworzyć wiadomość wynikową while ($row = $query->fetch_array()) { $id = $row['chat_id']; $response .= '<id>' . $id . '</id>' . '<color><![CDATA[' . $color . ']]></color>' . '<time>' . $time . '</time>' . '<name><![CDATA[' . $userName . ']]></name>' . '<message><![CDATA[' . $message . ']]></message>'; } // zamyka połączenie z bazą, jak szybko jest to możliwe // kończy odpowiedź XML i wysyła ją $response = $response . '</response>'; return $response; } /* Metoda isDatabaseCleared sprawdza, czy baza została wyczyszczona od ostatniego wywołania serwera - parametr $id zawiera identyfikator ostatniej wiadomości pobranej rpzez klienta */ private function isDatabaseCleared($id) { if($id>0) { //sprawdzenie liczby wierszy o id mniejszym niż uzyskany od klienta mówi nam, czy baza była ostatnio czyszczona $check_clear = $db->query('SELECT count(*) old FROM chat where chat_id<=' . $id); $row = $check_clear->fetch_array(); // jeśli baza była czyszczona, tablica musi być przeładowana if($row['old']==0) return '<clear>true</clear>'; } return '<clear>false</clear>'; } } ?>
i tu zmieniłem właśnie zapytania na moje czyli $db->query()
wiadomości nie pokazuje a jak chce dodac to otrzymuje błąd
Kod
Błąd podczas dostępu do serwera!
TypeError: xmlHttpGetMessages.responseXML is null
TypeError: xmlHttpGetMessages.responseXML is null
i plik .js
w nim nic nie zmieniałem
Proszę o pomoc.