Дело в том что я завис на одном ньюансе. Я сейчас для сайта на ООП делаю форму для статей, новых статей.
У меня есть клас ( adminConn.class.php ) в этом классе я делал соединение с базой данных БД
class adminConn{
protected $host;
protected $user;
protected $pass;
protected $db;
public function __construct($name = NULL){
//Чтение данных с файла ./administrator/host.txt
$filename_host = "./host.txt";
$handle = fopen($filename_host, "r");
$this->host = fread($handle, filesize($filename_host));
fclose($handle);
/////////////////////////////////////////////////////////////////////////////////////
//Чтение данных с файла ./administrator/user.txt
$filename_user = "./user.txt";
$handle = fopen($filename_user, "r");
$this->user = fread($handle, filesize($filename_user));
fclose($handle);
/////////////////////////////////////////////////////////////////////////////////////
//Чтение данных с файла ./administrator/pass.txt
$filename_pass = "./pass.txt";
$handle = fopen($filename_pass, "r");
$this->pass = fread($handle, filesize($filename_pass));
fclose($handle);
/////////////////////////////////////////////////////////////////////////////////////
//Чтение данных с файла ./administrator/db.txt
$filename_db = "./db.txt";
$handle = fopen($filename_db, "r");
$this->db = fread($handle, filesize($filename_db));
fclose($handle);
/////////////////////////////////////////////////////////////////////////////////////
if($mysqli = new mysqli($this->host, $this->user, $this->pass, $this->db)){
$this->connection = $mysqli;
}else{
echo "Не получилось соединится";
}
}
}
Потом я создал папку ( mod_articles ) и в этой папке у меня папка CSS и 2-а файла.
articles_edit.php
addArticles.class.php
В файле articles_edit.php Я отрисовал форму.
<?php
require_once(dirName(__FILE__).'/addArticles.class.php');
?>
<?php
if($_SERVER['REQUEST_METHOD']=="POST"){
$pagess = $_POST['pages'];
$titlee = $_POST['title'];
$short_textt = $_POST['short_text'];
$all_textt = $_POST['editor1'];
addArticles::add($pagess, $titlee, $short_textt, $all_textt);
}
?>
<div class="articles_short_content" align="left">
<div class='pages_content' style='background-color:#d9d8d6;' align='center'><b>Страница добавления новой статьи</b></div>
<form action='<?php $_SERVER['PHP_SELF'] ?>' method='POST'>
<input type='hidden' name='pages' value='articles'/>
<div class='pages_content' style='padding:3px; background-color:#FFFFFF:'>
<input type='text' name='title' size='50'/> - Наименование статьи
</div>
<div class='pages_content' style='padding:3px; background-color:#FFFFFF;'>
<input type='text' name='short_text' size='50' /> - Короткое описаниестатьи
</div>
<div class='pages_content' style='padding:3px; background-color:#FFFFFF;' align='center'><b>Полный текст статьи</b><br>
<textarea name='editor1' id='editor1' style='width: 99%; height: 300px;'>
</textarea>
<script type='text/javascript'>
CKEDITOR.replace('editor1');
</script>
</div>
<input type='submit' />
</form>
</div>
А в файле addArticles.class.php я пытаюсь залить данные с формы в таблицу.
require($_SERVER['DOCUMENT_ROOT'].'/administrator/class/adminConn.class.php');
class addArticles extends adminConn{
public function __construct(){
parent::__construct();
}
public function add($pagess,$titlee,$short_textt,$all_textt){
if(!empty($pagess) and !empty($titlee) and !empty($short_textt) and !empty($all_textt)){
$sql_add = "INSERT INTO articles SET pages = '$pagess', title = '$titlee', short_article = '$short_textt', articles = '$all_textt'";
if(!$result = $this->connection->query($sql_add)){
/*if(!$result){*/
echo "<div class='pages_content' style='background-color:red;' align='center'><font color=#FFFFFF><b>".strtoupper('Не возможно добавить статью')."</b></font></div>";
}else{
echo "<div class='pages_content' style='background-color:red;' align='center'><font color=#FFFFFF><b>".strtoupper('Статья успешно добавлена')."</b></font></div>";
}
//}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////
}
Почти все работает, за одним исключением. Когда данные летят в addArticles.class.php
то мне вместо результатов ( ДОБАВИЛОСЬ или НЕТ ) вылазит ошибка
Fatal error: Call to a member function query() on a non-object in Z:\home\oop_mysayt\www\administrator\modules\mod_articles\addArticles.class.php on line 15
Ругается вот на эту строчку
if(!$result = $this->connection->query($sql_add)){
в файле addArticles.class.php
Подскажите пожалуйста в чем моя ошибка, Я просто подобным образом делал редактирование статей и удаление, но там все отработалось нормально и без всяких проблем, тем-более что запрос к БД на редактирование статей похож на этот за небольшим исключением.
Спустя 1 час, 25 минут, 30 секунд (14.03.2012 - 12:59) SlavaFr написал(а):
1) addArticles::add не статическая метода и не должна таким образом вызыватся.
2) ты не создал инстанции класса, по этому оно и неработает.
Простыми словами
$article= new addArticles();
$article->add(.....);
2) ты не создал инстанции класса, по этому оно и неработает.
Простыми словами
$article= new addArticles();
$article->add(.....);
Спустя 3 минуты, 56 секунд (14.03.2012 - 13:02) kolyabis написал(а):
Да, точно. Спасибо. Я забыл об этом. Теперь все работает.
Спустя 10 секунд (14.03.2012 - 13:03) ADiel написал(а):
А почему не PDO, натравленный на файл?
Спустя 1 час, 20 минут, 3 секунды (14.03.2012 - 14:23) SlavaFr написал(а):
Цитата (ADiel @ 14.03.2012 - 10:03) |
А почему не PDO, натравленный на файл? |
потребность в pdo не вижу, но в общем класс очень неудачный.
1) путь к конфигурации на прямую посажен в класс и не может быть заменен через методы.
Это означает, что при изменении названия файла, прейдется лезть в код класса и изменять его.
2) в последстии ошибки указаной выше, наследующий класс наследует также и проблемы своего родителя.
3) за пременение переменных, которые не задекларированны в классе $this->connection
надо по ручкам настучать.
4) применение хтмл кода в методах и выдача их посредством echo.
5) Отсутсвие отлавливания ошибок в коде (try catch, exception)
6) остуствие проверки параметров для SQL и допустимая SQL-inection
Это конечно то, что сразу бросилось в глаза.