简单 PHP 'blog entry' 表单未提交到 MYSQL 数据库?
Simple PHP 'blog entry' form not submitting to MYSQL database?
我正在尝试创建一个简单的博客条目表单,用户可以在其中输入标题、博客条目并提交。然后表单应使用插入查询将 'blog entry' 插入 MYSQL。
- 我没有收到任何错误。
- 当我提交表单时没有任何改变,数据库没有新的
条目和表单不显示 "Post Submitted" 或“Post 不
已提交。
这里是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>
这是提交表单后的屏幕截图。
这是名为 blog
的 MYSQL 数据库和名为 entries
的 table 的屏幕截图:
这是我的数据库的结构:
有谁知道我做错了什么。我是 PHP 的新手,我不知道如何在没有错误的情况下调试问题!
更新 1.
该解决方案奏效了。谢谢你。但是我收到以下错误:
Notice: Undefined variable: error in C:\XAMPP\htdocs\blogwebsite\blog.php on line 30
我知道这是因为我还没有初始化 $error[] 数组。但是摆脱这个错误的标准方法是什么?请帮忙!
在您的 html 表单中,提交元素有两个 "value" 属性但没有 "name" 属性。因此,在 if(isset($_POST['submit'])) 检查中找不到它,并且显示原始表单,就好像什么都没有发布一样。
您的 if(isset($_POST['submit'])) {
条件不会设置为真,因为您没有为提交按钮设置名称标签。
应该是
<input value="Submit" type="submit" name="submit"/>
然后将表单传递的数据重新赋值给另一个变量,它不应该是$POST["title"]
,应该是$_POST["title"]
。
您还应该考虑使用 mysqli_real_escape_string
to prevent SQL injections。
$post_title = mysqli_real_escape_string($connection, $_POST["title"]);
$post_content = mysqli_real_escape_string($connection, $_POST["blog"]);
但是,你还是应该使用 prepared statement rather than using mysqli_*
with the functions of the deprecated mysql_*
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()
条件是它接受空 space (
)。要绕过这个,你应该使用 Javascript 或支持这种东西的库。
我正在尝试创建一个简单的博客条目表单,用户可以在其中输入标题、博客条目并提交。然后表单应使用插入查询将 'blog entry' 插入 MYSQL。
- 我没有收到任何错误。
- 当我提交表单时没有任何改变,数据库没有新的 条目和表单不显示 "Post Submitted" 或“Post 不 已提交。
这里是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>
这是提交表单后的屏幕截图。
这是名为 blog
的 MYSQL 数据库和名为 entries
的 table 的屏幕截图:
这是我的数据库的结构:
有谁知道我做错了什么。我是 PHP 的新手,我不知道如何在没有错误的情况下调试问题!
更新 1. 该解决方案奏效了。谢谢你。但是我收到以下错误:
Notice: Undefined variable: error in C:\XAMPP\htdocs\blogwebsite\blog.php on line 30
我知道这是因为我还没有初始化 $error[] 数组。但是摆脱这个错误的标准方法是什么?请帮忙!
在您的 html 表单中,提交元素有两个 "value" 属性但没有 "name" 属性。因此,在 if(isset($_POST['submit'])) 检查中找不到它,并且显示原始表单,就好像什么都没有发布一样。
您的 if(isset($_POST['submit'])) {
条件不会设置为真,因为您没有为提交按钮设置名称标签。
应该是
<input value="Submit" type="submit" name="submit"/>
然后将表单传递的数据重新赋值给另一个变量,它不应该是$POST["title"]
,应该是$_POST["title"]
。
您还应该考虑使用 mysqli_real_escape_string
to prevent SQL injections。
$post_title = mysqli_real_escape_string($connection, $_POST["title"]);
$post_content = mysqli_real_escape_string($connection, $_POST["blog"]);
但是,你还是应该使用 prepared statement rather than using mysqli_*
with the functions of the deprecated mysql_*
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()
条件是它接受空 space ()。要绕过这个,你应该使用 Javascript 或支持这种东西的库。