2016-04-24 189 views
0

我正在努力將數據添加到mysqli數據庫中。也許我只是把代碼放在錯誤的地方,但沒有任何信息添加到我的表單中。如果你能幫助我,那會很棒。謝謝。將php連接到mysqli數據庫

PS我已經刪除了部分原始代碼,如錯誤消息。

<?php 

    $servername = "A"; 
    $username = "B"; 
    $password = "C"; 
    $dbname = "D"; 

if (isset($_POST["submit"])) { 
    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 

    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    //Check connection 
    if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 

    $query = "INSERT INTO Form (name, email, message)". 
    "VALUES ('" . $name . "', '" . $email . "', '" . $message . "');"; 

    mysqli_query($query); 

    //close connection 
    mysqli_close($conn); 
} 
?> 
+0

你的代碼是開放的SQL注入。我建議使用準備好的語句並綁定你的參數,否則黑客可能會像刪除所有表一樣,和/或檢索表中的所有信息。 – Webeng

+1

旁註:前一段時間你已經給了幾個答案。只要你把問題標記爲已解決,就選擇你想要的任何一個。否則,你的問題仍然被認爲是開放/未解決的,其他人可能會試圖發佈更多的答案。以下是http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work然後返回到此處,並使用勾號/複選標記執行相同操作,直至變爲綠色。這告訴社區,找到了解決方案。這就是*「Stack roll ...」* ;-)如果它們都不起作用,那麼在答案下發表評論並指出任何錯誤。 –

回答

2

需要mysqli_query連接參數:

mysqli_query($conn, $query); 

此外,還需要使用mysqli_real_escape_string()防止SQL注入:

$name = mysqli_real_escape_string($conn, $_POST['name']); 
$email = mysqli_real_escape_string($conn, $_POST['email']); 
$message = mysqli_real_escape_string($conn, $_POST['message']); 
2

簡單,你從來​​沒有通過數據庫連接到mysqli_query($query);

並確保您的POST數組包含值。

因此,mysqli_query($conn, $query);並檢查錯誤。

諮詢手冊,請參閱這些以下鏈接http://php.net/manual/en/mysqli.error.phphttp://php.net/manual/en/function.error-reporting.php和應用,爲您的代碼。

您現在的代碼對SQL injection開放。使用prepared statementsPDOprepared statements

還要確保這個條件語句就火了:

if (isset($_POST["submit"])) {...} 

如果你的提交按鈕不成立的submit name屬性(和所有其他POST陣列),那麼什麼都在那裏將被執行。

即使:name="submit",name="name",name="email",name="message"並且表單確實使用POST方法。

錯誤報告將幫助你在這裏。

error reporting添加到您的文件的頂部,這將有助於發現錯誤。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

旁註:顯示錯誤應該只在分期完成,並且從不生產。

N.B .:你也應該檢查空的領域,如果這是一個活的網站或打算上線。

如果用戶沒有輸入任何內容,那麼您可能會因此而導致錯誤/失敗。

對這些輸入使用條件!empty()

即:

if (isset($_POST["submit"])) { 

if(!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['message'])){ 

    $name = $_POST['name']; 
    $email = $_POST['email']; 
    $message = $_POST['message']; 

    // Rest of your query here 

    } 

    else{ echo "One of the fields is empty."; exit; } 


} 
else{ echo "Submit is not set."; } 

腳註:

這是不確定你是如何下,如果一個Web服務器/ PHP運行此代碼/ MySQL的安裝和配置正確。

如果您訪問的是file:///file.xxx而不是http://localhost/file.xxx,那麼它會失敗。

  • 它需要是後者。
+0

我認爲你在'if(isset($ _ POST [「submit」])){...} \''' – Panda

+0

@luweiqi'結尾處不小心加了一個反勾。謝謝,我解決了這個問題。還在做一個額外的編輯。 *歡呼* ;-) –

+1

不客氣! :) – Panda

0

而且我認爲你需要使用`字符表和列名稱,如果你沒有。 (靠近鍵盤上的1,也用於簡單的在計算器中的代碼)。也許你使用了這個字符,但是stackoverflow不顯示字符。

+0

蜱只在特殊情況下才需要,在OP的情況下;他們不是必需的。請閱讀標識符限定符http://dev.mysql.com/doc/refman/5.7/en/identifier-qualifiers.html - 其他因素是表格/列名稱,保留字,連字符等中的空格。 –

+0

但我不能'不執行任何查詢而沒有勾號。 :) – KamyarM

+0

*嗯... *我不明白你的意思。執行哪些查詢*? –