Php 如何使用表单控制进入sql数据库的不需要的数据和用户验证
我是Php和Mysql新手,这是我的第一个项目。现在我已经创建了该项目的注册部分,但我遇到了一些问题: 1.我创建的错误似乎无法阻止不需要的数据进入数据库 2.如果出现错误,整个表单将被清除,而不是保留部分信息 3.我不知道为复选框表单类型创建错误的代码Php 如何使用表单控制进入sql数据库的不需要的数据和用户验证,php,html,mysql,php-5.6,Php,Html,Mysql,Php 5.6,我是Php和Mysql新手,这是我的第一个项目。现在我已经创建了该项目的注册部分,但我遇到了一些问题: 1.我创建的错误似乎无法阻止不需要的数据进入数据库 2.如果出现错误,整个表单将被清除,而不是保留部分信息 3.我不知道为复选框表单类型创建错误的代码 我不知道检查用户名/电子邮件是否已被占用的代码。。尽管它们在Mysql中已经是独一无二的 以下是我的部分代码…任何形式的建议都将不胜感激,谢谢 <?php // define variables and set to empty
<?php
// define variables and set to empty values
$username="";
$password="";
$email="";
$agreement="";
$nameErr="";
$passErr="";
$emailErr="";
$emailErr1="";
$emailErr2="";
$cboxErr="";
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["username"])) {
$nameErr = "Username is required";
} else {
$username = test_input($_POST["username"]);
// check if name only contains numbers letters and some special characters
if (!preg_match("/^[a-zA-Z0-9@_]*$/",$username)) {
$nameErr = "Only letters , numbers , '@' , '_' allowed";
}
}
if (empty($_POST['password'])) {
$passErr = ' Password is required !';
} else {
$password = test_input($_POST['password']);
if (!preg_match('/^[a-zA-Z0-9@_]*$/', $password)) {
$passErr = 'password can only contain a upper/lower case letters , numbers, "_""@"';
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["re-email"])) {
$emailErr1 = "Please re-enter the email";
}
else if ($_POST["email"] != $_POST["re-email"]){
$emailErr2 = "The emails you entered do not match";
}
else {
$email = test_input($_POST["re-email"]);
}
if (empty($_POST["agreement"])) {
$tickErr = "Tick the box below ";
}
else {
$agreement = test_input($_POST["agreement"]);
}
}
?>
<?php
$msg="";
require('connect.php');
// If the values are posted, insert them into the database.
if (isset($_POST['username']) && isset($_POST['password'])){
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$username = mysql_real_escape_string( $username);
$email= mysql_real_escape_string($email);
$password= mysql_real_escape_string($password);
$query = "INSERT INTO `user` (username, password, email) VALUES ('$username', '$password', '$email')";
$result = mysql_query($query);
if($result){
$msg = "User Created Successfully.";
}
}
?>
我创建的错误似乎无法阻止不需要的数据进入数据库
由于我的代表的原因,我还不能发表评论,但具体有哪些错误
如果出现错误,整个表单将被清除,而不是保留一些信息
可能最好从POST中获取值,并将值回送到
每个输入,例如
<input class="formfield detail-box" type="text" id="username" name="username" size="40" placeholder="Username" value="<?php $_POST['username']; ?>"/></center></p>
我不知道检查用户名/电子邮件是否已被占用的代码。。尽管它们在Mysql中已经是独一无二的
尝试使用给定的用户名/电子邮件运行SELECT
语句,如果查询返回结果,则拒绝请求,例如
SELECT username FROM user WHERE username = ?;
(使用?
参数作为发布的用户名)
另一方面,您可能需要研究(用户恶意编辑语句),您的INSERT语句容易受到影响。另外,考虑对数据库中的密码进行加密。
1.我创建的错误似乎无法阻止不需要的数据进入数据库
你没有制造任何错误。您只是将错误字符串分配给变量。无论您在哪里遇到错误,都可以尝试类似于抛出新异常(“无效电子邮件格式”)
而不是$emailErr=“无效的电子邮件格式”代码>。没有发生任何事情,因为您没有使用$emailErr
执行任何操作
2.如果出现错误,整个表单将被清除,而不是保留部分信息
这是因为页面被重新加载。如果需要,可以在重新加载后重新填充表单,方法如下:
<span class="error"><?php echo $tickErr; ?></span>
SELECT username FROM user WHERE username = ?;