2017-09-01 2 views
0

Le site Web sur lequel je travaille permet aux utilisateurs de poster plusieurs commentaires sur le site Web et chaque commentaire a un identifiant unique qui est auto_incremented dans la base de données. Ensuite, j'ai mis ces ID à une liste d'objets de commentaires. Dans mon code HTML, je récupère ces identifiants et crée un ensemble de boutons J'aime et N'aime pas (avec une boucle foreach) pour chaque objet de commentaire. Le problème que j'ai est quand un utilisateur clique sur un bouton similaire, le nom du bouton qui est également le même que le nom de son id (noms dynamiques) est censé être comparé avec l'id qui est dans la base de données. Mais cliquer sur les boutons ne change que les goûts pour l'un des commentaires affichés à l'écran. J'utilise actuellement des sessions pour stocker le tableau et envoyer ses valeurs à la classe DA mais je n'ai pas eu de succès.Php compare noms de boutons html avec des noms dans la base de données

Je ne sais pas comment envoyer et comparer correctement les noms avec les ID dans la base de données.

Le 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; ?> 

Le contrôleur:

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; 

Commentaires classe

function addLike($commentID) { 
CommentDA::addCommentLike($commentID); 
} 

function addDislike($commentID) { 
CommentDA::addCommentDislike($commentID); 
} 

La classe 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(); 
} 

Répondre

0

im sorry ayant des problèmes de lecture de votre code, je ne suis pas assez d'expérience .. mais juste mes 2 cents pour faire une logique de bouton 'comme' ..

  1. Enregistrer utilisateur ip, crée un tableau avec les variables enregistrées pour cet utilisateur dans la base de données.
  2. Créez un formulaire caché ou un bouton radio avec (par exemple) name = "like_btn" que vous envoyez par courrier à php.
  3. Si la valeur de $ like_btn === 1, vous montrez l'image de 'aimé', sinon un autre picutre. Pour compter les goûts dont vous avez besoin de compter le nombre d'utilisateurs ayant cette variable définie sur 1 dans votre db.

bouton exemple ..

<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> 

vous pouvez définir l'opacité à 0 ou déplacer le possition du bouton radio loin pour le cacher. (Hide radio button while keeping its functionality)