【问题标题】:How would I call a java script function using php if statement with $_SESSION如何使用带有 $_SESSION 的 php if 语句调用 javascript 函数
【发布时间】:2014-02-05 12:16:46
【问题描述】:

您好,我正在创建一个带有登录部分的网站,我正在使用 HTML 和 PHP。我想要做的是我的一个页面有一个 html 按钮,我希望对某些用户禁用它。目前这就是我所拥有的。

这是我用于登录详细信息的部分。

    <?php
    session_start();
    $_SESSION["username"];
    $_SESSION["password"];
    $_SESSION["access"];
    ?>

我知道我当前使用的语句是

    if($_SESSION["access"] == "Administrator"){
    echo $Admin;
    }

我要做的是在 PHP if 语句中调用一个 javascript 函数,到目前为止我得到的是

<?php
    if($_SESSION["access"] == "Consumer")
    {
        echo '<script type="text/javascript">
            Disable();
            </script>';
    }

    if($_SESSION["access"] == "Administrator")
    {
        echo '<script type="text/javascript">
            Enable();
            </script>';
    }
    ?>

我试图调用的 javascript 函数是

<script type="text/javascript">
   function Enable() { 
   SubmitButton.disabled = false;
   } 

  function Disable() { 
   SubmitButton.disabled = true;
   } 
   </script>

我也试过了

if($_SESSION["access"] == "Consumer")
    {
        echo "<script> Disable(); </script>";
    }

我只是想知道我是否输入了错误的内容,或者我是否忘记了输入内容。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript php html login-script


    【解决方案1】:

    查看您的代码,您有几个问题:

    混合使用 PHP 逻辑和纯 HTML(通常)不是一个好主意。

    相反,我建议您将访问检查逻辑完全移动到服务器端,并根据用户的访问权限相应地显示按钮(禁用或启用)。

    例子:

    <?php if($_SESSION['access']): // Only show the button for users with access ?>
        <button type="submit" value="Submit" <?php echo ($_SESSION['access'] != 'Administrator' ? 'disabled' : ''); // Button disabled for everyone but administrators ?> />
    <?php endif; ?>
    

    让我指出显而易见的(正如其他答案所提到的),这不是 100% 防弹的。即使他不是管理员,用户仍然可以通过动态编辑页面的 HTML 来手动提交按钮。这只是一个 UI 修复。提交按钮后,应在服务器端进行真正的检查(例如,用户是否登录,他的计算机上是否有一个 cookie 来标识他是管理员,他是否设置了会话 cookie,等等)。

    在随机的地方调用 JS,例如在标题中可能会产生意想不到的后果。

    在调用任何 JS 函数之前,您最好等待页面完全加载。您可以通过 jQuery 轻松做到这一点,但请确保您在标题 like so 之前包含 jQuery 库。

    之后,您可以在页面加载后调用任何 JS,方法是将它们放在以下块中:

    $(function(){
       // Place your JS calls here, e.g. call to Enable()
    });
    

    PHP 中的字符串连接是用点. 完成的,字符串可以是多行的

    您使用的这段代码完全是错误

    echo '<script type="text/javascript">'
    , 'Enable();'
    , '</script>';
    

    你应该使用类似的东西:

    echo '<script type="text/javascript">'
         .'Enable();'
         . '</script>';
    

    或更好:

    echo '<script type="text/javascript">
             Enable();
          </script>';
    

    【讨论】:

    • 很好的答案感谢您清理了几个区域,但这仍然无法正常工作我已经更改了我的答案中代码的主要部分,上面我还需要做什么才能使其正常工作我将在以后重点关注网站的一侧。 @Wordpress 开发人员
    【解决方案2】:

    PHP 不使用, 符号加入。使用.

    但除此之外它应该可以工作,除了你应该在使用它之前定义SubmitButton

    <?php
        echo "<script type='text/javascript'>";
            // if the id of your element is "submitButton"
            echo "var submitButton = document.getElementById('submitButton');";
            echo " function disable(){ submitButton.disabled=true; }";
        echo "</script>";
    ?>
    

    之后你就可以像以前一样使用它了..

    <script type='text/javascript'>
        disable();
    </script>
    

    请注意,仅使用 JavaScript 拒绝访问您网页上的某些元素/功能并不是一个好习惯 - JavaScript 在用户计算机上本地执行,因此用户可以对其进行修改以获得优势。

    【讨论】:

    • 我用 .而不是 , 它打破了页面我得到了一个白屏所以我不知道我是否做错了什么我现在的代码是if($_SESSION["access"] == "Consumer") { echo '&lt;script type="text/javascript"&gt;' . "Disable()"; . "&lt;/script&gt;"; } if($_SESSION["access"] == "Administrator") { echo '&lt;script type="text/javascript"&gt;' . "Enable()"; . '&lt;/script&gt;'; } ?&gt;
    • 连接通常使用 PHP 中的 . 完成,但 echo 不同 - 它是一种语言构造而不是函数 - 并且将接受逗号分隔的列表。 stackoverflow.com/a/8109326/1913784
    • 很难说这里到底是什么问题。你有任何错误吗?浏览器中的控制台日志说明了什么?
    • 它已经停止显示我的白屏,因为我注意到下面还有另一个?> 所以这是我在控制台中的错误,它显示 Uncaught ReferenceError: Enable is not defined
    • 那么你需要定义 Enable() 函数.. 提供的示例只涵盖了禁用函数..
    【解决方案3】:

    好吧,问题可能是您试图在 HTML 准备好(或最终呈现)之前调用 javascript 函数,因此浏览器在执行该函数时找不到按钮。

    您可以将 javascript 代码放在页面末尾,或使用 jQuery 并执行以下操作来解决此问题:

    $(document).ready(function() {
    <%php if ($_SESSION['access'] == 'xxxxx') {%>
        Enable();
    <%php } else { %>
        Disable();
    <%php } %>
    });
    

    无论如何,始终检查服务器端的用户权限,因为有人可以使用 Firebug 或其他方式启用按钮...

    【讨论】:

    • 如何将其添加到 $_SESSION if 语句中,我将调用 Enable() 函数还是在此代码的 .ready 部分之后调用 function()?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多