我正在尝试创建一个简单的博客条目表单,用户输入标题,博客条目并提交。然后,表单应插入“博客条目”。使用insert查询进入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>
以下是提交表格后的表格的屏幕截图。
以下是名为blog
的MYSQL数据库的屏幕截图,以及名为entries
的表格:
有人知道我做错了什么。我是PHP的新手,当我没有错误时,我不知道如何调试问题!
更新1。 解决方案有效。谢谢。但是我收到以下错误:
注意:未定义的变量:第30行的C:\ XAMPP \ htdocs \ blogwebsite \ blog.php中的错误
我知道,因为我没有初始化$ error []数组。但摆脱这个错误的标准方法是什么?请帮忙!
答案 0 :(得分: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_*
使用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()
条件的缺点是它接受空格()。要绕过这个,你应该使用支持这种东西的Javascript或库。
答案 1 :(得分:0)
在html表单中,submit元素有两个“value”属性但没有“name”属性。因此,在if(isset($ _ POST ['submit']))检查中找不到它,并且原始表单显示为没有发布任何内容。