我正在制作一个小项目,我在使用php脚本时遇到了一些麻烦。基本上,当他们输入文本然后单击“Enter”它会加载到“insert.php”。问题是,如果他们只是访问insert.php页面而没有进入主页面它会进入一个可能导致大问题的计划表。
代码:
$con=mysqli_connect("localhost","info","info","info");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[age]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
你能帮我解决这个问题,因为它可能会造成很多麻烦。
答案 0 :(得分:0)
这很简单。
if(isset($_POST)):
//all of your code here
endif;
答案 1 :(得分:0)
首先,您需要使用isset()验证$ _POST变量。 如果未从表单提交,$ _POST将为空。这意味着当用户尝试输入网址时,将不会有任何发布数据,并且您的SQL查询将无法运行。
第二,由于您没有转义内容,因此您需要进行SQL注入。 我建议使用预处理语句或mysqli_real_escape_string来逃避每个变量(不太安全,但总比没有好。)
if ( isset($_POST) && !empty($_POST['firstname']) && !empty($_POST['lastname']) && !empty($_POST['age'])) {
$con=mysqli_connect("localhost","info","info","info");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
//simple example of escaping variables - BUT NOT AS SECURE AS PREPARED STATEMENT!!
$firstname = $con->real_escape_string($_POST['firstname']);
$lastname = $con->real_escape_string($_POST['lastname']);
$age = $con->real_escape_string($_POST['age']);
//With MySQLi it is best practice to use `prepere`, `bind_param` and `execute:
//or use PDO.
$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);
}
最后,你错过了$ _POST变量中的单引号。
希望这有帮助!
答案 2 :(得分:0)
您必须检查是否存在$ _POST才能触发您的sql请求 if(isset($ _ POST)){ //脚本 }
答案 3 :(得分:0)
我最开始看到的第一件事就是你没有检查确保输入的东西已经输入到将数据传递到另一个文件的输入框中。您可以尝试使用isset()或array_key_exist()。更不用说这些是你应该做的事情。