Op m'n site kunnen gebruikers 1x per uur op elkaar stemmen, hiervoor drukken ze simpel op een knop. Die knop activeert een script:


<?
// aantal stemmen updaten
$query = mysql_query("SELECT stemmen FROM users WHERE id = '$stem_id'");
while ($rij = mysql_fetch_object($query)) {
$stemmen = $rij->stemmen + 1;
}
mysql_query("UPDATE users SET stemmen = '$stemmen' WHERE id = $stem_id");

// Transactie in db zetten
$tijd = date("Hi");
mysql_query("INSERT INTO stemmen (from_id, to_id, tijd) VALUES ('$user_id', '$stem_id', '$tijd')");

// Terug naar profiel gaan
header("Location: profiel.php?nickname=".getNickname($stem_id)."");
?>

De stemknop verschijnt pas als je nog niet op die persoon hebt gestemd, of als je langer dan een uur geleden voor het laatst op die persoon hebt gestemd. Echter als je buttonsmasht op de stemknop kun je heel vaak achter elkaar stemmen, er wordt dan niet gecheckt wanneer je voor het laatst gestemd hebt.

Hoe kan ik voorkomen dat het stemscript meerdere malen wordt uitgevoerd als de gebruiker RSI kweekt op de stemknop?
de controle ook in het stem script uitvoeren
De controle werkt wel, mits je gewoon op de stemknop drukt. Maar als je bijvoorbeeld 4x snel achter elkaar klikt dan stem je 2x. (en de lolbroeken die een minuut lang op die knop rammen stemmen gerust 20x)

M'n controle werkt dus wel, maar niet als je meerdere malen klikt. Één keer klikken werkt prima.
Hoe ziet je check script eruit dan?

Want dat zou niet moeten kunnen...
ik edoel dat ie ook controleert in het stem script zelf en niet als ie de knop weer moet geven dus in dat script dat jij net postte
De code die controleerd wanneer er voor het laatst gestemd is:

<?
$query = mysql_query("SELECT tijd FROM stemmen WHERE to_id = '$id' AND from_id = '$user_id'");
while ($rij = mysql_fetch_object($query)) {
$tijd = $rij->tijd + 100;
}

$tijd_nu = date("Hi");
$verschil = $tijd - $tijd_nu;

if (!$tijd OR $verschil < 1 OR $verschil > 100) {
?>

(stemtijd is langer dan een uur geleden, of er is niet gestemd, stemknop verschijnt)

<? } else { ?>

(mededeling dat gebruiker niet kan stemmen)

<? } ?>
<?
$query = mysql_query("SELECT tijd FROM stemmen WHERE to_id = '$id' AND from_id = '$user_id'");
while ($rij = mysql_fetch_object($query)) {
$tijd = $rij->tijd + 100;
}

$tijd_nu = date("Hi");
$verschil = $tijd - $tijd_nu;

if (!$tijd OR $verschil < 1 OR $verschil > 100) {
// aantal stemmen updaten
$query = mysql_query("SELECT stemmen FROM users WHERE id = '$stem_id'");
while ($rij = mysql_fetch_object($query)) {
$stemmen = $rij->stemmen + 1;
}
mysql_query("UPDATE users SET stemmen = '$stemmen' WHERE id = $stem_id");

// Transactie in db zetten
$tijd = date("Hi");
mysql_query("INSERT INTO stemmen (from_id, to_id, tijd) VALUES ('$user_id', '$stem_id', '$tijd')");
}

// Terug naar profiel gaan
header("Location: profiel.php?nickname=".getNickname($stem_id)."");
?>
misschien met javascript bij een onclick de button disablen?
hm die werkt ook niet.. kan nog steeds meerdere keren stemmen.. voor degenen die t willen testen, www.famousboy.nl en meld je aan..
das wel beter idee ja, ga er even naar kijken
tnx, het werkt :)

Reageren