【问题标题】:How do I pass JavaScript variables to PHP?如何将 JavaScript 变量传递给 PHP?
【发布时间】:2017-04-29 02:02:00
【问题描述】:

我想使用表单中的隐藏输入将 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>

【问题讨论】:

  • 您可以将 js 变量值存储在 cookie 中,然后在 php cookie 中访问该变量。
  • @shasikanth - 你可以这样做,但是cookie直到第二次查看页面时才会设置。那时,它将是来自 first 页面视图的值 - 它始终是落后的。 cookie 不是一种动态 将信息传回服务器的机制;您必须执行其他操作才能刷新页面,例如POST 表单,或进行 Ajax 调用。如果您正在执行其中之一,则没有理由使用 cookie - 只需在您使用的机制中传递信息。此外,页面消失后 cookie 将持续存在 - 这不是这个问题的意图。

标签: php javascript variables


【解决方案1】:

您不能将变量值从当前页面 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>

【讨论】:

  • @Sergey,我在这里使用 POST 方法提交表单,我不知道为什么它不起作用。你知道为什么吗?以及如何解决?
  • @sergey,所以我需要使用 ajax?其实我很熟悉。
  • 其实我在过去的一级选择框里用过你的方法。但是现在我做了一个三链选择框,所以我不能用你的方法。
  • 此时:是的,需要用到AJ​​AX技术。如果您在实现方面遇到困难,我想我可以提供帮助。
  • @MadaraUchiha OP 已经使用了mysql_ 函数;完全重写来回答这个问题并不是我们的目标。
【解决方案2】:

只需将其保存在 cookie 中:

$(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 到 javascript 很容易。从 javascript 到 php 并不容易。使用 cookie 简单、优雅。没有bs ..!!当然,如果客户端关闭了 cookie,那是一个需要使用默认值处理的问题。
  • 您能否告诉我如何使用 $_COOKIE["height"] 来获取名称和值?谢谢。不适合我。
  • 尽管有很多人赞成,但这不是一个好的解决方案。原因:服务器直到下一次浏览器请求页面时才看到cookie。它总是“落后”。第一次在浏览器中打开页面时,根本不会有任何 cookie。这可以接受吗?下次在浏览器中打开该页面时,将有一个来自第一次的 cookie。对于一个 constant 值,例如这个例子,这可能是可以容忍的(尽管第一次没有工作!!)。现在考虑一个动态 值,例如当前日期时间。 php 将看到以前的日期时间,而不是现在。使用 ajax。
  • 我得到错误未定义的索引:高度
【解决方案3】:

有几种方法可以将变量从 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();

我确信这可以看起来更花哨,并循环遍历所有变量等等 - 但我保持基本,以便新手更容易理解。

【讨论】:

  • 每次提交新表单时如何获取数据库数组并将其传递给 javascript。那么javascript中的变量也会改变。如何?帮我。 :(
  • Ajax其实就是XMLHttpRequest,后者只是它的一个技术名词。
【解决方案4】:

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

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

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

【讨论】:

  • 我尝试了这个概念然后真正奏效了,但是如果我这样尝试:document.writeln(p1);"; ?>,然后回显x; 不行,你有别的办法吗?
  • 你可以这样尝试 document.writeln(p1);";回声 $x; ?>
  • 这种情况下的 php 只是将 javascript 作为字符串回显到页面。 Javascript 未传递给 php。
  • 是的,这就是我们需要做的......有时我们需要在同一页面上的 php 中使用 JavaScript 值并且不刷新页面......然后它会像魅力一样工作...... :)
  • @ArslanTabassum 不,您误解了评论。 php 从不 看到 p1 的值。 echo "&lt;script&gt;document.writeln(p1);&lt;/script&gt;";javascript 中使用 javascript 变量 p1,而不是在 php 中。 document.writeln 是一个 javascript 函数,您正在浏览器中执行它,同时浏览器正在构建 HTML 页面。
【解决方案5】:

当您的页面首次加载 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。

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

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

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

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

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

【讨论】:

  • 谢谢。非常有帮助。 jQuery 方法不允许您传递页面运行时生成的数据?您不能将输入字段设置为值并通过 php 将其拾取吗?这是我见过的最清晰的 Ajax 示例之一。我期待着尝试。
【解决方案6】:

我是这样做的(我需要在 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);

【讨论】:

    【解决方案7】:

    我试图自己弄清楚这一点,然后意识到问题在于这是一种倒退的看待情况的方式。在大多数情况下,与其尝试将内容从 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 代码。页面计数器在很多情况下都会使用这种技术。

    【讨论】:

      【解决方案8】:

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

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

      这是一个之前的问题,您可以关注更多信息:Ajax Tutorial

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

      <?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>
      

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

      【讨论】:

      • @Zurahn,是的,也许我尝试使用 XMLHttpRequest,所以我不能使用 javascript 将 javascript 值传递给同一页面中的 php 脚本?我搜索了很多,有人说可以通过表单中的隐藏输入来完成。我需要进一步尝试这个解决方案吗?
      【解决方案9】:

      我们甚至可以使用代码中显示的 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);
              });
          }
      }
      

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

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

      【讨论】:

        【解决方案10】:

        您的代码有一些问题。

        • 您定义了一个 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;
        ?>
        

        【讨论】:

          【解决方案11】:

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

          【讨论】:

          • @perstilence,你是对的,我没有调用该函数。你知道怎么用ph​​p调用吗?
          • 嗯。当有人在您的表单/onClick 处理程序中选择某些内容时,您似乎想调用它。从 PHP 调用它没有任何意义。有人选择了一个表单值,你的函数触发,更新一个隐藏的表单值,然后在表单发布上进入 php。没有?
          • @pestilence,我想让某人在选择框中选择一个项目,当我单击提交按钮时,搜索结果将显示在表格中。所以在后端,当我选择项目时,它的值将作为变量传递给 php 中的 mysql 查询。这就是我想做的。但似乎我无法在 javascript 中找到解决方案。你有什么线索吗?
          • 是的,如果表单中的 post 或 get 方法有效,将被接受。
          【解决方案12】:

          也许你可以使用 jquery serialize() 方法,这样一来一切都将一气呵成。

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

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

          【讨论】:

            【解决方案13】:

            您可以使用 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();
            ?>
            

            【讨论】:

              【解决方案14】:

              这显然是前面没有提到的解决方案。您还可以使用 cookie 将数据从浏览器传回服务器。

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

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

              【讨论】:

              • 。 . .你想举个例子,也许一两个相关链接? (见How to Answer。)
              【解决方案15】:

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

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

              或者,我们可以在我们的代码中借助 COOKIES 来完成这项工作。

              感谢和干杯。

              【讨论】:

                【解决方案16】:

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

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

                注意 = 符号出现两次。

                【讨论】:

                  猜你喜欢
                  • 2019-07-07
                  • 2011-04-09
                  • 2011-09-27
                  相关资源
                  最近更新 更多