我想使用表单中的隐藏输入将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>
您不能将变量值从当前页面的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>
只需将其保存在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"];
?>
这不是一个很好的解决方案,但是可以。
有几种方法可以将变量从JavaScript传递到PHP(当然不是当前页面)。
你可以:
- 以此处所述的形式发送信息(将刷新页面)
- 将其传递给Ajax(有关此内容的几篇文章)(不刷新页面)
- 通过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();
我敢肯定,可以使它看起来更奇特,并遍历所有变量和其他内容-但我将其保留为基本内容,以使新手更容易理解。
这是工作示例:在php的同一页面上获取javascript变量值。
<script>
var p1 = "success";
</script>
<?php
echo "<script>document.writeln(p1);</script>";
?>
我试图自己弄清楚这一点,然后才意识到问题在于,这是一种看待情况的倒退方式。与其尝试将内容从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代码。页面计数器将在许多情况下使用此技术。
在将页面发送给用户之前,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>
单击提交将提交页面,并打印出提交的数据。
这是我的操作方法(我需要在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);
我们可以使用代码如下所示的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代码将首先运行并设置页面的完整布局。页面布局后,它将设置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获取值。
设置隐藏表单值的函数是否正在被调用?在此示例中不是。在将表单发布回服务器之前,修改隐藏值应该没有问题。
您的代码有一些问题。
- 您定义一个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;
?>
可能是您可以使用jquery serialize()方法,以便一劳永逸。
var data=$('#myForm').serialize();
//这样,您也可以在服务器端获取隐藏值。
这个解决方案显然没有在前面提到。您还可以使用Cookie将数据从浏览器传递回服务器。
只需使用浏览器中的javascript设置要传递给PHP的数据的cookie。
然后,只需在PHP端读取此cookie。
我们不能将JavaScript变量值直接传递给PHP代码... PHP代码在服务器端运行,并且对客户端的运行情况一无所知。
因此,最好使用AJAX将JavaScript值解析为php代码。
或者,我们可以在代码中使用COOKIES来完成此操作。
谢谢与欢呼。
您可以使用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.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();
?>
文章标签:javascript , php , variables
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!