我做了一个简单的调查。成功填充并将其放入数据库表中。现在的问题是如何防止用户名多次完成调查?用户名是从 session 中获取的。我在这里尝试了我自己的代码,但它不起作用:
<?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>';
}}
?>
那么对于这样的问题,最好的解决方案是什么?预先感谢那些想要帮助我的人。再次感谢您。
最佳答案
在您的代码中,问题在于逻辑:您插入新行,然后检查是否有包含当前用户名的行。显然你必须先检查一下。
您在保存调查结果时会显示代码。但事实上,你应该检查两次。
在向用户显示表单之前,您必须检查他之前是否已经填写过。
保存时:不仅在 PHP 中测试是否不存在 double 。在表中的用户名列上定义唯一索引,即使检查失败,也保证永远不会有重复项。
这是创建唯一索引的方法:
alter table survey add unique index (username);
关于php - 如何使用 PHP 和 MySQL 防止一个用户名多次完成调查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009604/