如果PHP if语句为true,则显示div

如果PHP if语句为true,则显示div,php,html,if-statement,header,Php,Html,If Statement,Header,我在一个名为login.PHP的文件中有以下PHP脚本 <?php $ref = $_SERVER['HTTP_REFERER']; if ($ref == 'http://example.com/dir/invalid.php' || $ref == 'http://www.example.com /dir/invalid.php') { echo ' <div id="invalid"> TESTTESTTESTTESTTESTTESTTESTT

我在一个名为login.PHP的文件中有以下PHP脚本

<?php
$ref = $_SERVER['HTTP_REFERER'];
if ($ref == 'http://example.com/dir/invalid.php' || $ref == 'http://www.example.com /dir/invalid.php') {
echo '
     <div id="invalid">
         TESTTESTTESTTESTTESTTESTTESTTEST
     </div>
    ';
}
?>
if (isset($_SESSION['invalid_login']) && $_SESSION['invalid_login'])
{
    $_SESSION['invalid_login'] = false;

    // do whatever
}

我特意转到了invalid.php页面(它使用header()重定向到login.php),但是这个div没有显示出来。它是否与referer不是真正无效的.php有关,或者脚本是否存在问题


谢谢

我认为HTTP\u REFERER不是你想象的那样。也就是说,它是一个页面,用户从该页面跟踪到当前页面的链接。但是,这是非常不可靠的,因为我们依赖用户的浏览器来正确报告此值

我会建议你选择我认为你需要的选项,除了我能想到的唯一一个可能没有意义。。。(正在检查url是否与不是当前脚本的url匹配)。。。所以我不明白你想做什么


正如承诺的那样,有几种方法可以实现您的目标:

首先,我根本不喜欢这个解决方案,真的认为它很难看,但它是最接近你想做的事情的一个。

无效的.php

require 'login.php'; // we include the file instead of referring to it
login.php

<?php
$ref = $_SERVER['HTTP_REFERER'];
if ($ref == 'http://example.com/dir/invalid.php' || $ref == 'http://www.example.com /dir/invalid.php') {
echo '
     <div id="invalid">
         TESTTESTTESTTESTTESTTESTTESTTEST
     </div>
    ';
}
?>
if ($_SERVER['SCRIPT_NAME'] == 'invalid.php')
{
    // do whatever
}
if (isset($_SESSION['invalid_login']) && $_SESSION['invalid_login'])
{
    $_SESSION['invalid_login'] = false;

    // do whatever
}
您所做的与我为用户所做的主要区别在于,这里的url栏将显示您在invalid.php,而不是其他地方。这也意味着刷新不会使消息消失

我认为更好的解决办法是:

在用户登录的脚本中(检查数据库和所有内容):

在login.php中

<?php
$ref = $_SERVER['HTTP_REFERER'];
if ($ref == 'http://example.com/dir/invalid.php' || $ref == 'http://www.example.com /dir/invalid.php') {
echo '
     <div id="invalid">
         TESTTESTTESTTESTTESTTESTTESTTEST
     </div>
    ';
}
?>
if (isset($_SESSION['invalid_login']) && $_SESSION['invalid_login'])
{
    $_SESSION['invalid_login'] = false;

    // do whatever
}

当然,这应该通过适当的会话工具来完成,比如在这两个文件中启动会话。不使用会话变量,您可以包含文件并使用普通变量,或者通过头请求发送GET变量,但这两种解决方案都有一个问题:刷新不会使消息消失。但是,如果您要将代码从上面两个文件中的顶部文件移动到
login.php
(如果还没有,我不知道它实际上是什么文件…),您可以再次使用普通变量而不是会话变量,并有一个解决方案,其中刷新会使它消失。在这种情况下,您可能会认为您的文件中充斥着业务逻辑和表示,但有解决方案(例如将其保存在单独的文件中,并将其包含到
login.php
,将html移动到另一个文件中,并将该文件包含到
login.php
或两者中。

您的脚本看起来不错。请尝试echo$\u服务器['HTTP\u REFERER']然后看看它得到了什么值。你应该尝试一些基本的调试。为什么不输出
$ref
的值来看看它是什么?好吧,如果你使用
header()
,你将永远看不到任何东西,因为它只是在输出div之前重定向。但是我不确定我是否100%理解这个问题,我正在尝试获取错误(例如“错误的密码/用户名”)显示在与登录表单相同的页面上,而不是单独的页面上。我认为这样做可以奏效,但不幸的是不行。我知道我可以用javascript实现这一点,如果无法用PHPIt实现这一点,我计划这么做。好吧,你只是走错了方向(事实上,我最初的回答是基于我没有足够仔细地阅读内容,我会在一秒钟内稍微修改它)。事实上,在使用标题重定向后,你所在页面的痕迹将消失。我还将在我的回答中添加一些方法,因为我没有足够的空间来执行此操作。