如何将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(当然不是当前页面)
你可以:
- 以这里陈述的forms发送信息(将导致页面刷新)
- 通过它在Ajax(这里几个职位关于这一点)(没有页面刷新)
- 通过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>"; ?>