Почему моя попытка проверить двойное голосование через IP-адрес не работает должным образом?
if ($qtype === "sc"){
// single choice has only one select item
// check whether user has already answered this question
$i=0;
$res = mysqli_query($mysqli, "SELECT ip FROM votedanswers WHERE ip = \"".$ip."\" and qID = \"".$qID."\"");
while($obj = mysqli_fetch_object($res))
{
$i = $i+1;
}
if ($i > 0){
echo "your vote has already been counted";
}
else{
//insert data
$res = mysqli_query($mysqli, "INSERT INTO votedanswers (ip, qID, qQuestion, aID) VALUES ('$ip', '$qID', '$quest', '$aID')");
echo "your vote has been counted";
}
} else {
echo "nope!";
}`
Некоторое время назад тестировал, и все было хорошо. Но теперь я могу голосовать сколько хочу.






Попробуй это:
if ($qtype === "sc"){
// single choice has only one select item
// check whether user has already answered this question
$i=0;
$res = mysqli_query($mysqli, "SELECT ip FROM votedanswers WHERE ip = \"".$ip."\" and qID = \"".$qID."\"");
while($obj = mysqli_fetch_assoc($res))
{
$i = $i+1;
}
if ($i > 0){
echo "your vote has already been counted";
}
else{
//insert data
$res = mysqli_query($mysqli, "INSERT INTO votedanswers (ip, qID, qQuestion, aID) VALUES ('$ip', '$qID', '$quest', '$aID')");
echo "your vote has been counted";
}
} else {
echo "nope!";
}
Также см .: Как я могу предотвратить SQL-инъекцию в PHP?
Ваш код уязвим для атак SQL-инъекция. Вы должны использовать подготовленные операторы с привязанными параметрами через mysqli или PDO. У Эта почта есть несколько хороших примеров.