PHP 表单未更新 sqlite 数据库
PHP form not updating sqlite database
我有一个 PHP 表单,可以将一本书添加到 SQLite 数据库中的 table 本书中。表单已提交,但是我的数据库中没有添加一本书。
<?php
session_start();
require("books.php");
require("layout.php");
$db=sqlite_open ("products.db", 0666, $error);
echo $header;
echo "<p>
<a href='./index.php'>Bookshop</a></p>";
echo "<h1> Add Books </h1>
<p>
<form action='' method='get' id='AddBook'>
Author: <input type='text' name='Author'><br>
Title: <input type='text' name='Title'><br>
Brief_Synopsis: <input type='text' name='Synopsis'><br>
ISBN_Number: <input type='text' name='ISBN'><br>
Publisher: <input type='text' name='Publisher'><br>
imgNumber (save img with this name under /img/): <input type='text' name='imgNum'><br>
Price: <input type='text' name='Price'><br>
Category 1: <input type='text' name='Cat1'><br>
Category 2: <input type='text' name='Cat2'><br>
<input type='submit' value='Submit' name='Submit'>
</form>
</p>";
if(isset($_POST['Submit'])){
$author = $_POST['Author'];
$title = $_POST['Title'];
$Synopsis = $_POST['Synopsis'];
$ISBN = $_POST['ISBN'];
$Publisher = $_POST['Publisher'];
$imgNum = $_POST['imgNum'];
$Price = $_POST['Price'];
$Cat1 = $_POST['Cat1'];
$Cat2 = $_POST['Cat2'];
sqlite_query($db,"INSERT INTO Books (Author, Title, Brief_Synopsis, ISBN_Number, Publisher, imgNumber, price, cat1, cat2) VALUES ('$_POST[Author]', '$_POST[Title]', '$_POST[Synopsis]', '$_POST[ISBN]', '$_POST[Publisher]', '$_POST[imgNum]', '$_POST[Price]', '$_POST[Cat1]', '$_POST[Cat2]')");
echo("Book Added!");
$dbh = null;
}
?>
为什么这段代码没有正确更新我的数据库?在我添加 if 语句之前,它会在每次加载页面时向数据库添加一本空书,但是现在它提交并重置表单,我的 URL 看起来是正确的,但数据库没有添加任何项目。
if 语句正在检查提交是否存在且不为空。您无法检查输入类型提交,没有关联值。您可以添加一个隐藏的输入并检查它:
<input type="hidden" name="checkSubmit" value="Submitted">
if(isset($_POST['checksubmit']))
您的代码无提示失败,因为您在表单中使用了 GET 方法,而您使用的是 POST 数组。
- 将表单的方法更改为 POST。
我还需要指出,您目前的代码对 SQL injection. Use prepared statements, or PDO with prepared statements 开放,它们更安全。
我还注意到 sql 注入正在查看 $_POST['myvariable']
最多使先前的变量检查变得多余。
我有一个 PHP 表单,可以将一本书添加到 SQLite 数据库中的 table 本书中。表单已提交,但是我的数据库中没有添加一本书。
<?php
session_start();
require("books.php");
require("layout.php");
$db=sqlite_open ("products.db", 0666, $error);
echo $header;
echo "<p>
<a href='./index.php'>Bookshop</a></p>";
echo "<h1> Add Books </h1>
<p>
<form action='' method='get' id='AddBook'>
Author: <input type='text' name='Author'><br>
Title: <input type='text' name='Title'><br>
Brief_Synopsis: <input type='text' name='Synopsis'><br>
ISBN_Number: <input type='text' name='ISBN'><br>
Publisher: <input type='text' name='Publisher'><br>
imgNumber (save img with this name under /img/): <input type='text' name='imgNum'><br>
Price: <input type='text' name='Price'><br>
Category 1: <input type='text' name='Cat1'><br>
Category 2: <input type='text' name='Cat2'><br>
<input type='submit' value='Submit' name='Submit'>
</form>
</p>";
if(isset($_POST['Submit'])){
$author = $_POST['Author'];
$title = $_POST['Title'];
$Synopsis = $_POST['Synopsis'];
$ISBN = $_POST['ISBN'];
$Publisher = $_POST['Publisher'];
$imgNum = $_POST['imgNum'];
$Price = $_POST['Price'];
$Cat1 = $_POST['Cat1'];
$Cat2 = $_POST['Cat2'];
sqlite_query($db,"INSERT INTO Books (Author, Title, Brief_Synopsis, ISBN_Number, Publisher, imgNumber, price, cat1, cat2) VALUES ('$_POST[Author]', '$_POST[Title]', '$_POST[Synopsis]', '$_POST[ISBN]', '$_POST[Publisher]', '$_POST[imgNum]', '$_POST[Price]', '$_POST[Cat1]', '$_POST[Cat2]')");
echo("Book Added!");
$dbh = null;
}
?>
为什么这段代码没有正确更新我的数据库?在我添加 if 语句之前,它会在每次加载页面时向数据库添加一本空书,但是现在它提交并重置表单,我的 URL 看起来是正确的,但数据库没有添加任何项目。
if 语句正在检查提交是否存在且不为空。您无法检查输入类型提交,没有关联值。您可以添加一个隐藏的输入并检查它:
<input type="hidden" name="checkSubmit" value="Submitted">
if(isset($_POST['checksubmit']))
您的代码无提示失败,因为您在表单中使用了 GET 方法,而您使用的是 POST 数组。
- 将表单的方法更改为 POST。
我还需要指出,您目前的代码对 SQL injection. Use prepared statements, or PDO with prepared statements 开放,它们更安全。
我还注意到 sql 注入正在查看 $_POST['myvariable']
最多使先前的变量检查变得多余。