Тут всё очень просто. Создаешь таблицу в БД с внешним ключом к коментируемому. Например, если это блог статей, то внешний ключ будет к таблице с самими статьями. Вытаскиваешь статью и все коментарии к этой статье по id.
Базу я уже создал, внешние ключи тоже указал. А как сделать именно комментирование? Как присваивается id статьи полю page_id?
Вопрос непонятный. Тем более если "внешние ключи тоже указал" Код (Text): insert into comment set page_id=7, comment='You are a genius!'; Где-нибудь в модели, тут уж я не знаю, как у тебя построено. Может в модели комментариев, может в хранилище комментариев - от твоей архитектуры зависит
Ну ты же форму коммента под статьёй будешь выводить, да? Поэтому тебе в этот момент этот id будет известен.
Оказывается я с формами вообще не умею работать. Помогите бедолаге пожалуйста. Вот такие исходники у меня. Есть список продуктов. К каждому продукту добавлено поле комментирования. То есть такой список заголовков и каждая с полем комментирования. Когда комментирую, в таблице комментариев полю product_id всегда присваивается id первого в выведенном списке продуктов. Как сделать чтобы присваивался id нужного продукта. Не взыщите, задача такая стоит. Контроллер Код (Text): function commentAction() { $user_id = isset($_REQUEST['user_id']) ? $_REQUEST['user_id'] : null; $user_id = intval($user_id); $content = isset($_POST['content']) ? $_POST['content'] : null; $content = htmlspecialchars($content); $product_id = $_REQUEST['product_id']; // Видимо здесь нужно что-то придумать $product_id = intval($product_id); // Получение списка всех данных $result = addComment($user_id, $content, $product_id); if ($result) { $resData['success'] = 1; $resData['message'] = 'Комментарий добавлен'; }else{ $resData['success'] = 0; $resData['message'] = 'Ошибка добавления комментария'; } echo json_encode($resData); return; } Модель: Код (Text): function addComment($contentComm, $productId, $userId) { global $pdo; $statement = $pdo->prepare("INSERT INTO comments (content, product_id, user_id) VALUES (:content, :product_id, :user_id)"); $statement->bindParam(':content', $contentComm); $statement->bindParam(':product_id', $productId); $statement->bindParam(':user_id', $userId); $rs = $statement->execute(); return $rs; } ajax: Код (Text): function newComment() { var content = $('#newContentComm').val(); var product_id = $('#newProductId').val(); var user_id = $('#newUserId').val(); var postData = {content: content, product_id: product_id, user_id: user_id}; $.ajax({ type: 'POST', async: false, url: "/product/comment/", data: postData, dataType: 'json', success: function(data) { alert(data['message']); if(data['success']) { $('#newContentComm').val(''); $('#newProductId').val(''); $('#newUserId').val(''); } } }); } view: Код (Text): {foreach $products as $item name=product} <h2><a href="/product/page/{$item['id']}/">{$item['product']}</a></h2> <form name="comment" action="" method="post"> <p> <label>Комментарий:</label> <br /> <textarea id="newContentComm" name="content" cols="30" rows="3"></textarea> </p> <p> <input id="newProductId" type="hidden" name="product_id" value="{$item['id']}" /> <input id="newUserId" type="hidden" name="user_id" value="{$authUser['id']}" /> <input type="submit" onclick="newComment();" value="Отправить" /> </p> </form> {/foreach}
Ну что? Никто не поможет? Хоть советом. В какую сторону мне смотреть, что искать? Комментирование как в Вконтакте например. Множество постов, и каждый пост можно комментировать непосредственно в списке.
Да, конечно понимаю. У каждого своих забот полно. Короче, когда производится комментирование любого элемента списка, из всего списка срабатывает всегда первая форма добавления комментария. Даже когда заполняешь поле 2-го или 3-го элемента списка, и нажимаешь "Комментировать" в бд в таблицу comments добавляется запись с пустым содержанием комментария. И полю product_id присваивается id первого продукта из списка. Корректно записывается только user_id. Ума не приложу что делать.