Структура таблицы комментариев

Статус
В этой теме нельзя размещать новые ответы.

GatuZa

Новичок
Есть таблица комментариев. Каждый комментарий привязан к конкретной статье + к пользователю. Вот код:
PHP:
CREATE TABLE `comments` (
	`id_com` INT(10) NOT NULL AUTO_INCREMENT,
	`id_user` INT(10) NOT NULL,
	`id_article` INT(10) NOT NULL,
	`body` LONGTEXT NOT NULL,
	`time` DATETIME NOT NULL,
	PRIMARY KEY (`id_com`),
	INDEX `FK_comments_users` (`id_user`),
	INDEX `id_article` (`id_article`),
	CONSTRAINT `FK_comments_articles` FOREIGN KEY (`id_article`) REFERENCES `articles` (`id_article`) ON UPDATE CASCADE ON DELETE CASCADE,
	CONSTRAINT `FK_comments_users` FOREIGN KEY (`id_user`) REFERENCES `users` (`id_user`) ON UPDATE CASCADE ON DELETE CASCADE
)
COLLATE='cp1251_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=27;
Вот методы по работе с комментариями:
PHP:
    public function GetComments ($id_article) 
    {
        $id_article = intval($id_article);
        $sql = 
        "
            SELECT us.login, com.body, com.time
            FROM comments AS com
            LEFT JOIN users AS us USING(id_user)
            WHERE id_article = $id_article
        ";
       
        return $this->msql->Select($sql); 
    }
    
    public function AddComment ($id_user, $id_article, $body)
    {
        $obj = array();
        $obj['id_user'] = intval($id_user);
        $obj['id_article'] = intval($id_article);
        $obj['body'] = $body;
        $obj['time'] = date('Y-m-d H:i:s');
        $this->msql->Insert('comments', $obj);
        
        return TRUE;
Но как быть с комментариями гостей? Создавать специально для них таблицу или как-то переделать имеющуюся?! Помогите пожалуйста.
 

Фанат

oncle terrible
Команда форума
писать им id_user = 0?

return TRUE всегда - это сильно.

Динамическое составление запросов, я смотрю, ты так и не осилил?
 

GatuZa

Новичок
Фанат

писать им id_user = 0?
то есть это нормальный вариант?)

return TRUE всегда - это сильно.
ну я пока для авторизованного юзера сделал, там проверка только одна (?) должна быть - заполнено ли поле...

Динамическое составление запросов, я смотрю, ты так и не осилил?
спасибо Вам за помощь, я пока что отложил данный вопрос (защита управляющих элементов), дописываю основные контроллеры для сайта, после этого модифицирую модель так как Вы посоветовали

Еще один вопрос возник, передаю $title ("Привет) в БД прогнав через май_риал_эскейп - ставится слеш, вытягиваю из БД прогнавши через stripslashes - выводит фигню какую-то ("\"Привет" ), самое интересное, что $content с таким же значением и выводится правильно (и то и то выводится в поле формы для редактирования)
В чем может быть загвоздка?!

gz0t
то есть сделать айди для гостей = 0 и туда кидать ?!
 

Фанат

oncle terrible
Команда форума
Фанат
то есть это нормальный вариант?)
А что в нём ненормального?
Конкретные проблемы есть?
ну я пока для авторизованного юзера сделал, там проверка только одна
Какая ещё проверка?
Никаких проверок я в методе AddComment не вижу. И в нём и не должно быть никаких проверок - это метод AddComment , а не CheckUser
В любом случае, текущий код в AddComment, возвращающий TRUE всегда, не имеет смысла.
вытягиваю из БД прогнавши через stripslashes
это неправильно. никаких stripslashes при "вытягивании" быть не должно.
В чем может быть загвоздка?!
В том, о чем яговорю уже третий топик подряд - в бездумной копипасте. В применении различных функций без понимания их смысла.

Найти место, где данные портятся, очень просто - надо выводить их на экран везде, где они обрабатываются. На каждом этапе.
И смотреть - в какой момент они испортились.
при этом смотреть надо не красивую картинку, а конкретный результат работы пхп кода.
Подробнее - http://phpfaq.ru/debug
 

GatuZa

Новичок
Фанат

PHP:
это неправильно. никаких stripslashes при "вытягивании" быть не должно.
ну не буду же я юзеру показывать статью с экранированными символами...

PHP:
Найти место, где данные портятся, очень просто - надо выводить их на экран везде, где они обрабатываются. На каждом этапе.
уже весь код var_dump-ом перелопатил, во вьюху идет $article['title'] - вар_дамп показывает, что есть такая переменная, но в тоже время в самом поле для тайтла пустота (при этом в хедере выводится нормально). ЧТо за дела)
 

С.

Продвинутый новичок
ну не буду же я юзеру показывать статью с экранированными символами...
Откуда в базе возьмутся экранированные символы? Символы экранируются в ЗАПРОСЕ, поскольку у него есть определенный синтаксис. Я в ячейке таблице данные хранятся неэкранированными. От кого их там экранировать? И при вытqгивании данные идут неэкранированными, потому что такой нужды нет.
 

GatuZa

Новичок
С.
отправляю строку прогнанную через майл_риал_эскейп, в базе появляется слеш перед двойной кавычкой
 

С.

Продвинутый новичок
Значит имеет место двойное экранирование.
magic_quotes?
 

Фанат

oncle terrible
Команда форума
С.
во-первых, он их стрипает
во-вторых, по его показаниям (которым, конечно же, верить нельзя, но тем не менее), в соседнем поле всё выводится нормально.
Тут я бы скорее предположил головотяпство с htmlspecialchars, которое накладывается ПОСЛЕ sql искейпинга
но точно может сказать только отладка, в которой наш друг не силён.
 

Фанат

oncle terrible
Команда форума
в тоже время в самом поле для тайтла пустота (при этом в хедере выводится нормально). ЧТо за дела)
Значит так.
Ты очень торопишься писать, не прочитав толком ответы.
Этого делать не надо - ты только зря тратишь время, своё и чужое.

поэтому сейчас я этот топик закрываю. ты читаешь внимательно мой ответ, и ссылку, которая в нём приведена.
потом пишешь мне в личку с объяснением, почему в поле тайтла пустота.
после этого я открываю тему.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху