1

現在、このチュートリアルに従って単純な投票システムを作成しています。

ユーザーが1回しか投票できない検証部分を除いて、正常に機能します。このチュートリアルでは IP を使用しますが、これは動的 IP を持つユーザーには機能しません

<?php
include("config.php");
$ip=$_SERVER['REMOTE_ADDR'];

if($_POST['id'])
{
$id=$_POST['id'];
$id = mysql_escape_String($id);
//Verify IP address in Voting_IP table
$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

if($count==0)
{
// Update Vote.
$sql = "update Messages set up=up+1 where mes_id='$id'";
mysql_query( $sql);
// Insert IP address and Message Id in Voting_IP table.
$sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
mysql_query( $sql_in);
echo "<script>alert('Thanks for the vote');</script>";
}
else
{
echo "<script>alert('You have already voted');</script>";
}

$result=mysql_query("select up from Messages where mes_id='$id'");
$row=mysql_fetch_array($result);
$up_value=$row['up'];
echo $up_value;

}
?>

ユーザーが 1 回だけ投票できるようにするためのより良い方法はありますか?

4

3 に答える 3

1

簡略化はどうですか

<?php
 //HERE include DB config and set variables
 $result = mysql_query("SELECT * FROM votes WHERE id = '$id' AND ip = '$ip'");
  $count = mysql_num_rows($result);
 if($count > 0){
  echo "<script>alert('You have already voted');</script>";
 }
 else{
  //Update Sets
 }
?>

ただし、最終的には、ユーザーアカウントまたはCookieを使用する必要があります。ユーザーはブラウザからCookieをクリアできますが、動的IPアドレスを持っている場合もあります。これは、単一のIPで1つの大規模ネットワークを使用しているユーザーにも対応します(無料のWi-Fiネットワーク、学校、職場)

ユーザーアカウントを作るのが一番いいアイデアだと思います

<?php
 $result = mysql_query("SELECT * FROM votes WHERE username = '$_SESSION[username]' AND id             = '$id'");
?>
于 2012-04-24T06:21:00.147 に答える