php - 如何只允许用户只提交一次 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>";
解决方案
使用下面的代码,您尝试检查输入的教程组和组号是否已经存在,但这不起作用。
$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 注入。
但是,我不得不说,方法远非完美。它依赖于您的学生非常准确地输入数据,并且永远不会出错。这在实践中是行不通的。
推荐阅读
- python - pip 搜索和 conda 搜索有什么区别
- c - 多次递归调用函数
- android - 无法获得许可:“android.permission.SET_ALARM”
- linux - 使用 cp 将 .html 文件转换为 .txt | 错误:cp:无法统计'/*.html':没有这样的文件或目录
- java - Java Springboot+Gradle:如何从 Web 浏览器的地址栏中“阻止”服务特定 URL
- javascript - 我可以使用什么技术来阻止导航栏闪烁?
- javascript - 返回未定义变量Javascript的函数
- c# - 无法将“System.String”类型的对象转换为 C# 中的“Oracle.DataAccess.Client.OracleParameter”类型
- jenkins - 如何使 post 部分与 stage 部分在同一节点中工作
- angular - angular2子组件如何导入由父组件更新的var