如何将JavaScriptvariables传递给PHP?

我想通过表单中的隐藏input将JavaScriptvariables传递给PHP。

但是我不能将$_POST['hidden1']放到$salarieid 。 有什么不对?

这里是代码:

 <script type="text/javascript"> // view which the user has chosen function func_load3(name){ var oForm = document.forms["myform"]; var oSelectBox = oForm.select3; var iChoice = oSelectBox.selectedIndex; //alert("you have choosen: " + 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 display the query result. </table> 

您无法将当前页面的variables值传递给当前页面PHP代码… PHP代码在服务器端运行,并且不知道客户端正在进行的操作。

您需要使用其他机制将variables传递给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> 

有几种方法将variables从javascript传递给php(当然不是当前页面)

你可以:

  1. 以这里陈述的forms发送信息(将导致页面刷新)
  2. 通过它在Ajax(这里几个职位关于这一点)(没有页面刷新)
  3. 通过XMLHttpRequest请求(没有页面刷新)发出http请求,如下所示:
 <script> 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(); </script> 

我敢肯定,这可以看起来更漂亮,并循环所有的variables,而不是 – 但我保持基本,以便更容易为新手理解。

把它保存在一个cookie中:

 <script> $(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=/"; } </script> 

然后用php读取它

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

它不是一个漂亮的解决scheme,但它的作品。 干杯。

下面是工作示例:在php的同一页面上获取javascriptvariables值。

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

在页面发送给用户之前,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> 

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

我试图自己弄清楚这个问题,然后意识到问题在于这是一种看待事态的倒退。 而不是试图从Java到PHP的东西,在大多数情况下,也许最好换一种方式。 PHP代码在服务器上执行并创buildhtml代码(也可能是java脚本)。 然后浏览器加载页面并执行html和java脚本。

看起来像处理这种情况的明智方式是使用PHP创buildjava脚本和所需的html,然后使用页面中的java脚本来执行任何PHP无法执行的操作。 看起来这样会以相当简单和直接的方式为您提供PHP和Java脚本的好处。

我已经做了一件事情,从页面上dynamic传递给PHP的外观是使用HTML图像标签来调用PHP代码。 像这样的东西:

<img src =“pic.php”>

pic.php中的PHP代码实际上会在你的网页被加载之前创buildhtml代码,但是这个html代码基本上是实时调用的。 这里的PHP代码可以用来在你的页面上创build一个图片,但是它可以包含任何你喜欢的命令。 也许它会改变你的服务器上的一些文件的内容等等。其优点是,PHP代码可以从HTML执行,我承担的Java脚本,但不利的一面是,它可以把你的网页上唯一的输出是一个图像。 您也可以通过url中的参数将variables传递给php代码。 页面计数器在很多情况下都会使用这种技术。

我们可以很容易地使用代码中显示的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']; } ?> 

你的函数,它设置隐藏的表单值,被称为? 这不是在这个例子中。 将表单发送回服务器之前,应该没有问题修改隐藏的值。

这是我做到这一点(需要插入本地时区到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); 

可能是你可以使用jquery serialize()方法,以便一切都将一气呵成。

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

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

你的代码有一些错误的东西。

  • 您可以定义一个JavaScript函数func_load3(),但不要调用它。
  • 你的function被定义在错误的地方。 在页面中定义它时,它引用的HTML对象尚未加载。 大多数JavaScript代码在执行之前检查文档是否完全加载,或者您可以将代码移过页面中引用的元素。
  • 您的表单无法提交。 它需要一个提交button。
  • 你不检查你的表格是否已经提交。

可以在表单中的一个隐藏variables中设置一个JavaScriptvariables,然后提交它,然后读取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; ?> 

是的,它为我工作。

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