<?php
session_start();
$con=mysqli_connect("localhost","root","","accting");
$query = "USE accting";
$result = mysqli_query($con,$query);
$query = "INSERT INTO document (docDate, supplierName, refNo, vatReg, vpGoods, viGoods, nvPurchases, totalAmt, book, cash, account, termsMonth, termsDay) VALUES ('{$_POST['invoiceDate']}', '{$_POST['supplierName']}', '{$_POST['refNo']}', '{$_POST['vatReg']}', '{$_POST['amtVat']}', '{$_POST['vatInput']}', '{$_POST['nonVat']}', '{$_POST['total']}', '{$_POST['bookType']}', '{$_POST['cash']}', '{$_POST['account']}', '{$_POST['termsMonths']}', '{$_POST['termsDays']}',)";
$result = mysqli_query($con, $query);
echo "Add document successful.";
?>
使用或不使用$query = "USE accting";
命令,尽管页面打印添加文档成功,但条目仍未添加到数据库中。这有什么不对?
答案 0 :(得分:2)
问题很可能是VALUES
部分中的尾随逗号。
您还应该考虑另一种传递变量的方法,因为那里存在SQL Injection漏洞。这是一个例子:
$stmt = mysqli_prepare($link, "INSERT INTO table VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, "ii", $_POST['x'], $_POST['y']);
mysqli_stmt_execute($stmt);
答案 1 :(得分:1)
这里有很多错误。我怀疑它失败了,因为你的VALUES括号内有一个尾随逗号。但是,对我来说最令人担忧的是,看起来你直接将POST数组中的用户输入直接输入到数据库中,这使得这段代码容易受到SQL注入的攻击。</ p>
有关详细信息,请参阅mysqli_real_escape_string()
。
此外,mysqli_query()
在失败时返回false,因此我会检查这一点,如果发生这种情况,请致电mysqli_error()
以找出问题所在。只有当mysqli_query
没有返回false时才宣布文档已成功添加!
答案 2 :(得分:0)
您需要转储$ _POST数组以查看是否确实发送了任何数据。
session_start();
var_dump($_POST);
然后在每次SQL调用之后回显你的sql
echo $query;
最后,你真的应该在插入db之前验证输入($ _POST数组),正如已经说明的那样,因为sql注入风险。