我想实现一些不允许用户多次访问的东西

我想实现一些不允许用户多次访问的东西

问题描述:

我已经使用了别人使用ipaddress方式的代码。但是,我想使用一个代码来检查当前的用户ID和ID号。我想实现一些不允许用户多次访问的东西

$ipaddress = md5($_SERVER['REMOTE_ADDR']); // here I am taking IP as UniqueID but you can have user_id from Database or SESSION 

/* Database connection settings */ 
$con = mysqli_connect('localhost','root','','database'); 

if (mysqli_connect_errno()) { 
    echo "<p>Connection failed:".mysqli_connect_error()."</p>\n"; 
} /* end of the connection */ 

if (isset($_POST['rate']) && !empty($_POST['rate'])) { 
    $rate = mysqli_real_escape_string($con, $_POST['rate']); 
    // check if user has already rated 
    $sql = "SELECT `id` FROM `tbl_rating` WHERE `user_id`='" . $ipaddress . "'"; 
    $result = mysqli_query($con, $sql); 
    $row = mysqli_fetch_assoc();//$result->fetch_assoc(); 
    if (mysqli_num_rows($result) > 0) { 
     //$result->num_rows > 0) { 
     echo $row['id']; 
    } else { 
     $sql = "INSERT INTO `tbl_rating` (`rate`, `user_id`) VALUES ('" . $rate . "', '" . $ipaddress . "'); "; 
     if (mysqli_query($con, $sql)) { 
      echo "0"; 
     } 
    } 
} 
//$conn->close(); 
+0

那么,你在试图看到什么问题? –

+0

我不确定如何操作?我是新来的php ... –

+0

我很感激某人的帮助,因为我需要这个为我的最后一年项目 –

在你的数据库表中,设置user_idUNIQUE KEY。这样,如果用户试图投第二票,那么数据库将拒绝INSERT查询,并且当受影响的行= 0时,您可以只显示一条消息。

或者,(从UX角度来看更好),您可以抢先做的登录用户SELECT查询加载网页内容之前:

$query="SELECT `rate` FROM `tbl_rating` WHERE user_id=? LIMIT 1;"; 
if($stmt=$con->prepare($query)){ 
    $stmt->bind_param('s',$ipaddress); // or however you are IDing your users 
    $stmt->execute(); 
    $stmt->store_result(); 
    if($stmt->num_rows>0){ 
     // already rated 
    }else{ 
     // not yet rated 
    } 
    $stmt->close(); 
} 

如果他们已经在表中有一排,然后甚至不给他们重新提交的机会。

+1

是的。这应该正常工作。但我建议添加一个新表,其中包含user_id,post_id(或any_id)以及true或false的布尔字段。这样,如果同一个用户试图再次评价,你会查询它是否存在于这个新表中,如果在布尔型字段中值为真,则显示一条消息,告诉他他无法评分。如果你想使用IP地址,那就没关系,但有时他会改变他的位置,他的网络,他的电话和IP也会改变。你也应该考虑一下。而饼干不是一个很好的解决方案。只需使用IP地址和附加表格 – droidnation

+0

为了提高安全性,我建议使用PDO重新编写脚本。 MySQLi已经足够好了,但我更喜欢PDO。 – droidnation

+0

@AmirHD https://meta.stackexchange.com/a/5235/352329 – mickmackusa