2013-10-25 42 views
0
<?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";命令,仍然沒有,儘管頁打印添加到數據庫中的條目添加文檔成功。這裏有什麼問題?不能使INSERT INTO SQL數據庫表的工作

+0

當您專門連接到該數據庫時,不需要USE命令。 – calcinai

+0

echo $ query; ....你可以用這種方式測試查詢,看看這些值是否正確。 – Hackerman

+0

我改變它的USE命令來指定表名,但它仍然不起作用。 – Gannicus

回答

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); 
+0

就在VALUES部分有一個過分的逗號。是的,我會研究SQL注入以及這是我第一次構建網站..謝謝! – Gannicus

+0

這裏「ii」是什麼意思? – Gannicus

+0

查看[manual](http://php.net/manual/en/mysqli-stmt.bind-param.php),這是您指定數據類型的方式。 – calcinai

1

這裏有很多錯誤。我懷疑這是失敗的,因爲VALUES括號內有一個尾隨的逗號。然而,對我來說最令人擔憂的是,它看起來像是直接從POST數組中直接抽取用戶輸入到數據庫中,使得這些代碼容易受到SQL注入的影響。

有關更多信息,請參閱mysqli_real_escape_string()

另外,mysqli_query()失敗時返回false,所以我會檢查這個,如果它發生,請致電mysqli_error()找出哪裏出了問題。只有在mysqli_query未宣佈文檔已成功添加時才返回false。

0

您需要轉儲$ _POST數組以查看是否真的有數據被髮送。

session_start(); 
var_dump($_POST); 

然後每個SQL調用之後呼應你的SQL以及

echo $query; 

最後,你真的應該插入到數據庫之前驗證輸入($ _ POST數組),如因SQL注入已經說明風險。