【问题标题】:Inject PHP into Value attribute via Javascript通过 Javascript 将 PHP 注入到 Value 属性中
【发布时间】:2012-11-21 18:15:50
【问题描述】:

我正在尝试使用 javascript 将存储在 PHP $_SESSION 变量中的值注入到输入标记的“值”属性中。我能够在“value”属性中成功注入 PHP 代码,但存储的值不会出现在文本框中。我的代码如下:

HTML:

<input type="text" name="fname" value="" />

Javascript:

fields.eq(n).attr('value', "<?php echo $_SESSION['fname'] ; ?>");

问题在于,这通常会将$_SESSION['fname'] 变量的值放在输入框中。但不是的情况。当单击按钮将 PHP 代码注入 value 属性时,HTML 如下所示:

<input type="text" name="fname" value="<?php echo $_SESSION['fname'] ; ?>" />

这就是我希望它看起来的样子,但在文本框中,它实际上显示的是 PHP 代码,而不是存储在 $_SESSION['fname'] 中的值。

我有什么遗漏吗?这不应该工作吗?任何帮助表示赞赏!

【问题讨论】:

  • 我怀疑它不是 php 文件,因为如果它的 php 文件比它会显示存储在会话 fname 中的内容
  • 就是这样,它是一个 PHP 文件。我和你刚才说的完全一样,但它不起作用。为什么不的任何其他想法?谢谢
  • 没有办法......它会显示你所说的
  • 相信我,我已经对所有内容进行了三次检查。我知道的一件事是这是 100% 的 PHP 文件。我在这个页面上有数百行 PHP 代码,所以没有弄错。我以前从未尝试过注入这样的值,我猜网络浏览器没有正确读取 HTML。
  • 尝试先将$_SESSION['fname']存入一个变量,然后再回显该变量。

标签: php javascript jquery html code-injection


【解决方案1】:

PHP是服务器端脚本,意思是:PHP会在服务器上执行。

JavaScript是客户端脚本,意思是:JavaScript会被浏览器执行。

通常默认情况下,.php 文件将由 服务器上的 PHP 引擎处理,从而执行 PHP 脚本。结果将发送给客户端。这就是为什么当您有一个.php 文件时,&lt;?php?&gt; 之间的内容将由 PHP 引擎处理,您将不会看到客户端中的实际 PHP 脚本。有时您可以配置 HTTP 服务器,以便 PHP 引擎也处理 .html 文件。

对于其他文件,HTTP服务器(例如Apache)会直接将整个文件发送给客户端,不经过PHP引擎的处理,因此任何PHP脚本不会被处理并会直接去客户端。

现在你的问题是你试图将一些 PHP 放入一个 JavaScript 文件 (.js),并希望它会被执行,但实际上它不会。因此,当您尝试使用显示的 JavaScript 设置输入元素的值时,将设置“文本”&lt;?php echo $_SESSION['fname'] ; ?&gt;

如果您将 JavaScript 放入您的 .php 文件,或者将您的 JavaScript 文件 (*.js) 重命名为 *.php,您将获得所需的值。

或者您可以在您的页面中添加一个额外的 JavaScript,使用您的 PHP 设置一个“全局”变量,然后在您的 .js 文件中使用该“全局变量”。
window.myFname = &lt;?php echo $_SESSION['fname'] ; ?&gt;;


根据您想要做什么,您可能需要选择如何设计。如果您只是想设置值,您可以只执行我提供的两个建议之一。如果您想动态地获取值(即在需要时获取值),您会像其他人建议的那样使用 AJAX。

【讨论】:

    【解决方案2】:

    PHP 代码在请求时被解释,因此就浏览器/javascript 而言,您必须将“注入”的代码作为简单字符串处理。

    你可以这样做,使用一个返回会话变量值的回调:

    $('#someButton').click(function() {
         $.ajax({
               type: 'POST',
               url: <callbackUrl>,
               data: <params if any>
               }).done(function( msg ) {
                    fields.eq(n).attr('value', msg);
                    });
    });
    

    【讨论】:

      【解决方案3】:

      假设您已包含 jQuery 库。

      getUser.php

      <?php echo $_SESSION['fname']; ?>
      

      对于您的 JavaScript

      $(document).ready(function(){
          $.get("getUser.php", function(data) {
            fields.eq(n).attr('value', data);
          });
      });
      

      供参考,http://api.jquery.com/jQuery.get/

      【讨论】:

      • 我现在要试试这个。会让你知道它是否有效。谢谢
      猜你喜欢
      • 2014-10-03
      • 2013-11-14
      • 1970-01-01
      • 2011-10-31
      • 2020-10-22
      • 2022-06-22
      • 2019-09-01
      • 2015-02-03
      • 1970-01-01
      相关资源
      最近更新 更多