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 INTO
dogs(
name,
breed,
age) VALUES ([$name],[$breed],[$age)');
到
$newdog = mysqli_query($connect, 'INSERT INTO
dogs(
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方法不将数据插入数据库表的主要内容,如果未能解决你的问题,请参考以下文章
在 python2.7 中使用 pool.apply_async 不将值插入 MySQL 表