如何将 JavaScript 变量传递给 PHP?

How do I pass JavaScript variables to PHP?

提问人:SUN Jiangong 提问时间:12/17/2009 最后编辑:Peter MortensenSUN Jiangong 更新时间:1/6/2023 访问量:805455

问:

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

但是我无法获得 into 的值。有什么问题吗?$_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>
PHP JavaScript 变量

评论

2赞 shasi kanth 9/20/2013
您可以将 js 变量值存储在 cookie 中,然后再在 php cookie 中访问该变量。
3赞 ToolmakerSteve 10/16/2019
@shasikanth - 您可以这样做,直到第二次查看页面时才会设置 cookie。届时,它将是第一个页面视图的值 - 它总是落后一个。Cookie 不是一种将信息动态传递回服务器的机制;您必须执行其他操作来刷新页面,例如 POST 表单或进行 Ajax 调用。如果你正在做其中之一,就没有理由使用cookie - 只需在你使用的机制中传递信息。此外,在页面消失后,cookie 将持续存在 - 而不是这个问题的意图。

答:

6赞 Elle H 12/17/2009 #1

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

如果要将 JavaScript 值传递给 PHP 脚本,则必须执行 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>

单击“提交”将提交页面,并打印出提交的数据。

评论

1赞 SUN Jiangong 12/17/2009
@Zurahn,是的,也许我尝试使用 XMLHttpRequest,所以我无法使用 javascript 将 javascript 值传递给同一页面中的 php 脚本?我搜索了很多,有人说可以通过表单中的隐藏输入来完成。我接下来需要尝试这个解决方案吗?
116赞 Sergey Kuznetsov 12/17/2009 #2

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

评论

0赞 SUN Jiangong 12/17/2009
@Sergey,我在这里使用了带有POST方法的提交表单,我不知道为什么它不起作用。你知道为什么吗?如何解决这个问题?
0赞 SUN Jiangong 12/18/2009
@sergey,所以我需要使用 Ajax 吗?其实,我对此很熟悉。
0赞 SUN Jiangong 12/18/2009
实际上,我在过去的一个级别选择框中使用了您的方法。但是现在我做了一个三链选择框,所以我不能使用你的方法。
0赞 Sergey Kuznetsov 12/19/2009
此时:是的,您需要使用 AJAX 技术。如果你在实现方面有困难,我想我可以帮忙。
3赞 Ja͢ck 10/17/2012
@MadaraUchiha OP 已使用函数;通过完全重写来回答这个问题并不是目标。mysql_
2赞 pestilence669 12/17/2009 #3

是否调用了设置隐藏表单值的函数?它不在此示例中。在将表单发布回服务器之前,修改隐藏值应该没有问题。

评论

0赞 SUN Jiangong 12/17/2009
@perstilence,你是对的,我没有调用函数。你知道如何在php中调用它吗?
0赞 pestilence669 12/18/2009
嗯。当有人在您的表单/onClick 处理程序中选择某些内容时,您似乎想调用它。从 PHP 调用它没有任何意义。有人选择一个表单值,你的函数会触发,更新一个隐藏的表单值,然后在表单发布时进入 php。 不是吗?
0赞 SUN Jiangong 12/18/2009
@pestilence,我想让某人在选择框中选择一个项目,当我单击“提交”按钮时,搜索结果将显示在表格中。所以在后端,当我选择项目时,它的值将作为变量传递给 php 中的 mysql 查询。这就是我想做的。但似乎我在 javascript 中找不到解决方案。你有什么线索吗?
0赞 SUN Jiangong 12/18/2009
是的,如果表单中的 post 或 get 方法有效,它将被接受。
7赞 Terry Prothero 6/3/2012 #4

我试图自己弄清楚这一点,然后意识到问题在于这是一种看待情况的倒退方式。在大多数情况下,与其尝试将东西从 JavaScript 传递到 php,不如反其道而行之。PHP 代码在服务器上执行并创建 html 代码(也可能是 java 脚本)。然后浏览器加载页面并执行 html 和 java 脚本。

处理这种情况的明智方法是使用 PHP 创建您想要的 JavaScript 和 html,然后在页面中使用 JavaScript 来执行 PHP 无法执行的任何操作。这似乎会以一种相当简单和直接的方式给你带来 PHP 和 JavaScript 的好处。

我做过的一件事是使用 html 图像标签来调用 PHP 代码,它看起来像是从您的页面动态传递内容。像这样的东西:

<img src="pic.php">

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

22赞 user1849393 11/29/2012 #5

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

我敢肯定,这可以看起来更花哨,并循环遍历所有变量等等——但我保持了它的基本功能,以便让新手更容易理解。

评论

0赞 Vincent 11/2/2013
每次提交新表单时,我将如何获取数据库数组并将其传递到 JavaScript 上怎么样?然后 JavaScript 中的变量也会改变。如何?帮帮我。:(
3赞 Alex C. 7/7/2016
Ajax 实际上是 XMLHttpRequest,后者只是它的一个技术术语。
40赞 Christian 2/13/2014 #6

只需将其保存在 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"];
?>

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

评论

3赞 Cid-El 11/15/2016
终功成城!一个有效的选择!我一直在寻找几个小时的推荐,制作一个游戏,并想将最高分发送到数据库,现在修复了!干杯!
1赞 James Danforth 7/16/2017
实际上,这是一个很好的解决方案!从 PHP 到 JavaScript 很容易。从JavaScript到PHP并不容易。使用cookie简单而优雅。没有bs..!!当然,如果客户端关闭了 cookie,,,这是一个默认处理的问题。
0赞 Zac 8/5/2017
你能告诉我如何使用 $_COOKIE[“height”] 的东西来获得它的名字和价值吗?谢谢。对我不起作用。
13赞 ToolmakerSteve 10/16/2019
尽管有这么多的赞成票,但这不是一个好的解决方案。原因:直到浏览器下次请求页面时,服务器才会看到 cookie。它总是“落后”。第一次在浏览器中打开页面时,根本不会有任何cookie。这是可以接受的吗?下次在浏览器中打开页面时,第一次就会有一个cookie。对于常量值,例如此示例,这可能是可以容忍的(尽管第一次不起作用!现在考虑一个动态值,例如当前日期时间。php 将看到 PREVIOUS datetime,而不是现在。使用 ajax。
0赞 Riska Nanda 11/8/2020
我收到错误未定义的索引:高度
9赞 VisionQuest 6/17/2014 #7

这是我是如何做到的(我需要在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);
4赞 user3822447 7/22/2014 #8

你的代码有一些问题。

  • 定义一个 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;
?>
16赞 Arslan Tabassum 7/25/2014 #9

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

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

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

评论

3赞 Juna serbaserbi 10/31/2015
我尝试了这个 consept 然后确实有效,但是如果我像这样尝试: <?php var x =<script>document.writeln(p1);</script>“; ?>,则回显 x;它不起作用。你还有别的办法吗?
6赞 Arslan Tabassum 6/20/2016
你可以试试这样<script> var p1 = “success”;</script> <?php $x = “<script>document.writeln(p1);</script>“;回声$x; ?>
8赞 Ben 3/9/2018
在这种情况下,php 只是将 javascript 作为字符串回显到页面。Javascript 未传递给 php。
0赞 Arslan Tabassum 5/8/2019
是的,这就是我们需要做的......有时我们需要在同一页面上使用php中的JavaScript值,而无需刷新页面...然后它会像魅力一样工作..:)
4赞 ToolmakerSteve 10/16/2019
@ArslanTabassum 不,你误解了评论。PHP 永远不会看到 p1 的值。 在 JavaScript 中使用 JavaScript 变量,而不是在 PHP 中使用 JavaScript 变量。 是一个 javascript 函数,当浏览器构建 HTML 页面时,您正在浏览器中执行该函数。echo "<script>document.writeln(p1);</script>";p1document.writeln
6赞 Tushar Walzade 2/29/2016 #10

我们甚至可以使用代码中显示的 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'];
    }
?>
2赞 Satyapriya Mishra 4/1/2016 #11

也许你可以使用 jquery serialize() 方法,这样一切都会一次性完成。

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

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

1赞 Tim 8/9/2018 #12

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

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

然后,只需在PHP端阅读此cookie即可。

评论

1赞 ashleedawg 4/4/2019
. . .您想举个例子,也许还有一两个相关的链接吗?(请参阅如何回答
11赞 Sayed Mohd Ali 7/12/2019 #13

当您的页面首次加载时,PHP 代码首先运行并设置网页的完整布局。在页面布局之后,它会设置 JavaScript 加载。

现在 JavaScript 直接与 DOM 交互,可以操作布局,但 PHP 不能 - 它需要刷新页面。唯一的方法是将页面刷新到页面 URL 中并传递参数,以便您可以通过 PHP 获取数据。

因此,我们使用 AJAX 让 Javascript 与 PHP 交互,而无需重新加载页面。AJAX 也可以用作 API。还有一件事,如果你在页面加载之前已经在 PHP 中声明了变量,那么你可以将它与你的 Javascript 示例一起使用。

<?php $myname= "syed ali";?>

    <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 中获取值。

评论

1赞 curls 9/16/2019
谢谢。很有帮助。jQuery 方法不允许传递在页面运行时生成的数据?你不能把输入字段设置为一个值,然后用php来捡起它吗?这是我见过的最清晰的 Ajax 示例之一。我很期待尝试。
-1赞 Rohit Saini 8/8/2019 #14

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

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

或者,我们可以在代码中借助 COOKIE 来完成此操作。

谢谢和干杯。

3赞 Andreas Konstantakos 10/26/2020 #15

您可以使用 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 中获取响应,请解析 respone in 方法。 以下是您可以根据需要修改的 php 脚本:.done()

<?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();
?>
-1赞 Robert Quinn 8/14/2021 #16

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

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

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

评论

0赞 Brethlosze 4/13/2022
为什么这在什么时候不起作用,即myphpFunctionfile_exists
0赞 Akash Sethi 8/20/2022
调用未定义的函数 myphpFunction()