Coś próbuję sklecić ale nie idzie mi to jakoś. Rzućcie proszę okiem na te kody z 2 plików.
Mam następujące problemy:
-gdy wyślę pusty formularz zadziała walidacja danych z metody validateInput() jednakże mimo tego rekord dodaje się do bazy danych:
-nie wiem jak przypisać dane z formularza do tego obiektu:
$ins->addNews('topic', 'news');
a konkretniej jak wstawić za topic i news odpowiednie dane.
Próbuję tak:
$ins->addNews($topic, $news);
ale otrzymuję:
Notice: Undefined variable: topic in C:\xampp\htdocs\CMS\add_news.php on line 45
Próbuję tak
$ins->addNews($this->topic, $this->news);
ale otrzymuję:
Fatal error: Using $this when not in object context in C:\xampp\htdocs\CMS\add_news.php on line 45
Klasa:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
class ValidateUrl{
private $_dbHandler;
public function __construct($db){
$this->_dbHandler = $db;
}
private $topic;
private $news;
public function filterTopic(){
$this->topic = $topic = isset($_POST['topic']) ? $_POST['topic'] : false;
$this->news = $news = isset($_POST['news']) ? $_POST['news'] : false;
return false;
}
public function validateInput(){
if(empty($this->topic)) return print 'You must enter topic!';
else if(empty($this->news)) return print 'You must enter news!';
return false;
}
public function addNews($topic, $news){
$add_date = date('Y-m-d H:i:s');
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$nick = 'admin';
$query = $this->_dbHandler->prepare("INSERT INTO `news` (`nick`, `date`, `topic`, `news`) VALUES (:nick, :add_date, :topic, :news)");
$query->bindValue(":nick", $nick, PDO::PARAM_STR);
$query->bindValue(":add_date", $add_date, PDO::PARAM_INT);
$query->bindValue(":topic", $topic, PDO::PARAM_STR);
$query->bindValue(":news", $news, PDO::PARAM_STR);
if($query->execute() == false){
print_r($query->errorInfo());
return false;
}else{
return true;
}
}
}
?>
I wywoływanie klasy:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Add news - CMS</title>
<style>
a { color: #000; text-decoration:none; }
a:hover { color: #40b000; }
nav { text-align:center; width: 50%; }
nav li { display: inline; list-style-type:none; }
textarea { width: 250px; height: 150px; }
.name { font-size: 1.250em; text-align: center; }
.content { text-align:center; margin: 120px; }
</style>
</head>
<body>
<div class="name">
<p>Content management system</p>
</div>
<nav>
<ul>
<li><a href="page">Home page</a></li>
<li><a href="add_news">Add news</a></li>
</ul>
</nav>
<div class="content">
<form action="add_news" method="post">
<p>Enter your news topic:</p>
<input type="text" name="topic" placeholder="topic"/>
<p>Enter your news</p>
<textarea type="text" name="news" placeholder="news"></textarea>
<p><button type="submit" name="submit_news">Add news</button></p>
</form>
</div>
<?php
require_once 'sql_database.class.php';
require_once 'add_news.class.php';
if(isset($_POST['submit_news'])){
$dbObject = new SqlDatabase();
$ins = new ValidateUrl($dbObject->getInstance());
$ins->filterTopic();
$ins->validateInput();
$ins->addNews('topic', 'news');
}
?>
</body>
</html>
Może ktoś poprawić mi mój kod? Męczę się z nim już trochę czasu i nie mogę tego zrobić. Próbuję się uczyć programowania obiektowego w PHP lecz jak na razie początki są ciężkie. Proszę o pomoc.