2016-10-02 64 views
8

當我按提交按鈕時出現錯誤。無法通過PHP將新記錄插入到mysql數據庫中

object not found error。

然後頁面自動添加自動增加的主鍵(沒有按下提交按鈕)的空條目。

我仍然是PHP的初學者,我徹底搜索,但我無法找出代碼中出了什麼問題。

<html> 
<head> 
    <title>Add New Record in MySQL Database</title> 
</head> 
<body> 
    <form action="insert.php" method="post"> 
     <p> 

      <label for="Name">Full Name:</label> 

      <input type="text" name="Name" id="Name"> 

     </p> 
     <p> 
      <label for="Code">Code:</label> 
      <input type="text" name="Code" id="Code"> 
     </p> 
     <p> 
      <label for="GPA">GPA:</label> 
      <input type="text" name="GPA" id="GPA"> 
     </p> 
     <input type="submit" value="Submit"> 
    </form> 

    <?php 
/* Attempt MySQL server connection. Assuming you are running MySQL 

server with default setting (user 'root' with no password) */ 

$link = mysqli_connect("localhost", "username", "password", "students"); 
// Check connection 

if ($link === false) { 

die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 
// Escape user inputs for security 
$full_name = filter_input(INPUT_POST, 'full_name'); 
$code = filter_input(INPUT_POST, 'code'); 
$gpa = filter_input(INPUT_POST, 'gpa'); 
// attempt insert query execution 
$sql = "INSERT INTO info VALUES ('$full_name', '$code', '$gpa')"; 
if (mysqli_query($link, $sql)) { 
echo "Records added successfully. $full_name"; 
} else { 
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 
// close connection 
mysqli_close($link); 
?> 
</body> 
</html> 
+0

您需要檢查是否已處理表單。我更喜歡在一個單獨的php文件中處理表單而不是實際的表單。 – Linkan

+2

您已開放給SQL注入。 – chris85

+0

我應該如何處理SQL注入? –

回答

16

試試這個:

$full_name = filter_input(INPUT_POST, 'Name'); 
$code = filter_input(INPUT_POST, 'Code'); 
$gpa = filter_input(INPUT_POST, 'GPA'); 

爲什麼我寫的,這是因爲你的輸入名稱包含NameCodeGPA所以你需要寫這正是因爲你的輸入名稱(大小寫敏感的原因)。

+0

它仍不會添加記錄。 –

+0

Jees的答案是否正確地爲你工作? –

+0

僅適用於空條目,但記錄仍不會通過表單添加。 –

6

isset()來做。當提交按鈕只點擊代碼運行時。

在php中你應該使用表單輸入名字段。

<?php 
if(isset($_POST['submit'])){ 
    $link = mysqli_connect("localhost", "username", "password", "students"); 
    if ($link === false) { 
     die("ERROR: Could not connect. " . mysqli_connect_error()); 
    } 
    // Escape user inputs for security 
    $full_name = filter_input(INPUT_POST, 'full_name'); 
    $code = filter_input(INPUT_POST, 'code'); 
    $gpa = filter_input(INPUT_POST, 'gpa'); 

    //to prevent sql injection attack 
    $full_name = mysqli_real_escape_string($link, $full_name); 
    $code = mysqli_real_escape_string($link, $code); 
    $gpa = mysqli_real_escape_string($link, $gpa); 

    // attempt insert query execution 
    $sql = "INSERT INTO info (Name,Code,GPA) VALUES ('$full_name', '$code', '$gpa')"; 
    if (mysqli_query($link, $sql)) { 
     echo "Records added successfully. $full_name"; 
    } else { 
     echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
    } 
    // close connection 
    mysqli_close($link); 
} 
?> 
<html> 
<head> 
    <title>Add New Record in MySQL Database</title> 
</head> 
<body> 
    <form action="insert.php" method="post"> 
    <p> 
     <label for="Name">Full Name:</label> 
     <input type="text" name="full_name" id="Name"> 
    </p> 
    <p> 
     <label for="Code">Code:</label> 
     <input type="text" name="code" id="Code"> 
    </p> 
    <p> 
     <label for="GPA">GPA:</label> 
     <input type="text" name="gpa" id="GPA"> 
    </p> 
    <input type="submit" name="submit" value="submit"> 
</form> 
</body> 
</html> 
+0

謝謝,解決了空條目問題。 –

+0

請提一下'info'的表結構。 –

+0

info是「students」db中的一個表,它有3列;名稱,代碼,GPA和2行數據。 –

2

問題是輸入名稱。您用name="Name"命名全名輸入,但您在php部分聲明$full_name = filter_input(INPUT_POST, 'full_name');。您必須將full_name更改爲Name。以及代碼和GPA輸入。

+1

這正是我在我的答案中寫的... –

+0

@EdvinTenovimas啊,你是對的。對不起,我不注意..我只是投你的答案:) –

+0

好吧,謝謝! :)如果你沒有注意到,沒關係,每個人都會遇到這種情況。 –

相關問題