Pytanie: czy zmierzam w dobrym kierunku ? Podam tylko najważniejsze pliki.
Jest to aplikacja czatu.
Za krytykę dziękuję - to się przyda.
Plik czat.php
<?php //dołączamy połączenie z bazą danych require_once("BazaDanych.php"); //walidujemy przyjęte treści wiadomości class WalidacjaWiadomosci { protected $wiadomosc; protected function waliduj($wiadomosc) { //tutaj wstawiamy walidacje otrzymanych danych tekstowych $this->wiadomosc = $wiadomosc; return $this->wiadomosc; } } //zapisujemy wiadomość we bazie danych class ZapisywanieWiadomosciWBazieDanych extends WalidacjaWiadomosci { private $db; private $wiadomoscDoZapisania; public function __construct($wiadomosc) { $instance = PolaczenieZBazaDanych::getInstance(); $this->db = $instance->getConnection(); $this->wiadomoscDoZapisania = $this->waliduj($wiadomosc); $this->zapiszWiadomoscWBazieDanych($this->wiadomoscDoZapisania); } private function zapiszWiadomoscWBazieDanych($wiadomoscDoZapisania) { $sql = "INSERT INTO czat (wiadomosci) VALUES ('".$wiadomoscDoZapisania."')"; if ($this->db->query($sql)) return true; else return false; } } //odczytujemy wiadomość z bazy danych class OdczytywanieWiadomosci { private $idWiadomosci; private $db; public function __construct($idWiadomosci) { $instance = PolaczenieZBazaDanych::getInstance(); $this->db = $instance->getConnection(); $this->idWiadomosci = $idWiadomosci; $this->odczytywanieWiadomosci($this->idWiadomosci); } private function odczytywanieWiadomosci($idWiadomosci) { $sql = "SELECT * FROM czat WHERE id > '".$idWiadomosci."'"; $rezultat = $this->db->query($sql); while ($wiersz = mysqli_fetch_assoc($rezultat)) { http://www.php.net/echo "<p class='id' id=".$wiersz['id'].">" . $wiersz['wiadomosci'] . "</p>"; } } } //zapis wiadomości jeśli odebrano zmienną $_POST['zapiszWiadomosc'] if (http://www.php.net/isset($_POST['zapiszWiadomosc'])) { $ZapisywanieWiadomosciWBazieDanych = new ZapisywanieWiadomosciWBazieDanych($_POST['trescWiadomosci']); } //odebranie wiadomości jeśli odebrano zmienną $_POST['odbierzWiadomosc'] if (http://www.php.net/isset($_POST['odbierzWiadomosc'])) { $OdczytywanieWiadomosci = new OdczytywanieWiadomosci($_POST['idWiadomosci']); } ?>
<?php //połączenie z bazą danych stosując singleton class PolaczenieZBazaDanych { private http://www.php.net/static $instance = null; private $db; private $host = 'localhost'; private $user = 'root'; private $pass = 'haslo'; private $name = 'czat'; private function __construct() { $this->db = new mysqli($this->host,$this->user,$this->pass,$this->name); } public http://www.php.net/static function getInstance() { if(!self::$instance) { self::$instance = new PolaczenieZBazaDanych(); } return self::$instance; } public function getConnection() { return $this->db; } }
A to rok 2010 mamy ? Brak composer, brak DI, brak PSR, podatne na sql injection, jakiś miks html i php.
Naduzywasz tworzenie prywatnych wlasiciwosci klasy. Uzywasz ich jako zmiennej lokalne a i tak robisz z nich wlasciwosci klasy. TO nie ma zadnego sensu. Uzywajac klas nie znaczy, ze nie mozesz uzywac zmiennych lokalnych
ID wiadomosci to liczba wiec traktuj to jako liczbe anie jako tekst.
No i to co juz napisano: takie kody pisalo sie w sredniowieczu To calosc jest do wyrzucenia i napisania na nowo
Faktycznie ten kod wygląda jak z jakiegoś poradnika Pana Zenka z przed ~20 lat.
Najlepiej zainteresuj się jakimś frameworkiem PHP'a, szybciej zrozumiesz jak to powinno wyglądać i zostaw jQuery (szkoda na to czasu), jest masa dobrych frameworków JS (vue, react, angular), które robią robotę czyściej.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)