如何将 JavaScript 变量传递给 PHP?

我想使用表单中的隐藏输入将 JavaScript 变量传递给 PHP。

但是我不能把 $_POST['hidden1']的值转换成 $salarieid,有什么问题吗?

密码如下:

<script type="text/javascript">
// View what the user has chosen
function func_load3(name) {
var oForm = document.forms["myform"];
var oSelectBox = oForm.select3;
var iChoice = oSelectBox.selectedIndex;
//alert("You have chosen: " + oSelectBox.options[iChoice].text);
//document.write(oSelectBox.options[iChoice].text);
var sa = oSelectBox.options[iChoice].text;
document.getElementById("hidden1").value = sa;
}
</script>


<form name="myform" action="<?php echo $_SERVER['$PHP_SELF']; ?>" method="POST">
<input type="hidden" name="hidden1" id="hidden1" />
</form>


<?php
$salarieid = $_POST['hidden1'];
$query = "select * from salarie where salarieid = ".$salarieid;
echo $query;
$result = mysql_query($query);
?>


<table>
Code for displaying the query result.
</table>
759666 次浏览

PHP 在页面发送给用户之前在服务器上运行,一旦接收到页面,JavaScript 就在用户的计算机上运行,因此 PHP 脚本已经执行。

如果要向 PHP 脚本传递 JavaScript 值,则必须执行 XMLHttpRequest 以将数据发送回服务器。

这里有一个前面提到的问题,您可以按照这个问题了解更多信息: Ajax 教程

现在,如果您只是需要向服务器传递一个表单值,那么您也可以只做一个普通的表单发送,它做同样的事情,但是必须刷新整个页面。

<?php
if(isset($_POST))
{
print_r($_POST);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" name="data" value="1" />
<input type="submit" value="Submit" />
</form>

点击提交将提交页面,并打印出提交的数据。

您不能将变量值从当前页面的 JavaScript 代码传递给当前页面的 PHP 代码... PHP 代码在服务器端运行,并且它不知道客户端发生了什么。

您需要使用另一种机制从 HTML 表单向 PHP 代码传递变量,例如使用 GET 或 POST 方法提交表单。

<DOCTYPE html>
<html>
<head>
<title>My Test Form</title>
</head>


<body>
<form method="POST">
<p>Please, choose the salary id to proceed result:</p>
<p>
<label for="salarieids">SalarieID:</label>
<?php
$query = "SELECT * FROM salarie";
$result = mysql_query($query);
if ($result) :
?>
<select id="salarieids" name="salarieid">
<?php
while ($row = mysql_fetch_assoc($result)) {
echo '<option value="', $row['salaried'], '">', $row['salaried'], '</option>'; //between <option></option> tags you can output something more human-friendly (like $row['name'], if table "salaried" have one)
}
?>
</select>
<?php endif ?>
</p>
<p>
<input type="submit" value="Sumbit my choice"/>
</p>
</form>


<?php if isset($_POST['salaried']) : ?>
<?php
$query = "SELECT * FROM salarie WHERE salarieid = " . $_POST['salarieid'];
$result = mysql_query($query);
if ($result) :
?>
<table>
<?php
while ($row = mysql_fetch_assoc($result)) {
echo '<tr>';
echo '<td>', $row['salaried'], '</td><td>', $row['bla-bla-bla'], '</td>' ...; // and others
echo '</tr>';
}
?>
</table>
<?php endif?>
<?php endif ?>
</body>
</html>

是否调用了设置隐藏窗体值的函数?它不在这个例子中。修改将表单发送回服务器的隐藏值 之前应该没有问题。

我自己也想弄明白然后意识到问题在于这是一种反向的看待问题的方式。在大多数情况下,与其尝试将东西从 JavaScript 传递到 php,也许最好是反过来。PHP 代码在服务器上执行并创建 html 代码(可能还有 Java 脚本)。然后浏览器加载页面并执行 html 和 java 脚本。

处理这种情况的明智方法似乎是使用 PHP 创建所需的 JavaScript 和 html,然后使用页面中的 JavaScript 来完成 PHP 无法完成的任务。这似乎可以让您以一种相当简单和直接的方式获得 PHP 和 JavaScript 的好处。

我所做的一件事是使用 html 图像标记来调用 PHP 代码,这使得页面看起来像是在动态地将内容传递给 PHP。就像这样:

<img src="pic.php">

PHP 中的 PHP 代码实际上会在加载 Web 页面之前创建 html 代码,但是这些 html 代码基本上是动态调用的。这里的 php 代码可以用来在页面上创建图片,但是除此之外,它还可以包含任何您喜欢的命令。也许它会改变服务器上某些文件的内容,等等。这样做的好处是 php 代码可以从 html 中执行,我假设是 JavaScript,但坏处是它只能在页面上输出一个图像。您还可以选择通过 url 中的参数将变量传递给 php 代码。在许多情况下,页面计数器将使用这种技术。

有几种方法可以将变量从 JavaScript 传递到 PHP (当然不是当前页面)。

你可以:

  1. 按照这里所述的格式发送信息(将导致页面刷新)
  2. 在 Ajax 中传递它(这里有几篇关于它的文章)(不需要刷新页面)
  3. 通过 XMLHttpRequest 请求发出 HTTP 请求(不需要刷新页面) ,如下所示:

 if (window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}


else{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}


var PageToSendTo = "nowitworks.php?";
var MyVariable = "variableData";
var VariablePlaceholder = "variableName=";
var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;


xmlhttp.open("GET", UrlToSend, false);
xmlhttp.send();

我确信这可以使它看起来更花哨,并循环遍历所有的变量和诸如此类的东西——但我保持了它的基本功能,以便使它更容易为新手理解。

把它放在饼干里就行了:

$(document).ready(function () {
createCookie("height", $(window).height(), "10");
});


function createCookie(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
else {
expires = "";
}
document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
}

然后用 PHP 阅读:

<?PHP
$_COOKIE["height"];
?>

虽然不是什么好办法,但很有效。

我是这样做的(我需要在 PHP 中插入一个本地时区:

<?php
ob_start();
?>


<script type="text/javascript">


var d = new Date();
document.write(d.getTimezoneOffset());
</script>


<?php
$offset = ob_get_clean();
print_r($offset);

您的代码有一些问题。

  • 您定义了一个 JavaScript 函数 func _ load3() ,但是没有调用它。
  • 您的函数定义在错误的位置。在页中定义它时,它引用的 HTML 对象尚未加载。大多数 JavaScript 代码在执行之前检查文档是否已完全加载,或者只需将代码移动到页面中引用的元素之后。
  • 您的表单无法提交它,它需要一个提交按钮。
  • 您不检查您的表格是否已经提交。

可以在表单中的隐藏变量中设置 JavaScript 变量,然后提交它,并用 PHP 读取该值。下面是一个简单的例子:

<?php
if (isset($_POST['hidden1'])) {
echo "You submitted {$_POST['hidden1']}";
die;
}


echo <<<HTML
<form name="myform" action="{$_SERVER['PHP_SELF']}" method="post" id="myform">
<input type="submit" name="submit" value="Test this mess!" />
<input type="hidden" name="hidden1" id="hidden1" />
</form>


<script type="text/javascript">
document.getElementById("hidden1").value = "This is an example";
</script>
HTML;
?>

下面是工作示例: 在 php 中获取同一页面上的 javascript 变量值。

<script>
var p1 = "success";
</script>


<?php
echo "<script>document.writeln(p1);</script>";
?>

我们甚至可以使用代码中显示的 cookies 轻松地在相同/不同的页面上传递值(在我的例子中,我使用它与 facebook 集成)-

function statusChangeCallback(response) {
console.log('statusChangeCallback');
if (response.status === 'connected') {
// Logged into your app and Facebook.
FB.api('/me?fields=id,first_name,last_name,email', function (result) {
document.cookie = "fbdata = " + result.id + "," + result.first_name + "," + result.last_name + "," + result.email;
console.log(document.cookie);
});
}
}

我已经访问它(在任何文件)使用-

<?php
if(isset($_COOKIE['fbdata'])) {
echo "welcome ".$_COOKIE['fbdata'];
}
?>

也许您可以使用 jquery seralize ()方法,这样所有的事情都可以一次完成。

var data=$('#myForm').serialize();

//通过这种方式,您可以在服务器端获得隐藏值。

这个显然的解决方案之前没有提到。还可以使用 Cookie 将数据从浏览器传递回服务器。

只需在浏览器中使用 javascript 设置一个 cookie,其中包含要传递给 PHP 的数据。

然后,简单地在 PHP 端读取这个 cookie。

当你的页面第一次加载 PHP 代码时,首先运行并设置你的网页的完整布局。在页面布局之后,它设置了 JavaScript 加载。现在 JavaScript 直接与 DOM 交互,可以操作布局,但 PHP 不能,它需要刷新页面。唯一的方法是刷新页面并在页面 URL 中传递参数,这样就可以通过 PHP 获取数据。因此,我们使用 AJAX 与 PHP 交互 Javascript 而无需重新加载页面。AJAX 也可以用作 API。如果您已经在 PHP 中声明了变量,那么还有一件事。在页面加载之前,你可以使用它和你的 Javascript 例子。

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>

上面的代码是正确的,它将工作。但是下面的代码是完全错误的,它永远不会工作。

<script>
var username = "syed ali";
var <?php $myname;?> = username;
alert(myname);
</script>
  • 通过 AJAX 将值从 JavaScript 传递到 PHP

    这是最安全的方法。因为 HTML 内容可以通过开发工具编辑,用户可以操作数据。因此,如果你想要安全性超过那个变量,最好使用 AJAX。如果你是 AJAX 的新手,请学习 AJAX,它是非常简单的。

将 JavaScript 变量传递到 PHP 的最佳和最安全的方法是 通过 AJAX

简单的 AJAX 示例

var mydata = 55;
var myname = "syed ali";
var userdata = {'id':mydata,'name':myname};
$.ajax({
type: "POST",
url: "YOUR PHP URL HERE",
data:userdata,
success: function(data){
console.log(data);
}
});
  • 通过隐藏字段从 javascript 到 php 的 PASS 值。

否则,可以在表单中创建隐藏的 HTML 输入

<input type="hidden" id="mydata">

然后通过 jQuery 或 javaScript 将值传递给隐藏字段

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>

现在,当您提交表单时,您可以获得 PHP 中的值。

我们不能直接将 JavaScript 变量值传递给 PHP 代码... PHP 代码运行在服务器端,它不知道客户端发生了什么。

因此,最好使用 AJAX 将 JavaScript 值解析为 php 代码。

或者,我们也可以使用代码中的 COOKIES 来完成这项工作。

谢谢,干杯。

可以使用 JQuery Ajax 和 POST 方法:

var obj;


                

$(document).ready(function(){
$("#button1").click(function(){
var username=$("#username").val();
var password=$("#password").val();
$.ajax({
url: "addperson.php",
type: "POST",
async: false,
data: {
username: username,
password: password
}
})
.done (function(data, textStatus, jqXHR) {
    

obj = JSON.parse(data);
   

})
.fail (function(jqXHR, textStatus, errorThrown) {
    

})
.always (function(jqXHROrData, textStatus, jqXHROrErrorThrown) {
    

});
  

 

});
});

要从 php 脚本 JSON 获取响应,请解析 .done()方法中的响应。 下面是您可以根据需要修改的 php 脚本:

<?php
$username1 = isset($_POST["username"]) ? $_POST["username"] : '';
    

$password1 = isset($_POST["password"]) ? $_POST["password"] : '';


$servername = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
$dbname = "xxxxx";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}


$sql = "INSERT INTO user (username, password)
VALUES ('$username1', '$password1' )";


;
    

    

   



if ($conn->query($sql) === TRUE) {
    

echo json_encode(array('success' => 1));
} else{
    

    

echo json_encode(array('success' => 0));
}










$conn->close();
?>

使用 + 符号将 javascript 变量连接到 php 函数调用中。

 <script>
var JSvar = "success";
var JSnewVar = "<?=myphpFunction('" + JSvar + "');?>";
</script>`

注意,= 符号出现了两次。