2015-07-10 48 views
-3

我希望用戶輸入的數據被提交到數據庫。但由於某種原因,我的代碼不工作?HTML表單不會提交到數據庫

<form action="newpostsubmit.php" method="post"> 
    <h2 class="form-signin-heading">New Post (beta)</h2> 
    <div class="form-group"> 
    <label for="title">Title</label> 
     <input type="text" class="form-control" name="title" id="title"> 
    </div> 

    <br> 

    <div class="form-group"> 
     <label for="post">Post</label> 
     <textarea class="form-control" rows="5" name="post" id="post"></textarea> 
    </div> 

    <br> 

<input type="submit"> 

    </form> 

PHP提交

<?php 
//Connecting to sql db. 
$connect = mysqli_connect("localhost","root","pwd","db"); 

//Sending form data to sql db. 
mysqli_query($connect,"INSERT INTO posts (title, post) 
VALUES ('$_POST[title]', '$_POST[post]')"; 
?> 
+0

的名稱與HTML輸入必須在POST的名稱,例如$ _ POST [標題] – Mihai

+0

符合我剛纔改變,但仍然沒有工作 – mattmill98

+0

是您的文件名爲newpostsubmit.php?是不是在同一個文件夾中與HTML文件? – Mihai

回答

0

您需要清潔您發佈的變量來防止SQL注入和其他錯誤,然後正確地引用他們(字符串)在將它們插入到數據庫。

$cleanTitle = mysqli_real_escape_string($connect,$_POST['title']; 
$cleanPost = mysqli_real_escape_string($connect,$_POST['post']; 

$sql = "INSERT INTO posts (title, post) VALUES ('$cleanTitle', '$cleanPost')"; 
$insert = mysqli_query($connect,$sql); 

if(!$insert){ 
    echo 'ERROR :'.mysqli_error($connect); 
} 
+0

這不適用於我 – mattmill98

+0

添加上面的成功插入檢查。如果錯誤與數據庫相關 - 它應該顯示給你。 – MaggsWeb

+0

當我提交時注意到了,所以必須是PHP問題?我在'clean title'和'clean post'行有語法錯誤 – mattmill98

0
mysqli_query($connect,"INSERT INTO posts (title, post) 
    VALUES ('".$_POST[title]."', '".$_POST[post]."')"; 

查詢應該是這樣的。希望這可以幫助。

+0

你有沒有聽說過SQL注入..? – MaggsWeb

+1

是的,我有。使用mysql_real_escape_string(),strip_tags來防止。但是對指定問題的回答是這樣的。 –

+0

mysqli_ *會更好.. mysql_ *已被棄用。 – MaggsWeb

3

首先,您的$_POST變量不正確,因爲您忘記引用$_POST['title']這樣的項目。

二,你真的應該用preparedstatements。他們會讓你的代碼更清潔,並且還可以保護你免受 SQL Injection Attacks.的侵害。

您還應該對連接和查詢執行最小錯誤檢查,這很可能是因爲缺少一些有助於您成功的信息。這些錯誤已經存在於您的錯誤日誌中,但您可以將它們回顯到屏幕上。

//Connecting to sql db. 
$connect = mysqli_connect("localhost","root","pwd","db"); 
if (!$connect) { 
    echo "Connection failed: ". mysqli_connect_error(); 
    exit(); 
} 

//Sending form data to sql db. 
$stmt = mysqli_prepare($connect, "INSERT INTO `posts` (`title`, `post`) VALUES (?,?)"); 
mysqli_stmt_bind_param($stmt, 'ss', $_POST['title'], $_POST['post']); 

// execute prepared statement 
mysqli_stmt_execute($stmt); 

// was there a problem? 
if(mysqli_stmt_error($stmt)) { 
    echo "There was an error performing the query, " . mysqli_stmt_error($stmt); 
} 

有一個很多事情在這裏,但最引人注目的是在您使用的佔位符的變量(?)和mysqli_stmt_bind_param()綁定您的變量prepare(),爲字符串(s每個項目)的查詢。

最後,檢查是否有任何錯誤和呼應回屏幕mysqli_stmt_error()

注:確保了妥善處理錯誤的用戶,從未顯示實際問題,他們暴露您的網站進行攻擊。正如這裏所做的那樣,在屏幕上回顯信息在開發階段是很好的。