我有一个带有几个输入框的表单
<input type='text' name='Last' placeholder='Last Name'/>
<input type='text' name='dob' placeholder='Birth Date'/>
<input type='text' name='height' placeholder='Height'/>
但是如果我在输入框中写入类似4/8/87的日期,它就不会保存到数据库中。如果我写高度为5&#39; 7&#34;或电话号码为702-412-4453如果我写那样的话。什么都不会保存。我必须把它们全部写成通用的,如4887或57或7024124453
有人可以解释原因或给我一个解决方法吗?
答案 0 :(得分:6)
在插入数据库之前,您需要过滤并清理输入。
如果您不使用PHP,请使用mysqli_real_escape_string或您的语言提供的任何类似功能:
<?php
$con=mysqli_connect("localhost","my_user","my_password","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
来自w3school的那些:http://www.w3schools.com/php/func_mysqli_real_escape_string.asp
这将确保插入查询的安全性,并将变量值读取为仅插入的值,而不是查询语法的一部分。
例如,您插入5&#39; 7:查询将是:
没有退出:
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '5'7')";
请参阅5&#7; 7查询查询,因此您需要将其转义:
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '".mysqli_real_escape_string("5'7")."')";
现在5&#39; 7不会破坏查询,因为它只会被读取为要插入的值。
答案 1 :(得分:0)