Здравствуйте. Вот имеется страница с 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.
|