首页 > 解决方案 > 如何只允许用户只提交一次 html 表单?

问题描述

我目前正在为学生创建一个页面来创建他们自己的小组。每个学生都有自己独特的辅导组(班级名称)和组号。来自不同辅导组的学生可以拥有相同的组号。每个小组有 4 名成员。我需要帮助以确保如果该组已存在,则用户无法创建新组。这是我的 phpMyadmin 中的表的样子:

编号| tg | grp | 用户1 | 用户2 | 用户3 | 用户4 |

tg:教程组

grp:组号

user1/2/3/4:组成员的名字

以下是我尝试过的相关代码,但它不起作用。

$conn = new mysqli ($host, $dbusername, $dbpassword, $dbname);


if (mysqli_connect_error()){
die('Connect Error ('. mysqli_connect_errno() .') '
. mysqli_connect_error());
}
else{
    $sql = "SELECT (tg,grp) FROM groups";
    $result = $conn-> query($sql);
    if ($result=1){
        print("<script>window.alert('You already have a group');</script>");
        echo "<script type='text/javascript'> document.location = 'view_groups.php' ; </script>";
    
    else {
    
    $sql= "INSERT INTO groups (tg, grp, user1, user2, user3, user4) VALUES ('$tg', '$grp','$user1','$user2','$user3','$user4')";
    

以下是我尝试过的新代码。此代码不允许新用户创建组。难道我做错了什么??

$stmt = $conn->prepare("SELECT * FROM groups WHERE tg =? AND grp=?");
$stmt->bind_param('ss', $tg, $grp);
$result = $stmt->execute();

if ($result){
    print("<script>window.alert('You already have a group');</script>");
    echo "<script type='text/javascript'> document.location = 'view_groups.php' ; </script>";
}

else{

$stmt = $conn->prepare("INSERT INTO groups (tg, grp, user1, user2, user3, user4) VALUES (?, ?, ?, ?,?,?)");
$stmt->bind_param('ssssss', $tg, $grp, $user1, $user2, $user3, $user4);
$result = $stmt->execute();
if ($result){
print("<script>window.alert('Group is created');</script>");    
echo "<script type='text/javascript'> document.location = 'create_groups.php' ; </script>";

标签: phphtmlforms

解决方案


使用下面的代码,您尝试检查输入的教程组和组号是否已经存在,但这不起作用。

$sql = "SELECT (tg,grp) FROM groups";
$result = $conn-> query($sql);
if ($result=1) {
    ....
}

您需要SELECT在查询中输入教程组和组号。像这样:

$stmt = $conn->prepare("SELECT id FROM groups WHERE tg = ? AND grp = ?");
$stmt->bind_param('ss', $tg, $grp);
$result = $stmt->execute();
if ($result) {
    ....
} else {
    printf("Error message: %s\n", $conn->error);
}

请注意,我绑定参数以防止 SQL 注入。

但是,我不得不说,方法远非完美。它依赖于您的学生非常准确地输入数据,并且永远不会出错。这在实践中是行不通的。


推荐阅读