php - 如何修复 php 添加普通行的问题

标签 php mysql

我正在制作一个小项目,但在使用 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);

你能帮我解决这个问题吗,因为它可能会引起很多麻烦。

最佳答案

首先,您需要使用 isset() 验证 $_POST 变量。 如果不是从表单提交,$_POST 将为空。这意味着当用户尝试输入 URL 时,不会有任何发布数据,并且您的 SQL 查询也不会运行。

第二,由于您没有转义内容,因此您会受到 SQL 注入(inject)的影响。 我建议使用准备好的语句或 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 变量中的单引号。

希望这有帮助!

关于php - 如何修复 php 添加普通行的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21344618/

相关文章:

php - php mysqli_connect : authentication method unknown to the client [caching_sha2_password]

php - 在运行 Ubuntu 12.04 的 Travis CI 上使用 APCu

php - SQL 提交 0 而不是实际值。还删除@和.在电子邮件地址中

java - Struts2登录MySQL错误

javascript - 内部联接返回单行而不是多行

php - 如何创建2个PDO数据库连接实例PHP

javascript - PHP 应用程序出现无法解释的 404 错误

php - 有没有办法在另一个wordpress页面中调用wordpress中的外部php页面

php - MySQL 过滤器 JSON_CONTAINS 数组中的任何值

mysql - 错误 1005 (HY000) 在第 244 行 : Can't create table './intranet2/dept.frm' (errno: 150)