【发布时间】:2022-01-25 02:59:29
【问题描述】:
我创建了一个与mysql连接的简单注册表
html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form method="post" enctype="multipart/form-data>">
<div class="form-group">
<label for="username"> User Name</label>
<input type="text" name="username" id="username">
</div>
<br>
<div class="form-group">
<label for="password"> password</label>
<input type="password" name="password" id="password">
</div>
<br>
<div class="form-group">
<label for="age"> Age</label>
<input type="text" name="age" id="age">
</div>
<br>
<button class="btn btn-primary btn-block" name="b_send"> send data</button>
</form>
</div>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.js"></script>
</body>
</html>
mysql : dbname = final 表是=学生
在学生表中,我有列(用户名),我将其设置为 UNIQUE,
在 php 代码中我建立连接:
<?php
if ($_SERVER['REQUEST_METHOD']=="POST"){
if(isset($_POST['b_send'])){
$username= $_POST['username'];
$password=$_POST['password'] ;
$age=$_POST['age'];
try{
$conn=new PDO ("mysql:host=localhost; dbname=final",
"admin","admin");
$sendvalues=$conn->exec("insert into students(username,password,age)
values('$username','$password','$age')");
}
catch(PDOExeption $e){
echo "error in data send";
}
}
}
?>
现在,我想检查一下,如果用户输入了列(用户名)中已经存在的重复名称,它会阻止向数据库发送数据并给用户错误消息
提前致谢
【问题讨论】:
-
您应该查阅教程或手册。您可以使用此代码进行 SQL 注入。如果您检查
$sendvalues错误代码,您可以查看它是重复错误还是其他错误。或者,您可以发送 AJAX 检查,然后在注册之前告诉用户它已经存在。尽管可以识别所有用户名,但这将允许暴力攻击。 -
谢谢 user3783243 我还没学过 AJAX 或 php 注入
-
在 INSERT 之前,执行 SELECT 以查看用户名是否存在。
-
我想检查一下,如果用户输入了列(用户名)中已经存在的重复名称,它会阻止向数据库发送数据并给用户错误消息没有意义.现在您发送 1 个查询并查看名称是否重复。在您想要进行的情况下,您将发送 1 个查询(并查看名称是否重复)或 2 个查询。您想从哪里获利?
-
旁注:不要使用字符串插值或连接将值获取到 SQL 查询中。这很容易出错,并且可能使您的程序容易受到 SQL 注入攻击。使用参数化查询。见"How to include a PHP variable inside a MySQL statement" 和"How can I prevent SQL injection in PHP?"。