将JavaScript的值传递给PHP变量。
在这个问题中,问题出现的原因是PHP是在服务器端运行的,而JavaScript是在用户请求页面的浏览器中运行的。当JavaScript被执行时,根本无法访问服务器端的PHP。简而言之,发生的情况如下:
- 您在您的电脑上的浏览器中点击一个链接
- 浏览器创建一个HTTP请求并将其发送到互联网上的服务器
- 服务器检查是否能够处理该请求
- 如果请求是针对一个PHP页面的,那么PHP解释器会启动
- PHP解释器将运行您请求的页面中的所有PHP代码
- PHP解释器不会运行任何JS代码,因为它对此一无所知
- 服务器将由解释器组装好的页面发送回您的浏览器
- 您的浏览器将渲染页面并显示给您
- JavaScript在您的计算机上执行
在您的情况下,PHP将JS代码写入页面中,以便在页面在浏览器中渲染时执行。但是在此时,您JS代码片段中的PHP部分已经不存在了。它已经在服务器上执行过了。它创建了一个包含SQL查询字符串的变量$result
。但是您没有使用它,所以当页面被发送回您的浏览器时,它就消失了。当页面在浏览器中渲染时,查看源代码,您会发现在您放置PHP代码的位置上什么都没有。
想要实现您要做的事情,唯一的方法是:
- 重定向到一个PHP脚本,或者
- 使用AJAX调用一个PHP脚本
并将要插入到数据库中的值传递给它们。
将javascript的值传递给PHP变量是一个常见的需求,但是在给出的示例中,存在一些问题。首先,在PHP代码中,尝试将一个JavaScript变量直接赋值给PHP变量是不可行的。其次,使用`document.write`将JavaScript值输出到PHP变量也是错误的。
解决这个问题的方法是通过使用AJAX将JavaScript值发送到服务器,并在服务器端使用PHP来接收该值。以下是解决方法的示例代码:
JavaScript代码:
var jvalue = 'this is javascript value'; // 使用AJAX将JavaScript值发送到服务器 var xhr = new XMLHttpRequest(); xhr.open("POST", "server.php", true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send("jvalue=" + jvalue);
PHP代码(server.php):
通过将JavaScript值发送到服务器,然后在服务器端使用PHP接收和处理该值,我们可以实现将JavaScript值传递给PHP变量的目的。
问题的原因是:混淆了客户端代码和服务器端代码。当点击按钮时,需要将变量发送到服务器,在服务器上执行PHP代码。可以通过提交页面或使用ajax调用仅提交数据来实现。
解决方法是:使用表单提交页面或使用ajax调用来将JavaScript的值传递给PHP变量。下面是两种解决方法的示例代码。
1. 使用表单提交页面:
HTML代码:
JavaScript代码:
document.getElementById("yourVariable").value = yourJavaScriptValue;
PHP代码(your-php-file.php):
$yourVariable = $_POST['yourVariable']; // 使用$yourVariable进行后续操作
2. 使用ajax调用:
JavaScript代码:
var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { // 可以在这里处理服务器返回的响应 } }; xmlhttp.open("GET", "your-php-file.php?yourVariable=" + yourJavaScriptValue, true); xmlhttp.send();
PHP代码(your-php-file.php):
$yourVariable = $_GET['yourVariable']; // 使用$yourVariable进行后续操作
以上是将JavaScript值传递给PHP变量的两种常见解决方法。无论是通过表单提交页面还是使用ajax调用,都可以在服务器端使用传递的值进行后续操作。