2015-07-10 90 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()

注:确保了妥善处理错误的用户,从未显示实际问题,他们暴露您的网站进行攻击。正如这里所做的那样,在屏幕上回显信息在开发阶段是很好的。