我如何使用JavaScriptvariables作为PHPvariables?
我试图将PHPvariables包含到PHP代码中,但是我遇到了问题。 当一个button被点击时,下面的函数被调用:
<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>
可能吗?
PHP运行在服务器端。 JavaScript在请求页面的用户的浏览器中运行在客户端。 在执行JavaScript时,无论如何都不能访问服务器上的PHP。 请阅读这篇文章,详细介绍客户端与服务器端编码 。
简而言之就是:
- 您在桌面下的计算机上点击浏览器中的链接
- 浏览器创build一个HTTP请求并将其发送到Internet上的服务器
- 服务器检查他是否可以处理请求
- 如果请求是针对PHP页面的,则启动PHP解释器
- PHP解释器将在您请求的页面中运行所有PHP代码
- PHP解释器不会运行任何JS代码,因为它没有任何线索
- 服务器将把解释器汇集的页面发回给你的浏览器
- 您的浏览器将呈现该页面并显示给您
- JavaScript在您的计算机上执行
在你的情况下,PHP会将JS代码写入页面,所以当页面在浏览器中被渲染时,它可以被执行。 到那个时候,你的JS片段中的PHP部分不再存在。 它已经在服务器上执行了。 它创build了一个包含SQL查询string的variables$result
。 你没有使用它,所以当页面被发送回你的浏览器,它已经消失了。 当页面在浏览器中呈现时,请查看源代码。 你会发现在你放置PHP代码的位置没有任何东西。
做你想要做的唯一方法是:
- 做一个redirect到PHP脚本或
- 对PHP脚本进行AJAX调用
用你想要插入数据库的值。
<script type="text/javascript"> var jvalue = 'this is javascript value'; <?php $abc = "<script>document.write(jvalue)</script>"?> </script> <?php echo 'php_'.$abc;?>
您似乎混淆了客户端和服务器端代码。 当button被点击时,你需要发送(发布,获取)variables到php可以执行的服务器。 您可以提交页面,也可以使用ajax调用来提交数据。 -don
PHP在服务器上运行。 它输出一些文本(通常)。 然后由客户端parsing。
在客户端parsing期间和之后,JavaScript运行。 在这个阶段,PHP脚本做任何事情都为时已晚。
如果你想要返回任何东西,你需要创build一个新的HTTP请求,并将数据包含在查询string(GET数据)或消息正文(POST数据)中。
你可以这样做:
- 设置位置(仅限GET)
- 提交表单(使用
FormElement.submit()
方法) - 使用XMLHttpRequest对象(通常称为Ajax的技术)。 各种各样的库在这里为你做一些繁重的工作,比如YUI或者jQuery 。
你select哪个选项,PHP本质上是一样的。 读取$_GET
或$_POST
,运行你的数据库代码,然后返回一些数据到客户端。
几个星期前,我和你们有同样的问题。 但是我发明了一个在PHP和JavaScript之间交换variables的精彩解决scheme。 它对我很好:
-
在HTML页面上创build一个隐藏的表单
-
以隐藏的forms创build文本框或文本区域
-
将所有代码写入脚本之后,将variables的最终值存储在该文本框中
-
在你的PHP中使用$ _REQUEST ['textbox name']行来访问你的JavaScriptvariables的值。
我希望这个技巧适合你。
你可以采取这样的所有值:
$abc = "<script>document.getElementByID('yourid').value</script>";
你可以做你想做的,但不是那样的。 你需要做的是从JavaScript向AJAX请求返回到一个单独的PHP脚本可以执行数据库操作的服务器。