2017-09-01 14 views
0

私が取り組んでいるウェブサイトでは、ユーザーが複数のコメントをウェブサイトに投稿でき、各コメントにはデータベース内で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(); 
} 

答えて

0

申し訳ありませんイムは、イムは十分に経験していない..しかし、ちょうど私の2セントは「のような」ボタンのロジックを作るために...

  1. 保存ユーザーipの場合は、そのユーザーのためにデータベースに保存された変数で配列を作成します。
  2. (例えば)name = "like_btn"を持つ隠しフォームまたはラジオボタンフォームを作成します。このフォームはphpに投稿して送信します。
  3. $ like_btn === 1の値を指定すると、「好き」の写真が表示され、別のピクチャが表示されます。 好きなものを数えるには、この変数が1人に設定されているユーザーの数をデータベースでカウントする必要があります。

ボタンの例..

<label for="like_button"> 
<div 
<?php 
if($like_status == "liked") 
{ 
    echo'class="liked_class"'; 
}else 
{ 
    echo 'class="empty_class"'; 
}; 
?> 
><input type="radio" id="liked" name="like_status" value="like_button" form="form01" 
<?php 
if ($like_status == "liked")echo "checked"; 
?> 
> Like button content 
</div></label> 

あなたは0に不透明度を設定するか、それを隠すために遠くのラジオボタンのpossitionを移動することができます。 (Hide radio button while keeping its functionality

関連する問題