[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка при вводе новой статьи.
kolyabis
Добрый день всем, создал новую тему, так как не нашел то что искал по этому сильно тапками не бросайтесь))).

Дело в том что я завис на одном ньюансе. Я сейчас для сайта на ООП делаю форму для статей, новых статей.

У меня есть клас ( 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(.....);

Спустя 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

Это конечно то, что сразу бросилось в глаза.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.