如何让用户帖子出现在页面上?

时间:2016-09-29 18:16:41

标签: php mysqli

我希望每次有人发布的帖子都会显示在已存在的帖子下方。如果我使用它,它只替换最后一篇文章。 我该怎么办?

<?php
session_start();
$db = mysqli_connect("localhost", "root", "", "store");
if (isset($_POST['button'])) {
    session_start();
    $title= mysqli_real_escape_string($db, $_POST['title']);
    $body= mysqli_real_escape_string($db, $_POST['body']);
    $sql = "INSERT INTO content (title,body) VALUES ('$title', '$body')"; 
    mysqli_query($db, $sql);
    $_SESSION["title"] = $title;
    header("location: home.php");
}
?>

在我要显示的页面上:

<?php
    session_start();
    php echo $_SESSION["title"];
?>

1 个答案:

答案 0 :(得分:0)

您必须在任何条件下将页面重定向到home.php,但您还没有这样做。

如果执行后mysqli_query()返回FALSETRUE,则标题位置将完成,这是不可取的。由于您需要echo SESSION variablehome.php页面。

如果需要,您可以检查此类情况。

if(mysqli_query($db, $sql))
{
// Here you can handle the TRUE loop
$_SESSION["title"] = $title;
header("location: home.php");
}
else
{
// Here you can handle the FALSE loop
}

home.php中,您进行了以下修改,以便显示要打印的会话变量。

  

检查点以在其他页面中打印会话变量

  1. 确保页面顶部有session_start(),因为您需要将超级全局变量放到该页面上。
  2. 如果您需要显示从DB查询的任何内容,您需要确保将DB连接到该页面。
  3. 如果出现任何标题位置错误,请尝试重新启动输出缓冲到您已开始标题位置的页面。您可以在ob_start()
  4. 的帮助下重新启动输出缓冲 只有在重定向问题中遇到ob_start()时,才能使用
  5. header already sent error
  6. ob_start()的用法:

    想到ob_start()说&#34;开始记住通常会输出的所有内容,但还没有做任何事情。&#34;

    示例:

    ob_start();
    echo("Welcome User!"); //would normally get printed to the screen/output to browser
    $output = ob_get_contents();
    ob_end_clean();
    

    ob_start() - 打开输出缓冲

    此功能将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(标头除外)发送输出,而是将输出存储在内部缓冲区中。

    可以使用ob_get_contents()将此内部缓冲区的内容复制到字符串变量中。要输出存储在内部缓冲区中的内容,请使用ob_end_flush()。或者,ob_end_clean()将静默地丢弃缓冲区内容。

    成功时返回 TRUE ,失败时返回 FALSE

      

    关于你所提出的问题,你必须做出一些改变

    您已启动session,这很好,但您已将php附加到echo语句,但看起来不正确。

    <强>替换

    php echo $_SESSION["title"];
    

    <强>与

    echo $_SESSION["title"];
    

    相反所有其他代码都没问题。

    整个页面看起来都像这样。

    <?php
    session_start();
    $db = mysqli_connect("localhost", "root", "", "store");
    if (isset($_POST['button'])) {
        //session_start(); This is not needed at all already you have started the session.
        $title= mysqli_real_escape_string($db, $_POST['title']);
        $body= mysqli_real_escape_string($db, $_POST['body']);
        $sql = "INSERT INTO content (title,body) VALUES ('$title', '$body')"; 
        mysqli_query($db, $sql);
        $_SESSION["title"] = $title;
        header("location: home.php");
    }
    ?>
    

    <强> home.php

    <?php
        session_start();
        echo $_SESSION["title"];
    ?>
    
      

    注意:您的代码处于SQL Injection漏洞,建议您使用预准备语句以及mysqli.*

    Mysqli的预备语句参考: - http://php.net/manual/en/mysqli.prepare.php

    我认为我的解释很清楚,你可以纠正你的错误和代码非常好。

    谢谢&amp;快乐的编码:)