Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение id url'a и добавление его в базу. 
:(
    Опции темы
posthuman
Дата 11.4.2011, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

Репутация: нет
Всего: нет



Здравствуйте. Вот имеется страница с url view_article.php?id=12. id получается в коде отображения страницы. 
В БД таблица с новостями имеет поле id.
Код

if (isset($_GET['id'])) {$id = $_GET['id'];}
$select_article = mysql_query ("SELECT * FROM `article` LEFT JOIN article_section ON article.section = article_section.id_section WHERE `id`='$id'");

(отображается новостная страница)

В конце новости отображается комментрарии и поля для добавления. Класс обработки комментария:
Код

<?php
class Comment
{
    private $data = array();
    //Конструктор
    public function __construct($row)
    {
        $this->data = $row;
    }
    //Данный метод выводит разметку HTML для комментария
    public function markup()
    {
        //Устанавливаем псевдоним, чтобы не писать каждый раз $this->data:
        $d = &$this->data;
        
        $link_open = '';
        $link_close = '';
        //Если был введн URL при добавлении комментария, определяем открывающий и закрывающий теги ссылки
        if($d['url']){
            $link_open = '<a href="'.$d['url'].'">';
            $link_close =  '</a>';
        }
        //Преобразуем время в формат UNIX:
        $d['dt'] = strtotime($d['dt']);
        
        return '
            <div class="comment">        
                <div class="name">'.$link_open.$d['name'].$link_close.'</div>
                <div class="date" title="Added at '.date('H:i \o\n d.m.Y',$d['dt']).'">'.date('d.m.Y',$d['dt']).'</div>
                <p>'.$d['body'].'</p>
            </div>
        ';
    }
    //Данный метод используется для проверки данных отправляемых через AJAX. Он возвращает true/false в зависимости от правильности данных, и наполняет
    //массив $arr, который преается как параметр либо данными либо сообщением об ошибке.
    public static function validate(&$arr)
    {
        $errors = array();
        $data    = array();
        
        //Используем функцию filter_input, введенную в PHP 5.2.0
        if(!($data['email'] = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)))
        {
            $errors['email'] = 'Пожалуйста, введите правильный Email.';
        }
        //Если в поле URL был введн неправильный URL, действуем так, как будто URL не был введен:
        if(!($data['url'] = filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL)))
        {
            $url = '';
        }
        //Используем фильтр с возвратной функцией:
        if(!($data['body'] = filter_input(INPUT_POST,'body',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
        {
            $errors['body'] = 'Пожалуйста, введите текст комментария.';
        }
        
        if(!($data['name'] = filter_input(INPUT_POST,'name',FILTER_CALLBACK,array('options'=>'Comment::validate_text'))))
        {
            $errors['name'] = 'Пожалуйста, введите имя.';
        }
        //Если есть ошибки, копируем массив $errors в $arr:
        if(!empty($errors)){
            $arr = $errors;
            return false;
        }
        //Если данные введены правильно, подчищаем данные и копируем их в $arr:
        foreach($data as $k=>$v){
            $arr[$k] = mysql_real_escape_string($v);
        }
        //email дожен быть в нижнем регистре:
        $arr['email'] = strtolower(trim($arr['email']));
        
        return true;
        
    }
    //Данный метод используется как FILTER_CALLBACK
    private static function validate_text($str)
    {
        if(mb_strlen($str,'utf8')<1)
            return false;
        
        //Кодируем все специальные символы html (<, >, ", & .. etc) и преобразуем символ новой строки в тег <br>:
        $str = nl2br(htmlspecialchars($str));
        
        //Удаляем все оставщиеся символы новой строки
        $str = str_replace(array(chr(10),chr(13)),'',$str);
        
        return $str;
    }

}
?>

При отправке формы данные идут в submit.php
Код

<?php
//Сообщение об ошибке:
error_reporting(E_ALL^E_NOTICE);

include 'db.php';
include 'comment.class.php';

//Данный массив будет наполняться либо данными, которые передаются в скрипт, либо сообщениями об ошибке.
$arr = array();
$validates = Comment::validate($arr);

if($validates)
{
    //Все в порядке, вставляем данные в базу:
    mysql_query("    INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        '".$_GET['id']."'
                    )");
    
    $arr['dt'] = date('r',time());
    $arr['id'] = mysql_insert_id();

    //Данные в $arr подготовлены для запроса mysql, но нам нужно делать вывод на экран, поэтому готовим все элементы в массиве:
    $arr = array_map('stripslashes',$arr);
    
    $insertedComment = new Comment($arr);

    //Вывод разметки только-что вставленного комментария:
    echo json_encode(array('status'=>1,'html'=>$insertedComment->markup()));
}
else
{
    //Вывод сообщений об ошибке
    echo '{"status":0,"errors":'.json_encode($arr).'}';
}
?>


Данные в таблицу заносятся нормально, тольков поле таблицы с комментариями (id_article) не заносится id из таблицы с новостями.
связь между таблица сделал
Код

mysql_query("ALTER TABLE `comments` ADD CONSTRAINT foreign_article FOREIGN KEY (id_article) REFERENCES article (id)");

Как можно занести иформацию об id из таблицы с новостями, в таблицу с комментариями??? в таблице с комментариями имеется поле id (primary), но заносить необходимо в id_article.
PM MAIL ICQ Skype   Вверх
cia
Дата 14.4.2011, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: нет
Всего: 4



Цитата

Как можно занести иформацию об id из таблицы с новостями, в таблицу с комментариями???

sql-запросом.

Цитата

в таблице с комментариями имеется поле id (primary), но заносить необходимо в id_article. 

значит в sql-запросе должно фигурировать поле id_article.

Цитата

связь между таблица сделал

на самом деле связь вообще не нужна.

Цитата

 mysql_query("    INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        '".$_GET['id']."'
                    )");
    

Ты же тут вставляешь в "id_article" значение "$_GET['id']", значит в $_GET['id'] должен быть идентификатор статьи. Это так? В чём проблема?
PM WWW ICQ   Вверх
posthuman
Дата 14.4.2011, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2009
Где: Люберцы

Репутация: нет
Всего: нет



В поле заносились 0. Уже сделал как надо. В форму отпкавки данных на сервер добавил скрытое поле в которое отправляется id статьи.
Код

<input name="id_article" id="id_article" type="hidden" value="<? echo $view_article['id']; ?>">

И изменил запрос добавления данных в БД:
Код

    if (isset($_POST['id_article'])) {$id_article = $_POST['id_article'];}

    mysql_query("    INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        $id_article
                    )");

PM MAIL ICQ Skype   Вверх
cia
Дата 14.4.2011, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 15.1.2007

Репутация: нет
Всего: 4



Лучше так ($_POST['id_article'] может содержать что угодно):
Код

  $id_article=(int)$_POST['id_article'];
  if(!$id_article) die('error');

    mysql_query("    INSERT INTO comments(name,url,email,body,id_article)
                    VALUES (
                        '".$arr['name']."',
                        '".$arr['url']."',
                        '".$arr['email']."',
                        '".$arr['body']."',
                        $id_article
                    )");


Это сообщение отредактировал(а) cia - 14.4.2011, 11:54
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.