【问题标题】:Conditional emebed html between PHP code blocks + setting cookies在 PHP 代码块之间条件嵌入 html + 设置 cookie
【发布时间】:2015-03-29 07:53:32
【问题描述】:

几周前我开始学习 PHP,我对 PHP 代码块和设置 cookie 之间的条件嵌入 HTML 有点困惑。我想做的是一个简单的代码,它检查你的姓名、密码和电子邮件,设置 cookie(如果它们是有效的);当您已经登录时,您应该会看到“注销”按钮。所以,我的代码:

    <?php
    if (($_POST['name'] == 'admin')  and ($_POST['pass'] == 'admin') and ($_POST['mail'] == 'admin@gmail.com')) {
    setcookie("Test","Value"); 
    echo "Success!!! <br/>";
    }


    if ($_POST['logout']) {
    setcookie("Test", "", time() - 3600);
    echo "Goodbye!";

    }

    ?>

    <?php if(isset($_COOKIE['Test'])) :
    ?>
       <input type="submit" value="logout"/><br/>

    <?php endif ?>

    <?php if(!isset($_COOKIE['Test'])) :
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <form action="" method="POST">
    <input type="text" name="name"/><br/>
    <input type="text" name="pass"/><br/>
    <input type="text" name="mail"/><br/>
    <input type="submit" value="go"/><br/>
    <?php endif ?>

但是,我不知道如何使它正常工作:当我输入正确的用户名、密码和邮件时,我没有看到“注销”按钮,还有一个表单,我需要再次输入用户名终于看到“注销”了。第二个问题,当我按下“注销”时,什么也没有发生。我想我无法设置 cookie,因为标头已经发送,但我不知道如何重写它。

【问题讨论】:

  • 尽管有一些undefined index 错误,但您的代码在我的本地服务器上运行良好。我在正确的凭据上成功获得了logout 按钮。该按钮不起作用。看看吧。
  • 您似乎假设setcookie 会影响当前 请求的$_COOKIES 集合,而不仅仅是后续请求?

标签: php cookies


【解决方案1】:

根据评论中的@RowlandShaw,setcookie() 只会影响未来的请求,而不是当前的请求。

这是您更正后的代码:

<?php
if($_POST)
{
    if(isset($_POST['name']) && isset($_POST['pass']) && isset($_POST['mail']))
    {
        if (($_POST['name'] == 'admin')  and ($_POST['pass'] == 'admin') and ($_POST['mail'] == 'admin@gmail.com')) {
            setcookie("Test","Value"); 
            echo "Success!!! <br/>";
            echo '<form action="" method="POST">'.
                     '<input type="submit" value="logout" name="logout"/><br/>'.
                 '</form>';
        }
    }

    if (isset($_POST['logout'])) {
        setcookie("Test", "", time() - 3600);
        echo "Goodbye!";
        echo '<br/>';
        echo '<a href="'.$_SERVER['PHP_SELF'].'">Login back</a>';

    }
}
else
{
?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <form action="" method="POST">
    <input type="text" name="name"/><br/>
    <input type="text" name="pass"/><br/>
    <input type="text" name="mail"/><br/>
    <input type="submit" value="go"/><br/>
<?php } ?>

您必须创建指向同一页面的链接,以便将 cookie 修改考虑在内。此外,您没有在注销按钮上设置名称,也没有通过添加使$_POST['logout'] 从未设置的&lt;form&gt; 标记(默认为GET)来指定注销操作是POST 请求.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2014-12-16
    • 2022-11-03
    • 2017-02-09
    • 2017-07-23
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多