如何将JavaScript变量传递给PHP?


150

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

2
您可以将js变量值存储在cookie中,然后在php cookie中访问该变量。
shasi kanth 2013年

2
@shasikanth-您可以执行此操作,但是直到第二次查看该页面时,才会设置 cookie 。到那时,它将是第一页视图中的值-始终为后一个。Cookie不是一种将信息动态传递回服务器的机制。您必须执行其他操作来刷新页面,例如,发布表单或进行Ajax调用。而且,如果您要执行其中的一项操作,则没有理由使用Cookie-只需在使用的机制中传递信息即可。同样,页面消失后,cookie仍将保留-不是此问题的目的。
制造商

Answers:


90

您不能将变量值从当前页面的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吗?实际上,我对此非常熟悉。
孙建功

实际上,我在上一级选择框中使用了您的方法。但是现在我做了一个三链选择框,所以我不能使用您的方法。
孙建功

此时:是,您需要使用AJAX技术。如果您在实现方面遇到麻烦,我想我可以提供帮助。
谢尔盖·库兹涅佐夫,

3
@MadaraUchiha OP已使用的mysql_功能;通过完全重写来回答这个问题并不是目标。
杰克

26

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

这不是一个很好的解决方案,但可以。


2
结局!可行的解决方案!我一直在寻找时间进行娱乐,制作游戏,并希望将最高分发送到数据库,现在将其修复!干杯!
西德El

1
实际上,这是一个很好的解决方案!从php到javascript很容易。从javascript到php并不容易。使用Cookie既简单又优雅。没有bs .. !! 当然,如果客户端关闭饼干,,,这就是一个问题来处理与默认..
JamesAD-0

您能否让我知道如何使用$ _COOKIE [“ height”]来获取名称和值?谢谢。不为我工作。
扎克

4
尽管有所有支持,但这不是一个好的解决方案。原因:直到一次浏览器请求页面时,服务器才会看到cookie 。它总是“落后一个”。第一次在浏览器中打开页面时,根本没有任何cookie。这可以接受吗?下次在浏览器中打开页面时,第一次会出现cookie。对于一个恒定值(例如本示例),这可能是可以忍受的(尽管第一次不工作!)。现在考虑一个动态值,例如当前日期时间。php将会看到之前的日期时间,而不是现在。使用ajax。
制造商史蒂夫(Steve)

20

有几种将变量从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中的变量也会更改。怎么样?帮我。:(
文森特

3
Ajax实际上是XMLHttpRequest,后者只是它的一个技术术语。
Alex C.

14

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

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

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

1
我尝试了这个概念,然后真正起作用了,但是,如果我这样尝试:<?php var x = <script> document.writeln(p1); </ script>“;?>,则回显x;则不起作用。您还有其他方法吗?
Juna serbaserbi 2015年

3
您可以这样尝试<script> var p1 =“ success”; </ script> <?php $ x =“ <script> document.writeln(p1); </ script>”; 回声$ x; ?>
Arslan Tabassum

3
在这种情况下,php只是将javascript作为字符串回显到页面。Javascript没有传递给php。

是的,这就是我们需要做的...有时我们需要在同一页面的php中使用JavaScript值,而无需刷新页面...然后它将像魅力一样工作.. :)
Arslan Tabassum

1
@ArslanTabassum不,您误解了此评论。php 永远不会看到p1的值。echo "<script>document.writeln(p1);</script>";使用JavaScript变量p1JavaScript的,而不是在PHP。document.writeln是浏览器正在构建HTML页面时在浏览器中执行的javascript函数。
制造商史蒂夫(Steve),

6

在将页面发送给用户之前,PHP在服务器上运行,一旦接收到JavaScript,便在用户计算机上运行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
@Zurahn,是的,也许我尝试使用XMLHttpRequest,所以我无法使用JavaScript在同一页面中将javascript值传递给php脚本?我搜索了很多内容,有人说可以用隐藏的形式输入。我需要尝试这种解决方案吗?
孙建功

6

我试图自己弄清楚这一点,然后才意识到问题在于,这是一种看待情况的倒退方式。在大多数情况下,最好不要采取其他方法,而不是尝试从JavaScript传递到php。PHP代码在服务器上执行,并创建html代码(可能还包括Java脚本)。然后,浏览器加载页面并执行html和java脚本。

解决这种情况的明智方法似乎是使用PHP创建所需的JavaScript和html,然后使用页面中的JavaScript来完成PHP无法完成的工作。看起来这将以一种相当简单直接的方式为您提供PHP和JavaScript的好处。

我做过的一件事使您可以快速将内容从您的页面传递给PHP,这是使用html image标记来调用PHP代码的。像这样:

<img src="pic.php">

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


5

我们可以使用代码如下所示的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'];
    }
?>

5

这是我的操作方法(我需要在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);

2

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


@perstilence,您是对的,我没有调用该功能。你知道如何在php中调用它吗?
孙建功

嗯。当有人在您的表单/ onClick处理程序中选择某项时,您似乎想调用它。从PHP调用它没有任何意义。有人选择一个表单值,您的函数将触发,更新一个隐藏的表单值,然后在表单发布时将其传递给php。没有?
pestilence669

@pestilence,我想让某人在selectbox中选择一个项目,当我单击Submit按钮时,搜索结果将显示在表格中。因此,在后端,当我选择该项时,其值将作为变量传递到php中的mysql查询。这就是我想做的。但似乎我无法在javascript中找到解决方案。你有什么线索吗?
孙建功

是的,如果可以,则接受表单中的post或get方法。
孙建功

2

您的代码有一些问题。

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

2

页面首次加载时,将首先运行PHP代码并设置页面的完整布局。页面布局后,它将设置JavaScript加载。现在,JavaScript直接与DOM交互并可以操纵布局,但是PHP不需要刷新页面。唯一的方法是刷新页面并在页面URL中传递参数,以便可以通过PHP获取数据。因此,我们使用AJAX在不重新加载页面的情况下将Javascript与PHP进行交互。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获取值。


1
谢谢。很有帮助。jQuery方法不允许您传递页面运行时生成的数据吗?您不能将输入字段设置为值,并不能通过php将其选中?这是我所见过的最清晰的Ajax示例之一。我期待尝试。
卷曲


0

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

只需使用浏览器中的javascript设置您要传递给PHP的数据的cookie。

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


。。。您想举一个例子,也许是一两个相关的链接吗?(请参阅如何回答。)
ashleedawg,

0

我们无法将JavaScript变量值直接传递给PHP代码... PHP代码在服务器端运行,并且对客户端的运行情况一无所知。

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

或者,我们可以在代码中使用COOKIES来完成此操作。

谢谢与欢呼。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.