Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrypt czatu do oceny
huberthx
post 16.07.2020, 19:28:00
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 1.01.2016

Ostrzeżenie: (0%)
-----


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
  1. <?php
  2. //dołączamy połączenie z bazą danych
  3. require_once("BazaDanych.php");
  4. //walidujemy przyjęte treści wiadomości
  5. class WalidacjaWiadomosci
  6. {
  7. protected $wiadomosc;
  8. protected function waliduj($wiadomosc)
  9. {
  10. //tutaj wstawiamy walidacje otrzymanych danych tekstowych
  11. $this->wiadomosc = $wiadomosc;
  12. return $this->wiadomosc;
  13. }
  14. }
  15. //zapisujemy wiadomość we bazie danych
  16. class ZapisywanieWiadomosciWBazieDanych extends WalidacjaWiadomosci
  17. {
  18. private $db;
  19. private $wiadomoscDoZapisania;
  20. public function __construct($wiadomosc)
  21. {
  22. $instance = PolaczenieZBazaDanych::getInstance();
  23. $this->db = $instance->getConnection();
  24. $this->wiadomoscDoZapisania = $this->waliduj($wiadomosc);
  25. $this->zapiszWiadomoscWBazieDanych($this->wiadomoscDoZapisania);
  26. }
  27. private function zapiszWiadomoscWBazieDanych($wiadomoscDoZapisania)
  28. {
  29. $sql = "INSERT INTO czat (wiadomosci) VALUES ('".$wiadomoscDoZapisania."')";
  30. if ($this->db->query($sql))
  31. return true;
  32. else
  33. return false;
  34. }
  35. }
  36. //odczytujemy wiadomość z bazy danych
  37. class OdczytywanieWiadomosci
  38. {
  39. private $idWiadomosci;
  40. private $db;
  41. public function __construct($idWiadomosci)
  42. {
  43. $instance = PolaczenieZBazaDanych::getInstance();
  44. $this->db = $instance->getConnection();
  45. $this->idWiadomosci = $idWiadomosci;
  46. $this->odczytywanieWiadomosci($this->idWiadomosci);
  47. }
  48. private function odczytywanieWiadomosci($idWiadomosci)
  49. {
  50. $sql = "SELECT * FROM czat WHERE id > '".$idWiadomosci."'";
  51. $rezultat = $this->db->query($sql);
  52. while ($wiersz = mysqli_fetch_assoc($rezultat))
  53. {
  54. echo "<p class='id' id=".$wiersz['id'].">" . $wiersz['wiadomosci'] . "</p>";
  55. }
  56. }
  57. }
  58. //zapis wiadomości jeśli odebrano zmienną $_POST['zapiszWiadomosc']
  59. if (isset($_POST['zapiszWiadomosc']))
  60. {
  61. $ZapisywanieWiadomosciWBazieDanych = new ZapisywanieWiadomosciWBazieDanych($_POST['trescWiadomosci']);
  62. }
  63. //odebranie wiadomości jeśli odebrano zmienną $_POST['odbierzWiadomosc']
  64. if (isset($_POST['odbierzWiadomosc']))
  65. {
  66. $OdczytywanieWiadomosci = new OdczytywanieWiadomosci($_POST['idWiadomosci']);
  67. }
  68. ?>

Plik BazaDanych.php - singleton
  1. <?php
  2. //połączenie z bazą danych stosując singleton
  3. class PolaczenieZBazaDanych {
  4. private static $instance = null;
  5. private $db;
  6.  
  7. private $host = 'localhost';
  8. private $user = 'root';
  9. private $pass = 'haslo';
  10. private $name = 'czat';
  11.  
  12. private function __construct()
  13. {
  14. $this->db = new mysqli($this->host,$this->user,$this->pass,$this->name);
  15. }
  16.  
  17. public static function getInstance()
  18. {
  19. if(!self::$instance)
  20. {
  21. self::$instance = new PolaczenieZBazaDanych();
  22. }
  23.  
  24. return self::$instance;
  25. }
  26.  
  27. public function getConnection()
  28. {
  29. return $this->db;
  30. }
  31. }

Plik javascript odebranieWiadomosciZSerwera.js

$(document).ready(function(){
//odbieranie wiadomośći z serwera co określony czas
function odebranieWiadomosciZSerwera()
{
$.ajax({
url: "./../czat/php/czat.php",
method: "POST",
data: {
odbierzWiadomosc: true,
idWiadomosci: $("#wiadomosci p.id").last().attr('id'),
},
}).done(function(odpowiedz){
$("#wiadomosci").append(odpowiedz);
$('#wiadomosci').animate({
scrollTop: $('#wiadomosci')[0].scrollHeight}, "slow");
});
};
setInterval(odebranieWiadomosciZSerwera,1500);
});

Plik javascript wysylanieWiadomosciNaSerwer.js

$(document).ready(function(){
//wysyłanie wiadomości na serwer po kliknięciu buttona
$("#wyslijWiadomosc").click(function(){
$.ajax({
url: "./../czat/php/czat.php",
method: "POST",
data: {
zapiszWiadomosc: true,
trescWiadomosci: $("#trescWiadomosci").val(),
},
}).done(function(odpowiedz){
});
$("#trescWiadomosci").val("");
});
});


Liczę na konstruktywną krytyke
Dziękuję i pozdrawiam
Go to the top of the page
+Quote Post
viking
post 16.07.2020, 19:36:24
Post #2





Grupa: Zarejestrowani
Postów: 6 375
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A to rok 2010 mamy ? Brak composer, brak DI, brak PSR, podatne na sql injection, jakiś miks html i php.


--------------------
Go to the top of the page
+Quote Post
nospor
post 17.07.2020, 08:08:42
Post #3





Grupa: Moderatorzy
Postów: 36 523
Pomógł: 6309
Dołączył: 27.12.2004




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 wink.gif To calosc jest do wyrzucenia i napisania na nowo


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
netir
post 27.07.2020, 18:52:44
Post #4





Grupa: Zarejestrowani
Postów: 44
Pomógł: 5
Dołączył: 20.05.2019

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

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: 12.11.2024 - 19:59