【问题标题】:POST method not inserting data into database tablePOST方法不将数据插入数据库表
【发布时间】: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注入开放。

标签: php mysql database phpmyadmin mamp


【解决方案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[] 请求

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2021-12-21
      • 2023-03-20
      • 2019-01-07
      • 1970-01-01
      相关资源
      最近更新 更多