如何将JavaScript变量传递给PHP?

Dyl*_*SUN 136 javascript php variables

我想使用表单中的隐藏输入将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>
Run Code Online (Sandbox Code Playgroud)

Ser*_*sov 82

您无法将当前页面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>
Run Code Online (Sandbox Code Playgroud)

  • @MadaraUchiha OP已经使用了`mysql_`函数; 这不是以完全重写来回答这个问题的目标. (3认同)

Chr*_*ian 24

只需将其保存在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=/";
}
Run Code Online (Sandbox Code Playgroud)

然后用php读取它

<?PHP
   $_COOKIE["height"];
?>
Run Code Online (Sandbox Code Playgroud)

它不是一个漂亮的解决方案,但它确实有效.干杯.

  • 终于!一个有效的解决方案!我一直在寻找解决方案的时间,制作游戏并希望将最高分发送到数据库,现在已修复!干杯! (2认同)
  • 尽管有所有支持,但这不是一个好的解决方案。原因:直到浏览器再次请求该页面之前,服务器不会看到Cookie。它总是“落后一个”。第一次在浏览器中打开页面时,根本没有任何cookie。这可以接受吗?下次在浏览器中打开页面时,第一次会出现cookie。对于*恒定*的值(例如本示例),这可能是可以忍受的(尽管第一次不工作!)。现在考虑一个* dynamic *值,例如当前日期时间。php将会看到之前的日期时间,而不是现在。使用ajax。 (2认同)

小智 19

有几种方法可以将变量从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();
Run Code Online (Sandbox Code Playgroud)

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

  • Ajax实际上是XMLHttpRequest,后者只是它的一个技术术语。 (2认同)

Ars*_*sum 12

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

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了这个概念然后真正起作用了,但是如果我像这样尝试:&lt;?php var x =&lt;script&gt;document.writeln(p1);&lt;/script&gt;"; ?&gt;, then echo x; 它不起作用。你有别的办法吗? (3认同)
  • 你可以试试这个<script> var p1 ="success"; </ script> <?php $ x ="<script> document.writeln(p1); </ script>"; echo $ x; ?> (3认同)
  • 在这种情况下,php只是将javascript作为字符串回显到页面。Javascript未传递给php。 (3认同)
  • @ArslanTabassum 不,你误解了这个评论。*php* **从不**看到 p1 的值。`echo "&lt;script&gt;document.writeln(p1);&lt;/script&gt;";` 在 *javascript* 中使用 javascript 变量 `p1`,而不是在 php 中。`document.writeln` 是一个 *javascript* 函数,当浏览器构建 HTML 页面时,您正在浏览器中执行该函数。 (2认同)

小智 8

这是我的做法(我需要在 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);
Run Code Online (Sandbox Code Playgroud)


Say*_*Ali 7

当您的页面首次加载 PHP 代码时,首先运行并设置您网页的完整布局。在页面布局之后,它设置了 JavaScript 加载。现在 JavaScript 直接与 DOM 交互并且可以操作布局,但 PHP 不能它需要刷新页面。唯一的方法是刷新页面并在页面 URL 中传递参数,以便您可以通过 PHP 获取数据。所以我们使用 AJAX 与 PHP 交互,无需重新加载页面。AJAX 也可以用作 API。如果您已经在 PHP 中声明了变量,还有一件事。在页面加载之前,您可以将它与您的 Javascript 示例一起使用。

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>
Run Code Online (Sandbox Code Playgroud)

上面的代码是正确的,它会工作。但下面的代码是完全错误的,它永远不会工作。

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
Run Code Online (Sandbox Code Playgroud)
  • 通过 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);
            }
            });
Run Code Online (Sandbox Code Playgroud)
  • 通过隐藏字段将值从 javascript 传递到 php。

否则,您可以在表单中创建隐藏的 HTML 输入。喜欢

<input type="hidden" id="mydata">
Run Code Online (Sandbox Code Playgroud)

然后通过 jQuery 或 javaScript 将值传递给隐藏字段。喜欢

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>
Run Code Online (Sandbox Code Playgroud)

现在,当您提交表单时,您可以获得 PHP 中的值。


Der*_*k H 6

在将页面发送给用户之前,PHP在服务器上运行,一旦收到,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>
Run Code Online (Sandbox Code Playgroud)

单击"提交"将提交页面,并打印出提交的数据.


小智 6

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

看起来接近这种情况的合理方法是使用PHP创建所需的JavaScript和html,然后使用页面中的JavaScript来执行PHP无法执行的操作.看起来这会以相当简单和直接的方式为您提供PHP和JavaScript的好处.

我做过的一件事就是使用html图像标签来调用PHP代码,这样就可以动态地从你的页面传递给PHP.像这样的东西:

<img src="pic.php">
Run Code Online (Sandbox Code Playgroud)

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


Tus*_*ade 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);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经使用以下方式访问它(在任何文件中)

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
Run Code Online (Sandbox Code Playgroud)