如何将JavaScript变量传递给PHP?

时间:2009-12-16 20:46:05

标签: php javascript variables

我想使用表单中的隐藏输入将JavaScript变量传递给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>

15 个答案:

答案 0 :(得分:81)

您无法将变量值从当前页面javascript传递到当前页面PHP代码... PHP代码在服务器端运行,并且它不知道客户端上发生了什么。

您需要使用其他机制从html-form传递变量到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>

答案 1 :(得分:21)

只需将其保存在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 :(得分:18)

有几种方法可以将变量从javascript传递到php(当然不是当前页面)

你可以:

  1. 以此处所述的形式发送信息,(将导致页面刷新)
  2. 在ajax中传递它(此处有几篇帖子)(没有页面刷新)
  3. 通过XMLHttpRequest请求(没有页面刷新)发出http请求,如下所示:

  4.  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();
    

    我确信这可以看起来更漂亮并循环遍历所有变量和诸如此类的东西 - 但我保持它基本,以便让新手更容易理解。

答案 3 :(得分:11)

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

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

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

答案 4 :(得分:6)

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

如果要将JavaScript值传递给PHP脚本,则必须执行XMLHttpRequest将数据发送回服务器。

以下是您可以关注的上一个问题,以获取更多信息:Ajax Tutorial

现在,如果你只需要将一个表单值传递给服务器,你也可以只做一个普通的表单帖子,它做同样的事情,但整个页面都必须刷新。

<?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>

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

答案 5 :(得分:6)

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

接近这种情况的合理方法似乎是使用PHP来创建所需的JavaScript和html,然后使用页面中的JavaScript来做任何PHP无法做到的事情。看起来这会以相当简单和直接的方式为您提供PHP和JavaScript的好处。

我做过的一件事就是让你的页面动态传递给PHP的外观是使用html图像标签来调用PHP代码。像这样:

<img src="pic.php">

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

答案 6 :(得分: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'];
    }
?>

答案 7 :(得分:3)

这是我如何做到的(需要在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);

答案 8 :(得分:2)

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

答案 9 :(得分: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;
?>

答案 10 :(得分:1)

可能你可以使用jquery serialize()方法,这样一切都可以一次性使用。

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

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

答案 11 :(得分:0)

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

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

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

答案 12 :(得分:0)

在您的页面首次加载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获取值。

答案 13 :(得分:0)

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

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

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

谢谢。

答案 14 :(得分:0)

您可以使用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返回响应,请解析.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();
?>