如何将 JavaScript 变量传递给 PHP?

168 人关注

我想用一个表单中的隐藏输入将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>
$salarieid = $_POST['hidden1'];
   $query = "select * from salarie where salarieid = ".$salarieid;
   echo $query;
   $result = mysql_query($query);
<table>
   Code for displaying the query result.
</table>
2 个评论
你可以将js的变量值存储在cookie中,以后再访问php cookie中的变量。
@shasikanth - 你 可以 这样做, cookie 要到第二次浏览该页面时才会被设置 。而在那个时候,它将是 第一次 浏览页面时的值--它总是落后一个。Cookie不是一个 动态 传递信息给服务器的机制;你必须做一些其他的事情来刷新页面,例如,POST一个表单,或者做一个Ajax调用。如果你正在做这些事情之一,就没有理由使用cookie--只要在你使用的机制中传递信息就可以了。另外,cookie会在页面消失后持续存在,这不是这个问题的目的。
php
javascript
variables
SUN Jiangong
SUN Jiangong
发布于 2009-12-17
16 个回答
Sergey Kuznetsov
Sergey Kuznetsov
发布于 2021-08-14
已采纳
0 人赞同

你不能从当前页面的JavaScript代码中传递变量值给当前页面的PHP代码...PHP代码在服务器端运行,它对客户端发生的事情一无所知。

你需要使用其他机制从HTML表单中向PHP代码传递变量,例如使用GET或POST方法提交表单。

<DOCTYPE html>
<title>My Test Form</title>
</head>
<form method="POST">
<p>Please, choose the salary id to proceed result:</p>
<label for="salarieids">SalarieID:</label>
$query = "SELECT * FROM salarie";
          $result = mysql_query($query);
          if ($result) :
<select id="salarieids" name="salarieid">
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 ?>
<input type="submit" value="Sumbit my choice"/>
</form>
<?php if isset($_POST['salaried']) : ?>
$query = "SELECT * FROM salarie WHERE salarieid = " . $_POST['salarieid'];
        $result = mysql_query($query);
        if ($result) :
<table>
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>
@Sergey,我在这里使用了POST方法提交表单,我不知道为什么它不起作用。你知道为什么吗? 如何解决这个问题?
@Sergey,所以我需要使用ajax?事实上,我对这个很熟悉。
实际上,我在过去的一级选择框中使用过你的方法。但现在我做了一个三层的选择框,所以我不能用你的方法了。
Sergey Kuznetsov
在这一点上:是的,你需要使用AJAX技术。如果您在实现方面有困难,我想我可以帮助您。
@MadaraUchiha OP已经使用了 mysql_ 函数;用完全重写的方式回答这个问题不会是目的。
Christian
Christian
发布于 2021-08-14
0 人赞同

就把它保存在饼干里。

$(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读取。

$_COOKIE["height"];

这不是一个漂亮的解决方案,但它是有效的。

最终!一个可以使用的解决方案我找了好几个小时才找到这个方法,我在做一个游戏,想把最高分发送到一个数据库,现在已经修好了欢呼吧!
实际上,这是一个很好的解决方案!从php到javascript很容易。从javascript到php不容易。使用cookie很简单,很优雅,没有废话......!当然,如果客户关闭cookie,,那是一个需要用默认值处理的问题。
Zac
你能让我知道如何使用$_COOKIE["height"]的东西来获取其中的名称、值吗?谢谢。对我来说不起作用。
尽管有很多人支持,但这并不是一个好的解决方案。原因是:服务器不会看到cookie ,直到浏览器 下一次 请求该页面时才会看到它。它总是 "落后一个"。第一次在浏览器中打开页面时,根本就没有任何cookie。这可以接受吗?下次在浏览器中打开该页面时,将有一个第一次的cookie。对于一个 恒定的 值,例如这个例子,这可能是可以容忍的(尽管第一次没有工作!!)。现在考虑一个 动态的 值,比如当前的日期时间。php将看到以前的日期时间,而不是现在。使用ajax。
我得到的错误是未定义的索引:高度
user1849393
user1849393
发布于 2021-08-14
0 人赞同

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

  • 在这里所说的表格中发送信息(将导致页面刷新)。
  • 在Ajax中传递(这里有几个关于这个的帖子)(不用刷新页面)
  • 通过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();
    

    我相信这可以做得更漂亮,并通过所有的变量和其他东西进行循环 - 但我保持了基本的,以便让新手更容易理解。

    我如何获得数据库中的数组,并在每次提交新的表单时将其传递给javascript,那么javascript中的变量也会改变。
    Ajax实际上是XMLHttpRequest,后者只是它的一个技术术语。
    Arslan Tabassum
    Arslan Tabassum
    发布于 2021-08-14
    0 人赞同

    以下是工作实例。用php在同一个页面上获取javascript的变量值。

    <script>
    var p1 = "success";
    </script>
    echo "<script>document.writeln(p1);</script>";
    
    我试了一下这个答案,确实有效,但如果我像这样尝试:<?php var x =<script>document.writeln(p1);</script>"; ?>,那么echo x; 它不工作。你有其他方法吗?
    你可以这样试试 <script> var p1 = "success"; </script> <?php $x = "<script>document.writeln(p1);</script>"; echo $x; ?
    Ben
    在这种情况下,php只是把javascript作为一个字符串回传到页面上。Javascript没有被传递给php。
    是的,这就是我们需要做的......有时我们需要在同一页面上使用php中的JavaScript值,并且不刷新页面......那么它将像魅力一样工作。)
    @ArslanTabassum 不,你误解了评论。 php 从未 看到p1的值。 echo "<script>document.writeln(p1);</script>"; javascript 中使用javascript变量 p1 ,而不是在php中。 document.writeln 是一个 javascript 函数,你在浏览器中执行它,而浏览器正在构建HTML页面。
    Sayed Mohd Ali
    Sayed Mohd Ali
    发布于 2021-08-14
    0 人赞同

    当你的页面第一次加载时,PHP代码首先运行并设置了你的网页的完整布局。唯一的办法是刷新你的页面,并在页面URL中传递参数,这样你就可以通过PHP获得数据。所以我们使用AJAX来与PHP交互Javascript而不需要刷新页面。还有一件事,如果你已经在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。

  • 将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。
  • 否则,你可以在你的表单中创建隐藏的HTML输入。 比如

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

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

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

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

    谢谢你。非常有帮助。jQuery方法不允许你传递页面运行时产生的数据?你不能把一个输入字段设置成一个值,然后通过php把它捡起来?这是我见过的最清晰的Ajax例子之一。我期待着试用它。
    VisionQuest
    VisionQuest
    发布于 2021-08-14
    0 人赞同

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

    ob_start(); < script type = "text/javascript" > var d = new Date (); document . write (d. getTimezoneOffset ()); </ script > $offset = ob_get_clean(); print_r( $offset );
    Terry Prothero
    Terry Prothero
    发布于 2021-08-14
    0 人赞同

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

    在这种情况下,明智的做法似乎是用PHP来创建JavaScript和你想要的html,然后用页面中的JavaScript来做PHP不能做的事情。 这似乎可以让你以一种相当简单和直接的方式同时获得PHP和JavaScript的好处。

    我曾做过一件事,就是用html图像标签来调用PHP代码,这样就可以从你的页面中快速传递东西给PHP。 像这样。

    <img src="pic.php">
    

    pic.php中的PHP代码实际上会在你的网页被加载之前创建html代码,但这些html代码基本上是在飞行中被调用的。 这里的PHP代码可以用来在你的网页上创建一个图片,但它可以有任何你喜欢的命令,除了这个。 也许它会改变你服务器上一些文件的内容,等等。 这样做的好处是,php代码可以从html和我假设的JavaScript中执行,但坏处是,它能在你的页面上的唯一输出是一张图片。 你也可以选择通过url中的参数向php代码传递变量。 页面计数器在许多情况下会使用这种技术。

    Elle H
    Elle H
    发布于 2021-08-14
    0 人赞同

    PHP在页面发送给用户之前在服务器上运行,JavaScript在用户的电脑上收到后就运行,所以PHP脚本已经执行了。

    如果你想把一个JavaScript值传递给一个PHP脚本,你就必须做一个XMLHttpRequest来把数据送回服务器。

    这里有一个以前的问题,你可以按照这个问题来了解更多信息。 Ajax教程

    现在,如果你只需要向服务器传递一个表单值,你也可以只做一个普通的表单帖子,做同样的事情,但整个页面必须被刷新。

    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 >

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

    SUN Jiangong
    @Zurahn,是的,也许我尝试使用XMLHttpRequest,所以我不能在同一个页面中使用javascript来传递javascript值给php脚本?我找了很多资料,有人说可以用表单中的隐藏输入来实现。我需要进一步尝试这个解决方案吗?
    Tushar Walzade
    Tushar Walzade
    发布于 2021-08-14
    0 人赞同

    我们可以很容易地传递值,即使是在相同/不同的页面上使用代码中显示的cookie,如下所示(在我的案例中,我将它与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);
    

    而且我已经访问了它(在任何文件中),使用 -

    if(isset($_COOKIE['fbdata'])) { echo "welcome ".$_COOKIE['fbdata'];
    user3822447
    user3822447
    发布于 2021-08-14
    0 人赞同

    你的代码有一些问题。

  • 你定义了一个JavaScript函数func_load3(),但没有调用它。
  • 你的函数被定义在错误的地方。当它被定义在你的页面中时,它所指的HTML对象还没有被加载。大多数JavaScript代码在执行前会检查文档是否完全加载,或者你可以直接将你的代码移过它在页面中所指的元素。
  • 你的表单没有提交的方法。它需要一个提交按钮。
  • 你没有检查你的表格是否已被提交。
  • 可以在表单中的一个隐藏变量中设置一个JavaScript变量,然后提交,并在PHP中读回该值。这里有一个简单的例子可以说明这一点。

    if ( isset ($_POST[ 'hidden1' ])) { echo "You submitted {$_POST['hidden1']}" ; 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;
    Andreas Konstantakos
    Andreas Konstantakos
    发布于 2021-08-14
    0 人赞同

    你可以使用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脚本中获取响应,在.done()方法中对响应进行JSON解析。 这里是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' )";
    pestilence669
    pestilence669
    发布于 2021-08-14
    0 人赞同

    你设置隐藏表单值的函数被调用了吗?在这个例子中,它没有被调用。 把表单发布到服务器 之前, 你修改一个隐藏的值应该是没有问题的。

    @perstilence, 你是对的,我没有调用这个函数。你知道如何在php中调用它吗?
    hmm.看起来你想在别人选择表单中的东西时调用它/一个onClick处理程序。从PHP中调用它没有任何意义。有人选择了一个表单值,你的函数启动了,更新了一个隐藏的表单值,然后在表单发布时将其传送到php。不是吗?
    @pestilence, 我想让别人在选择框中选择一个项目,当我点击提交按钮时,搜索结果将显示在一个表中。 所以在后端,当我选择项目时,它的值将作为一个变量传递给php中的mysql查询。这就是我想做的。但我似乎在javascript中找不到解决方案。你有什么线索吗?
    是的,表格中的邮寄或获取方法如果有效,将被接受。
    Satyapriya Mishra
    Satyapriya Mishra
    发布于 2021-08-14
    0 人赞同

    也许你可以使用jquery serialize()方法,这样所有的东西都可以一次完成。

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

    //这样,你也可以在服务器端获得隐藏的值。

    Tim
    Tim
    发布于 2021-08-14
    0 人赞同

    这个明显的解决方案在前面没有提到。你也可以使用cookies将数据从浏览器传回服务器。

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

    然后,只需在PHP端读取这个cookie。

    ..你愿意举个例子,也许还有一两个相关的链接?(见 如何回答 。)
    Rohit Saini
    Rohit Saini
    发布于 2021-08-14
    0 人赞同

    我们不能直接将JavaScript变量值传递给PHP代码...PHP代码在服务器端运行,它对客户端发生的事情一无所知。

    所以最好使用AJAX将JavaScript值解析到php代码中。

    或者,我们也可以在代码中借助COOKIES来完成这个任务。

    谢谢你 & 干杯。

    Robert Quinn
    Robert Quinn
    发布于 2021-08-14
    0 人赞同

    使用+号将你的javascript变量串联到你的php函数调用中。

     <script>