System newsów (OOP) - dodanie danych do bazy

0

Witam. W ramach ćwiczeń zabrałem się za napisanie bardzo prostego systemu newsów, który ma umożliwiać:

  • wyświetlanie wszystkich newsów
  • dodawanie newsa

Mam już pewien szkielet tego systemu, jednak nie za bardzo wiem W KTÓRYM MIEJSCU wpleść kod odpowiedzialny za dodanie newsa do db.

class.news.php

<?php
class News {

	private $_news_id;
	private $_author;
	private $_title;
	private $_content;
	
	public function __construct($_news_id,$_author,$_title,$_content)
	{
		$this->_news_id = $_news_id;
		$this->_author = $_author;
		$this->_title = $_title;
		$this->_content = $_content;
	} 

	//Settery
	public function setAuthor($author) {
		$this->_author = $author;
	}
	public function setTitle($title) {
		$this->_title = $title;
	}
	public function setContent($content) {
		$this->_content = $content;
	}
	//gettery
	public function getNewsId() {
		return $this->_news_id;
	}
	public function getAuthor() {
		return $this->_author;
	}
	public function getTitle() {
		return $this->_title;
	}
	public function getContent() {
		return $this->_content;
	}

	
}
?>

index.php

 
<?php
	include_once('connectDb.php');
	require_once('class.news.php');

	echo '<a href="index.php?mod=add">Dodaj</a>';

	if(isset($_GET['mod'])) {

		if($_GET['mod']=="add")
		{
			echo '
			<form action="index.php" method="post">
			<input type="text" name="author" /><br />
			<input type="text" name="title" /><br />
			<textarea name="content"></textarea><br />
			<input type="submit" name="send" />
			</form>
			';
		}

	}
	elseif(isset($_POST['send'])) {
					   //id,autor,tytul,tresc
		$news = new News('x',$_POST['author'],$_POST['title'],$_POST['content']);
		
	}
?>

Jak widać, po kliknięciu w przycisk następuje utworzenie obiektu. Czy konstruktor jest w ogóle potrzebny? Czy zrobić tak, by w setterach wkleić kod z INSERTami i uruchamiać settery po kolei? Jeszcze trudno mi się w tym połapać :P

0

Zrobić nową metodę i wywołać ją zaraz po utworzeniu obiektu albo jeszcze lepiej poczytać na temat MVC.

0

Trochę lepiej by było gdybyś podzielił to na widok i kontroler (model już masz):

index.php

<?php
    include_once('connectDb.php');
    require_once('class.news.php');

// przygotowanie danych
 
   $mod_add = false;
   $do_send = false;

   if(isset($_GET['mod'])) {
         if($_GET['mod']=="add") {
            $mod_add = true;
         }
   } 
    elseif(isset($_POST['send'])) {
                       //id,autor,tytul,tresc
        $news = new News('x',$_POST['author'],$_POST['title'],$_POST['content']);
        $do_send = true; 
    }

    // uruchomienie szablonu
    require_once('index.tpl.php');
    // specjalnie bez konca skryptu 

// index.tpl.php

<a href="index.php?mod=add">Dodaj</a>
 
<?php
    if($mod_add) {
?>
            <form action="index.php" method="post">
            <input type="text" name="author" /><br />
            <input type="text" name="title" /><br />
            <textarea name="content"></textarea><br />
            <input type="submit" name="send" />
            </form>
<?php
    }

Jeszcze lepiej by było gdybyś użył jakiegoś systemu szablonów, np. Smarty, chociaż PHP jako język szablonów wykorzystywany jest np. w Wordpress.

0

Kod, który napisałeś nie różni się wiele od mojego kodu. Zwróć uwagę, że warunek, przykładowo if($mod_add) byłby sprawdzany i tak tylko raz, więc po co tworzyć dodatkowe zmienne? Z require'a szablonu jak najbardziej skorzystam.

0
Webowiec napisał(a):

Kod, który napisałeś nie różni się wiele od mojego kodu. Zwróć uwagę, że warunek, przykładowo if($mod_add) byłby sprawdzany i tak tylko raz, więc po co tworzyć dodatkowe zmienne? Z require'a szablonu jak najbardziej skorzystam.

Różnice:
a) kod HTML jest znacznie prostszy, dzięki czemu bardziej zrozumiały dla kogoś kto chce poprawić tylko HTML/CSS
b) nie ma "krzywego" echo, który powinien być escapowany, a najlepiej używać heredoc: http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
c) kod PHP (logika aplikacji) nie zawiera śmieci HTML-owych

To co podałeś, to bardzo prosty przykład, ale przy trudniejszych przypadkach taka "zupa tagów" potrafi być kompletnie niezrozumiała.

0

Polecam ten kurs https://jream.com/lab

1 użytkowników online, w tym zalogowanych: 0, gości: 1