【问题标题】:checking isset at bottom of page not working检查页面底部的 isset 不起作用
【发布时间】:2017-02-19 06:23:36
【问题描述】:

我有一个两难境地(我还没有找到解决办法)。出于某种原因,PHP 不想检查我的文档中 <body> 标记底部是否有 $_POST["login"]

如果将它放在文档的最顶部,甚至是<body> 标记的顶部,它就会起作用。但是,如果我把它放在文档的顶部 /<body> 标签,输出 JavaScript 将不会执行!

例如,这是文档(PHP 不会执行):

<form>
    <span id="example-element">Displaying.</span>
    <input type="text" name="example">
    <button type="submit" name="login">Login</button>
</form>
<?php
    if(isset($_POST["login"])){
        echo "
        <script>
            document.getElementById('example-element').style.display = 'block';
        </script>"
    }
?>

但是,如果我要做这样的事情(PHP 将执行):

<?php
    if(isset($_POST["login"])){
        echo "
        <script>
            document.getElementById('example-element').style.display = 'block';
        </script>"
    }
?>
<form>
    <span id="example-element">Displaying.</span>
    <input type="text" name="example">
    <button type="submit" name="login">Login</button>
</form>

但由于 JavaScript 的编译方式,它会抛出一个错误,说明它无法在 null 元素上设置样式。

我不知道如何解决这个难题,因此感谢所有帮助!

干杯。

【问题讨论】:

  • &lt;span id="example-element" style="&lt;?php if isset($_POST['login']) echo 'display: block'; ?&gt;"&gt;Displaying.&lt;/span&gt; - 不需要使用 Javascript 设置显示样式,PHP 可以处理。这里的一个假设是$_POST["login"] 实际上包含一些东西。但是,如果确实在脚本开始时设置了变量,并且在执行期间未进行调整,则仍应在脚本结束时设置它。
  • 我同意 Dhruv Saxena 的观点,不需要 js。 &lt;?php if(isset($_POST['login'])){echo "&lt;span id=\"example-element\"&gt;Displaying.&lt;/span&gt;";}?&gt;
  • 另外,如果你想在 PHP 中显示和隐藏,为什么不从 PHP 中显示和隐藏呢? &lt;? if ..... {?&gt;&lt;span id="example-element"&gt;Displaying.&lt;/span&gt;&lt;? } ?&gt;
  • 实际上,在我的情况下 JS 非常必要。我刚刚把 PHP 缩小了很多,我只是向你展示了必要的东西
  • 好吧,如果需要的唯一检查是isset($_POST['login']),那么设置相关元素的display 属性不需要JS。

标签: javascript php html


【解决方案1】:
<form>
    <span id="example-element">Displaying.</span>
    <input type="text" name="example">
    <button type="submit" name="login">Login</button>
</form>

<?php
    if(isset($_GET["login"])){
        echo "<script>
        document.addEventListener('DOMContentLoaded', function(){
             document.getElementById('example-element').style.display = 'block';
        }, false);           
        </script>";
    }
?>

检查这是否有效.....我在DOMContentLoaded 事件中添加了显示代码,并将$_POST 变量更改为$_GET。在我的本地系统中运行良好。

【讨论】:

  • 谢谢!完美运行:)
【解决方案2】:

你可以这样做

<style>
.someClass {
    display: block;
}
</style>

<?php
    if(isset($_POST["login"])){
        $hasClass = true;
    }
?>

<form method="post">
    <span id="example-element" class=<?php if(isset($hasClass)==true) echo "someClass"; ?> >Displaying.</span>
    <input type="text" name="example">
    <button type="submit" name="login">Login</button>
</form>

您的代码的另一个问题是您没有设置表单的方法,默认情况下它是GET,在php中您正在寻找POST请求。 当您不确定方法时,您可以通过在 php 中使用 $_REQUEST 来解决它。

【讨论】:

    【解决方案3】:

    实际上 php 在 javascript 之前执行。

    这样改

        <script>
            var isSubmit = "<?php isset($_POST['login'])?true:false; ?>";
            if(isSubmit){
            document.getElementById('example-element').style.display = 'block';
            }
        </script>"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 2021-12-05
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      相关资源
      最近更新 更多