2015-09-08 23 views
1

我想創建一個簡單的博客條目表單,用戶輸入標題,博客條目並提交它。然後,表單應該使用插入查詢將「博客條目」插入到MYSQL中。簡單的PHP'博客條目'表單不提交到MYSQL數據庫?

  • 我得到沒有錯誤。
  • 當我提交表單時,沒有任何更改,數據庫沒有新的 條目,並且表單不顯示「提交後」或「發佈未提交 」。

這裏是blog.php的代碼

<?php 
    // 1. Establish a connection using three functions: 1. mysqli_connect() 2. mysqli_connect_errno() 3. mysqli_connect_error() 
    $dbhost = "localhost"; 
    $dbuser = "root"; 
    $dbpass = ""; 
    $dbname = "blog"; 

    $connection = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname); 

    // Test if connection occured 
    if(mysqli_connect_errno()) { 
     die("Database connection failed " . mysqli_connect_error() . "(" . mysqli_connect_errno() . ")"); 
     }  

    //Form submitted 
    if(isset($_POST['submit'])) { 

    //Error checking 
    if(!$_POST['title']) { 
     $error['title_error'] = "<p>Please supply a title.</p>\n"; 
     } 

    if(!$_POST['blog']) { 
     $error['blog_error'] = "<p>Please supply blog content.</p>\n"; 
     } 

    //No errors, process 
    if(!is_array($error)) { 

    //Process your form 
    // 2. Perform Your Query 

    $post_title = $POST["title"]; 
    $post_content = $POST["blog"]; 

    $query = "INSERT INTO entries (blog_id, blog_title, blog_content) 
      VALUES ('null', '{$post_title}', '{$post_content}')"; 

    $result = mysqli_query($connection, $query); 

    //Display confirmation of post. 

    if($result) { 
     echo "Post submitted!"; 
     } else { 
     echo "Error, post NOT submitted!"; 
    } 

    //Require or include any page footer you might have 
    //here as well so the style of your page isn't broken. 
    //Then exit the script. 
    exit; 

    } else { 
     echo $error; 
     } 
} 

?> 

<doctype> 
    <html> 
     <head> 
      <title> Blog </title> 
     </head> 

     <body> 
      <form method="POST" action="blog.php"> 
       Title: <input name="title" type="text"> <br /> 
       Blog: <textarea name="blog" cols="100" rows="5"> Blog Text here... </textarea> <br /> 
       <input value="submit" type="submit" value="Submit" /> 
      </form> 
     </body> 

</html> 

這裏是形式的屏幕拍攝後提交。

enter image description here

這裏是叫blog MYSQL數據庫的截圖,和表名爲entries

enter image description here

這裏是我的數據庫的結構: enter image description here

有人知道我做錯了什麼。我是PHP的新手,我不知道如何在沒有錯誤的情況下調試問題!

UPDATE 1. 解決方案奏效。謝謝。不過,我收到以下錯誤:

Notice: Undefined variable: error in C:\XAMPP\htdocs\blogwebsite\blog.php on line 30

我知道這是因爲我還沒有初始化$錯誤[]數組。但是擺脫這個錯誤的標準方式是什麼?請幫忙!

+0

它應該是'$ post_title = $ _POST [「title」]; $ post_content = $ _POST [「blog」];' –

回答

1

您的if(isset($_POST['submit'])) {條件不會設置爲true,因爲您沒有爲提交按鈕設置名稱標籤。

它應該是

<input value="Submit" type="submit" name="submit"/> 

然後在重新分配給另一個變量傳入從表單數據,它不應該是$POST["title"],它應該是$_POST["title"]

您還應該考慮使用mysqli_real_escape_string來防止SQL injections

$post_title = mysqli_real_escape_string($connection, $_POST["title"]); 
$post_content = mysqli_real_escape_string($connection, $_POST["blog"]); 

但儘管如此,你應該使用prepared statement而不是使用mysqli_*deprecatedmysql_* API的功能。

關於你正在爲undefined variable錯誤,爲什麼你不放棄的輸入檢查你的代碼的一部分,並與這種簡單的替換:

if(!empty($_POST["title"]) || !empty($_POST["blog"])){ /* IF BOTH INPUTS HAVE CONTENTS */ 
    /* THE CODE YOU WANT TO EXECUTE */ 
} 
else { 
    $error = "<p>Please supply a title or a blog content.</p>\n"; 
} 

或者只是刪除您的輸入檢查,並使用HTML的required屬性。

<input name="title" type="text" required> 
<textarea name="blog" cols="100" rows="5" required> 

讓你的PHP代碼將是直接的:

if(isset($_POST["submit"])){ 
    /* YOUR INSERT QUERY HERE */ 
} 

required的利弊,以及在!empty()條件是,它接受空的空間()。要繞過這個,你應該使用支持這種東西的Javascript或庫。

+0

解決方案奏效。謝謝。但我收到以下錯誤: >注意:未定義的變量:錯誤在C:\ XAMPP \ htdocs \ blogwebsite \ blog.php 30行 **我知道這是因爲我沒有初始化$ error []數組。但是擺脫這個錯誤的標準方式是什麼?請幫忙!** – user3289740

+0

謝謝你的幫助!處理表單中的錯誤的標準方式是什麼,以及最優化的方式是什麼?它是否通過您列出的選項通過JavaScript最受歡迎? – user3289740

+0

是的,JavaScript是徹底檢查表單的方法。順便說一句,如果我的回答對你有幫助,你可以贊成或接受我的答案爲正確答案。 –

0

在你的html表單中,submit元素有兩個「value」屬性但沒有「name」屬性。因此它在if(isset($ _ POST ['submit']))檢查中找不到,原始表單顯示爲沒有任何內容。