Hee,

Kan iemand mij helpen? Ik wil graag na dat mensen een reactie hebben geplaatst dat ze +20 coins krijgen. Hoe verwerk ik dat hier in?

<?php
if(isset($_SESSION['id']) && isset($_POST['placeComment']) && is_numeric($_POST['newsid'])) {
$userid = $_SESSION['id'];
$newsid = $_POST['newsid'];
$comment = addslashes(htmlspecialchars($_POST['comment']));
$date = time();
$stmt = $dbh->prepare("SELECT * FROM news WHERE active = 1 AND id = :news_id");
$stmt->execute(array("news_id" => $newsid));
$rowcount = $stmt->rowCount();
if($rowcount > 0) {
$stmt = $dbh->prepare("INSERT INTO news_comments(news_id, user_id, comment_date, comment)

UPDATE users SET coins = coins + 200 WHERE id = users_id
VALUES(:news_id, :user_id, :comment_date, :comment)");
$stmt->execute(array(
"news_id" => $newsid,
"user_id" => $userid,
"comment_date" => $date,
"comment" => $comment,
));
?>
Je moet voor de UPDATE query een aparte variable maken net zoals voor de INSERT, vervolgens kun je de statement (in de nieuwe variable) uitvoeren door de execute functie aan te roepen (wel zoals bij INSERT eerst de argumenten binden).

<?php
$update = $dbh->prepare("UPDATE users SET coins = coins + 20 WHERE id = :user_id");
$update->execute(['user_id'=>$userid]);
?>
Addslashes() is onnodig, en htmlspecialchars() hoort bij je uitvoer, en niet bij je invoer.
Thx, ik had zelf heel anders en verkeerd gedaan. Ben nog aan het leren, bedankt

[size=xsmall]Toevoeging op 25/12/2017 13:53:45:[/size]

Kan ik er nu ook nog iets aan toevoegen dat er word gececkt dat ze al reactie hebben geplaatst en niet nog keer kunnen reageren?
GoldSpray Design op 25/12/2017 13:27:43

Thx, ik had zelf heel anders en verkeerd gedaan. Ben nog aan het leren, bedankt

[size=xsmall]Toevoeging op 25/12/2017 13:53:45:[/size]

Kan ik er nu ook nog iets aan toevoegen dat er word gececkt dat ze al reactie hebben geplaatst en niet nog keer kunnen reageren?


Daarvoor moet je het aantal rijen tellen en dan kijken of het aantal rijen groter is dan 0, dan krijg je dus zoiets:

<?php
$rows = $dbh->prepare("SELECT COUNT(*) FROM news_comments WHERE user_id = :user_id AND news_id = :news_id");
$rows->execute(['user_id'=>$userid, 'news_id'=>$newsid]);
if($rows->fetchColumn() > 0) {
echo "Je hebt al een reactie geplaatst";
}
?>
oke, en dan zodra rijen dus gevuld zijn is groter dan 0? Dan zegt hij je kan niet meer reageren!? snap ik het goed!?

Kan ik dit dan gewoon bij de pagina van placecomment zetten of moet ik het bovenaan de andere code zetten ?

Sorry, als ik onduidelijk ben en traag avn begrip :P
Uhhh... Of je slaat dit op in een aparte tabel, zodat je kunt blijven herleiden waar die score vandaan komt? Nu heb je geen enkele historie van hoe de waarde van "coins" totstand is gekomen. En het uitrekenen van het aantal coins dat iemand heeft is zeer makkelijk afleidbaar (mbv een SUM). Zorg dat je "getuigen" hebt waar waarden vandaan komen, en sla niet enkel een resultaat op.

Reageren