php - 简单的 PHP 'blog entry' 表单没有提交到 MYSQL 数据库?

标签 php html mysql forms blogs

<分区>

我正在尝试创建一个简单的博客条目表单,用户可以在其中输入标题、博客条目并提交。然后,该表单应使用插入查询将“博客条目”插入到 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 的新手,我不知道如何在没有错误的情况下调试问题!

更新 1. 该解决方案奏效了。谢谢。但是我收到以下错误:

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

我知道这是因为我还没有初始化 $error[] 数组。但是摆脱这个错误的标准方法是什么?请帮忙!

最佳答案

您的 if(isset($_POST['submit'])) { 条件不会设置为真,因为您没有为提交按钮设置名称标签。

应该是

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

然后将表单传递的数据重新分配给另一个变量,它不应该是 $POST["title"],它应该是 $_POST["标题"].

您还应该考虑使用 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 或库。

关于php - 简单的 PHP 'blog entry' 表单没有提交到 MYSQL 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32448402/

相关文章:

php - 使用 OpenID 而不要求用户知道他们的 OpenID url?

html - 如果你只能控制 body 的内容,你怎么能强制 IE 在标准模式下呈现?

mysql - SQL 查询未检索所有字段

php - php 中的 if-else 函数不起作用

javascript - 从验证重新加载页面后,带有 Select2 的 Laravel 输入值不会持续存在

php - Laravel 5.7 电子邮件验证路由

html - Bootstrap 3 中的谷歌地图全高

html - 如何通过 HTTPS 安全地提交表单?

php - 在 mysql 数据库中存储帖子 + 评论

php - 在 zf2 左连接中应用多个条件