如何将JavaScript变量用作PHP变量?

24

我想把JavaScript变量包含到PHP代码中作为PHP变量,但我做不到。当一个按钮被点击时,下面的函数被调用:

<script type="text/javascript">
    function addTraining(leve, name, date)
    {
        var level_var = document.getElementById(leve);
        var training_name_var = document.getElementById(name);
        var training_date_var = document.getElementById(date);

        <?php
            $result = "INSERT INTO training(level, school_name, training_date) VALUES('level_var', 'training_name_var', 'training_date_var')" or die("Query not possible.");
        ?>

</script>

这是可能的吗?


1
阅读有关客户端与服务器端的内容:https://dev59.com/hnI-5IYBdhLWcg3wCz7y - Felix Kling
<script> var res = "success"; </script> <?php echo "<script>document.writeln(res);</script>"; ?> - mamal
7个回答

43

PHP在服务器端运行,JavaScript在请求页面的用户浏览器中客户端运行。当JavaScript执行时,没有任何访问服务器上的PHP的可能性。请阅读这篇详细介绍客户端与服务器端编码的区别的文章。

简而言之,发生的情况如下:

  • 您在桌子下的计算机上单击链接
  • 浏览器创建HTTP请求并将其发送到Internet上的服务器
  • 服务器检查它是否能处理请求
  • 如果请求是针对PHP页面,则启动PHP解释器
  • PHP解释器将运行您请求的页面中的所有PHP代码
  • PHP解释器将不会运行任何JS代码,因为它对此一无所知
  • 服务器将由解释器组装的页面发送回您的浏览器
  • 您的浏览器将呈现页面并向您展示它
  • JavaScript在您的计算机上执行

在您的情况下,PHP将JS代码写入页面,以便在页面在浏览器中呈现时可以执行它。但到那时,您JS片段中的PHP部分已不存在。它已在服务器上执行。它创建了一个包含SQL查询字符串的变量$result。您没有使用它,因此当页面发送回您的浏览器时,它就不存在了。在渲染页面时查看源代码。您会发现放置PHP代码的位置上没有任何内容。

要实现您想要做的唯一方法是:

  • 重定向到一个PHP脚本或者
  • 使用值调用一个PHP脚本

以将您想要插入到数据库中的值传递给它们。


28
<script type="text/javascript">
var jvalue = 'this is javascript value';

<?php $abc = "<script>document.write(jvalue)</script>"?>   
</script>
<?php echo  'php_'.$abc;?>

15
这种行为在很多方面都是错误的,而且具有欺骗性。 - CSᵠ
4
这甚至不是一个答案。 - argentum47
4
它运行良好,那为什么不是一个答案?@argentum47 - Black Mamba
嘿,我需要类似的东西,但问题是jvalue变量的值通过一个promise传递,而且在$abc中我得到了未定义。有人可以帮帮我吗? - Climb Tree
这是一个无意义的答案。PHP 运行在服务器上,如何获取 document.write 的输出? - peeebeee
document.write 返回未定义。 - Ravish Kumar Sharma

5

您似乎混淆了客户端和服务器端代码。当单击按钮时,您需要将变量发送(post、get)到服务器,然后在服务器上执行php。您可以提交页面或使用ajax调用仅提交数据。

-don


4

PHP运行在服务器上。它通常会输出一些文本。然后,客户端对其进行解析。

在客户端解析期间以及之后,JavaScript会运行。此时,PHP脚本无法再做任何事情了。

如果您想将任何内容返回给PHP,则需要进行新的HTTP请求并在其中包含数据(可以通过查询字符串(GET数据)或消息正文(POST数据)完成)。

您可以通过以下方式实现:

  • 设置 location(仅限 GET)
  • 提交表单(使用 FormElement.submit() 方法)
  • 使用 XMLHttpRequest 对象(通常称为 Ajax 技术)。各种库都可以帮助您处理重复性工作,例如 YUIjQuery

无论您选择哪个选项,PHP基本上都是相同的。从 $_GET$_POST 中读取,运行数据库代码,然后向客户端返回一些数据。


2

我前几个星期也曾遇到了和你一样的问题;但我想出了一个很棒的解决方案,用于在PHP和JavaScript之间交换变量。这对我很有用:

  1. 在HTML页面上创建一个隐藏的表单

  2. 在该隐藏表单中创建一个文本框或文本区域

  3. 在所有代码都写完后,在该文本框中存储变量的最终值

  4. 在PHP中使用 $_REQUEST['textbox name'] 行访问您的JavaScript变量的值。

希望这个技巧对您有用。


请问您能否提供一个可行的示例? - Black Mamba
请提供示例代码。 - Mahmudul Hasan Sohag

1
你可以像这样获取所有的值:

$abc = "<script>document.getElementByID('yourid').value</script>";

我使用了你的方法,它起作用了。但我不知道这是否是推荐的方式。 - user1919
1
它对我不起作用... 请问还有其他方法吗...? :) - Maryadi Poipo

0
你可以做你想做的事情,但不能那样做。你需要做的是从JavaScript中发出一个 AJAX请求返回给服务器,然后由一个单独的PHP脚本来进行数据库操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接