POST方法不将数据插入数据库表

Posted

技术标签:

【中文标题】POST方法不将数据插入数据库表【英文标题】:POST method not inserting data into database table 【发布时间】:2017-11-04 20:36:14 【问题描述】:

我正在尝试使用数据库并使用 php 动态插入数据。 目前我有一个带有“发布”方法的表单,一切对我来说似乎都是合乎逻辑的,但它没有将数据插入到表格中。

代码附在下面,如果有人能指出我正确的方向,将不胜感激。

index.php:

<form action="index.php" method="post">

<label for="name">Name</label>
<input type="text" name="name" required>

<label for="breed">Breed</label>
<input type="text" name="breed">

<label for="age">Age</label>
<input type="text" name="age">

<input type="submit" name="submit" value="Submit">

</form>

<?php

require "connect.php";

if('submit') 
    $name = $_POST['name'];
    $breed = $_POST['breed'];
    $age = $_POST['age'];

    $newdog = mysqli_query('INSERT INTO `dogs`(`name`, `breed`, `age`) VALUES ([$name],[$breed],[$age)');

    if ($newdog) 
        echo "$name has been added to the database";
     else 
        echo "$name has not been added to database.";
    ;
;

?>

connect.php:

<?php

$connect = mysqli_connect('localhost', 'max', 'password', 'db_test');

?>

【问题讨论】:

请使用prepared statements,您的代码对SQL注入开放。 【参考方案1】:
<?php

require "connect.php";

if(isset($_POST['submit'])) 
    $name = $_POST['name'];
    $breed = $_POST['breed'];
    $age = $_POST['age'];

    $newdog = mysqli_query($connect, 'INSERT INTO dogs(name, breed, age) VALUES ("'.$name.'","'.$breed.'","'.$age.'")');

    if ($newdog) 
        echo "$name has been added to the database";
     else 
        echo "$name has not been added to database.";
    ;
;

?>

【讨论】:

【参考方案2】:

更改if('submit')

if(isset($_POST['submit']))//check if it is set


也改变这一行:

$newdog = mysqli_query('INSERT INTOdogs(name,breed,age) VALUES ([$name],[$breed],[$age)');

$newdog = mysqli_query($connect, 'INSERT INTOdogs(name,breed,age) VALUES ($name,$breed,$age)');//remove square bracktes and add connection variable

您的代码很容易受到 SQL 注入的攻击

使用准备好的语句,

$stmt = $connect->prepare("INSERT INTO dogs (`name`, `breed`, `age`) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $name, $breed, $age);
if($stmt->execute() == true)
   echo 'Saved';
 else 
   echo 'Error '. $stmt->error;
 

【讨论】:

到目前为止,即使您建议进行更改,它也无法正常工作。我了解它的脆弱性,但我想在担心安全性之前先让它工作。感谢您到目前为止的帮助 感谢@akintude,它还不能正常工作,但我感谢您为确保我的代码安全所做的努力:)【参考方案3】:

自己的答案:想通了,我不得不将 PHPStorm 配置为使用 MAMP Apache 服务器而不是内部服务器,因为那显然不喜欢 $_POST[] 请求

【讨论】:

以上是关于POST方法不将数据插入数据库表的主要内容,如果未能解决你的问题,请参考以下文章

在laravel中将数据插入数据透视表

在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表

Ajax 使用 POST 方法发送数据,但 PHP 函数不会将它们插入到表中

C# SQLDataAdapter - 不将数据插入数据库

Spring Batch 处理记录,但不将它们插入数据库

如何将数据库表中的一个值和 $_POST 中的另一个值插入另一个数据库表[重复]