私が取り組んでいるウェブサイトでは、ユーザーが複数のコメントをウェブサイトに投稿でき、各コメントにはデータベース内でauto_incrementedという一意のIDが付いています。次に、それらのidをコメントオブジェクトのリストに設定します。私のHTMLでは、私はそれらのIDを取得し、各コメントオブジェクトの好き嫌いのボタン(foreachループ)のセットを作成します。phpデータベースの名前とhtmlボタンの名前を比較する
私が抱えている問題は、ユーザーが同じボタンをクリックしたときに、その名前(動的名)と同じ名前のボタンの名前が、そのIDと比較されるはずですデータベースに格納されます。しかし、ボタンをクリックすると、画面に表示されているコメントの1つだけが変更されます。私は現在、配列を格納してその値をDAクラスに送信するためにセッションを使用していますが、成功していません。
名前を正しく送信し、データベース内のIDと比較する方法がわかりません。
HTML:
<?php foreach ($comments->getComments() as $comment) : ?>
<!--The like button:-->
<form class="userActions" action="../Controller/index.php" method="post">
<input type="submit" name="<?php echo "comment_#" . $comment->getID() . "_Likes"; ?>" class="btnLike btnLikeStyle like" value="Like">
<input type="hidden" name="action" value="comment_like">
</form>
<!--Show number of likes on the page:-->
<div>
<!--display the likes number from the database-->
<label class="lblLikes"><?php echo htmlspecialchars($comment->getLikes()); ?></label>
</div>
<!--Dislike button:-->
<form class="userActions" action="../Controller/index.php" method="post">
<input type="submit" name="<?php echo "comment_#" . $comment->getID() . "_Likes"; ?>" class="btnDislike btnDislikeStyle dislike" value="Dislike">
<input type="hidden" name="action" value="comment_dislike">
</form>
<?php endforeach; ?>
コントローラ:
case 'comment_like':
$commentID = $comment->getID();
$comments = comments::addLike($theCommentID);
include('../View/home.php');
break;
case 'comment_dislike':
$commentID = $comment->getID();
$comments = comments::addDislike($theCommentID);
include('../View/home.php');
break;
コメントクラス
function addLike($commentID) {
CommentDA::addCommentLike($commentID);
}
function addDislike($commentID) {
CommentDA::addCommentDislike($commentID);
}
DAクラス:あなたのコードを読んで問題を抱えて
public static function addCommentLike($commentID) {
$db = self::getConnection();
$query = 'UPDATE comments
SET commentLikes = CommentLikes + 1
WHERE CommentID = :commentIDPlaceholder';
$statement = $db->prepare($query);
$statement->bindValue(':commentIDPlaceholder', $commentID);
try {
$statement->execute();
} catch (PDOException $e) {
$error_message = $e->getMessage();
include('database_error.php');
exit();
}
$statement->closeCursor();
}
public static function addCommentLike($commentID) {
$db = self::getConnection();
$query = 'UPDATE comments
SET commentLikes = CommentLikes - 1
WHERE CommentID = :commentIDPlaceholder';
$statement = $db->prepare($query);
$statement->bindValue(':commentIDPlaceholder', $commentID);
try {
$statement->execute();
} catch (PDOException $e) {
$error_message = $e->getMessage();
include('database_error.php');
exit();
}
$statement->closeCursor();
}