Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak zabrać się za edycję danych w bazie danych?
Forum PHP.pl > Forum > Przedszkole
adolf1945
Witam

Napisałem sobie klasę obsługującą dodawanie komentarzy do bazy danych:
  1.  
  2. <?php
  3.  
  4. class Comments {
  5. public $autor;
  6. public $content;
  7.  
  8. public function __construct() {
  9. $this->autor = $this->filter($_POST['autor']);;
  10. $this->content = $this->filter($_POST['content']);
  11. }
  12.  
  13. public function addComment()
  14. {
  15. mysql_connect("localhost","root","") or die(mysql_error());
  16. return mysql_query("INSERT INTO comments(autor, content) VALUES ('{$this->autor}','{$this->content}')");
  17. }
  18.  
  19. public function editComment(){
  20.  
  21. }
  22.  
  23. public function filter($var)
  24. {
  25. return preg_replace('/[^a-zA-Z0-9]/','',$var);
  26. }
  27. }


  1. <form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
  2. <table>
  3. <tr><td>Autor:</td><td><input type="text" name="autor"/></td></tr>
  4. <tr><td>Content:</td><td><input type="text" name="content"/></td></tr>
  5. </table>
  6. <input type="submit" name="dodaj" value="Dodaj"/>
  7. </form>
  8.  
  9. <?php
  10. include_once('/class.comments.php');
  11. $comments = new Comments;
  12. $comments->addComment();
  13.  
  14. ?>


Jak zabrać się za metodę która będzie edytowała wybrany komentarz?
mortus
Twoja tabela komentarzy jest "zbyt skromna". Komentarz mimo wszystko powinien mieć swój unikalny identyfikator (id), jak również powinien dotyczyć, "komentować" coś, czego identyfikator również powinien się znaleźć w tabeli komentarzy. Np. tabela komentarzy dla artykułów (articles):
  1. CREATE TABLE comments (
  2. id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. article_id int(10) UNSIGNED NOT NULL,
  4. author varchar(40) NOT NULL,
  5. content text NOT NULL,
  6. PRIMARY KEY comment_id_pk (id)
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8


Wtedy model/klasę komentarzy trzeba przebudować, uwzględniając id i article_id. Jeśli chodzi o edycję, to zauważ, że komentować można tylko określone komentarze. W Twoim przypadku będą to komentarze o określonym identyfikatorze (id), który należy przekazać metodzie editComment(). Zatem będzie ona wyglądać tak:
  1. public function editComment($id) {
  2. mysql_connect("localhost","root","") or die(mysql_error());
  3. $sql = "SELECT * FROM comments WHERE id = $id";
  4. $wyniki = mysql_query($sql);
  5. // wyciągamy dane i zwracamy w odpowiadającej nam formie
  6. return $dane;
  7. }

Tak zwrócone dane wypisujemy do formularza w pliku widoku.

Kilka uwag:
- nazwa klasy powinna dotyczyć pewnego, jednego obiektu, bardziej odpowiednia byłaby nazwa Comment, bo nazwa Comments wskazuje na zbiór komentarzy, a my operujemy/obsługujemy jeden komentarz,
- wewnątrz klasy nie powinieneś korzystać z tablic superglobalnych, jak $_GET, czy $_POST,
- zamiast tego możesz je przekazać jako parametr w konstruktorze
  1. public function __construct(array $formData) { }
  2. //i wywołanie
  3. $comment = new Comment($_POST);

- do walidacji/filtrowania danych powinieneś użyć osobnej klasy,
- obsługę bazy danych również mogłaby zapewnić osobna klasa.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.