如何防止一个用户名用PHP和PHP多次完成调查MySQL的?

时间:2015-01-18 12:23:56

标签: php mysql

我做了一个简单的调查。成功填写并将其放入数据库表中。现在的问题是如何防止用户名不止一次完成调查?用户名取自会话。我在这里尝试了自己的代码,但它不起作用:

<?php 
session_start();
include_once('config.php');

$username       = $_SESSION['username'];
$ask1           = $_POST['ask1'];
$ask2           = $_POST['ask2'];
$ask3           = $_POST['ask3'];
$ask4           = $_POST['ask4'];

$query = mysql_query("insert into survey values('', '$username', '$ask1', '$ask2', '$ask3', '$ask4')"); 


if ($query) {
        // success
        echo" <script language='JavaScript'> alert ('Thankyou for your participation');</script>";
        echo '<script language="JavaScript"> window.location.href ="home.php";</script>';
} else {
    echo "SELECT username FROM survey WHERE username='".$_SESSION['username']."'";
    $dup = mysql_query("SELECT username FROM survey WHERE username='".$_SESSION['username']."'");
        if(mysql_num_rows($dup) >0){
            echo"<script language='JavaScript'> alert ('You've filled out the survey!');</script>";
        echo '<script language="JavaScript"> window.location.href ="home.php" </script>';
        } else {
    // fail
     echo" <script language= 'JavaScript'> alert ('Failed to complete the survey'); </script>";
     echo '<script language="JavaScript"> window.location.href ="survey.php";</script>';
}}
?>

那么这个问题的最佳解决方案是什么?谢谢你提前帮助我。再次谢谢你。

1 个答案:

答案 0 :(得分:0)

在您的代码中,问题在于逻辑:您插入新行,然后检查是否有当前用户名的行。显然你必须先检查一下。

您在保存调查结果时显示代码。但事实上,你应该检查两次。

  1. 在向用户显示表单之前,您必须先检查是否已填写表单。

  2. 保存时:不仅在PHP中测试,如果没有double。在表中的列用户名上定义唯一索引,即使您的检查失败,也保证不会有重复索引。

  3. 这是创建唯一索引的方法:

    alter table survey add unique index (username);