我做了一个简单的调查。成功填写并将其放入数据库表中。现在的问题是如何防止用户名不止一次完成调查?用户名取自会话。我在这里尝试了自己的代码,但它不起作用:
<?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>';
}}
?>
那么这个问题的最佳解决方案是什么?谢谢你提前帮助我。再次谢谢你。
答案 0 :(得分:0)
在您的代码中,问题在于逻辑:您插入新行,然后检查是否有当前用户名的行。显然你必须先检查一下。
您在保存调查结果时显示代码。但事实上,你应该检查两次。
在向用户显示表单之前,您必须先检查是否已填写表单。
保存时:不仅在PHP中测试,如果没有double。在表中的列用户名上定义唯一索引,即使您的检查失败,也保证不会有重复索引。
这是创建唯一索引的方法:
alter table survey add unique index (username);