php - 如何让用户使用唯一代码注册
问题描述
我正在建立一个网站,我想限制有多少用户可以在上面注册。
正如您从照片中看到的,我在 phpMyAdmin 中有一个名为 website 的数据库,其中有两个表。一个用于我创建的代码,一个用于存储注册用户。我会有一个普通的注册 html 表单,其中包含一个“CODE”字段。如果代码不存在或与表中的代码不匹配,我想阻止用户注册。他们注册后,我希望从表中删除代码,但我不知道该怎么做。这是我的 HTML 代码
<form class="login-form" method="POST" action="#">
<input type="text" name="username" required="required">
<input type="password" name ="password" required="required">
<input type="text" name="code" required="required">
<input type="submit" value="Register">
</form>
PHP
<?php
$host = "192.168.11.32:3306";
$user = "cyka";
$password = "blyat";
$db = "website";
$conn = mysqli_connect($host, $user, $password, $db);
if(isset($_POST['code'])){
$userCode = $_POST['code'];
$userUsername = $_POST['username'];
$userPassword = $_POST['password'];
$sql = "SELECT * FROM codes WHERE codice = '$userCode'";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result)==1){
$sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')";
if ($conn->query($sql) === TRUE) {
echo "Thank you for registering!";
} else {
echo "Errore: " . $sql . "<br>" . $conn->error;
}
header('location: main.php');
} else {
echo ("The code is not valid!");
header('location: error.php');
}
}
?>
解决方案
在表单上点击“注册”后,通过 ajax 请求提交表单。
对后端文件的 ajax 请求示例:
$('#register-form').submit( function(e){
e.preventDefault();
$.ajax({
url : '/includes/register.php',
type : "POST",
data : $('#register-form').serialize(),
success : function(data) {
if (data == 'true') {
//code if successful
} else {
// code if not successful
}
}
}
});
});
表单中的所有值都将发布到后端文件。
您可以像这样访问他们输入的“代码”值:
$theirCode = $_POST['code'];
获取数据库中所有代码的数组 - 您可以编写一个简单的全选函数:
function getCodes() {
global $db;
try {
$stmt = $db->prepare("SELECT * FROM codes");
$stmt->execute();
return $stmt->fetchall();
} catch (Exception $e) {
echo $e->getMessage();
}
}
$myCodes = getcodes();
您现在需要做的就是遍历您的代码数组并检查它们的代码是否与您的数组中的代码匹配。
$match = false;
foreach($myCodes as $code){
if($theirCode == $code){
$match = true;
break;
}
}
if($match == true){
echo 'true';
} else {
echo 'false';
}
您的 ajax 请求将监听真/假。随心所欲地处理结果。
我的解释是有道理的,是有帮助的。谢谢
推荐阅读
- c# - 如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?
- codeigniter - 如何修复 codeigniter4 和 date_format 中的错误?
- python - 用英语解释这段代码如何迭代一个数字
- python - 来自两个 numpy 行向量的 pandas DataFrame
- javascript - 使用另一个数组的索引从数组中获取元素
- java - 具有独立共享变量的同步方法
- c++ - 在 C++ 中打印没有强制转换的枚举可以吗?
- c++ - 用另一个父类函数覆盖函数
- javascript - React Native:'TypeError:未定义不是对象(评估'response.headers ['set-cookie']')'
- php - 在 PHP 中打印树中可见的级别时出错