繁体   English   中英

如何将 JavaScript 变量传递给 PHP?

[英]How do I pass JavaScript variables to PHP?

我想使用表单中的隐藏输入将 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(当然不是当前页面)。

你可以:

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

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

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

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

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

当您的页面首次加载 PHP 代码时,首先运行并设置您网页的完整布局。 在页面布局之后,它设置了 JavaScript 加载。 现在 JavaScript 直接与 DOM 交互并且可以操作布局,但 PHP 不能它需要刷新页面。 唯一的方法是刷新页面并在页面 URL 中传递参数,以便您可以通过 PHP 获取数据。 所以我们使用 AJAX 与 PHP 交互 Javascript 而无需重新加载页面。 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 中获取值。

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

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

似乎处理这种情况的明智方法是使用 PHP 创建您想要的 JavaScript 和 html,然后在页面中使用 JavaScript 来完成 PHP 不能做的任何事情。 看起来这将以一种相当简单直接的方式为您提供 PHP 和 JavaScript 的好处。

我所做的一件事就是使用 html 图像标签来调用 PHP 代码,它可以让您在运行时从您的页面向 PHP 传递东西。 像这样的东西:

<img src="pic.php">

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

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

这是之前的问题,您可以关注该问题以获取更多信息: Ajax 教程<\/a>

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

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

我们甚至可以使用代码中显示的 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);
        });
    }
}

您的代码有一些问题。

  • 您定义了一个 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();

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

您可以使用 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) { 
    
});
  
 
            });
        });

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

只需在浏览器中使用 javascript 设置一个包含您想要传递给 PHP 的数据的 cookie。

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

我们不能将 JavaScript 变量值直接传递给 PHP 代码…… PHP 代码在服务器端运行,它对客户端发生的事情一无所知。

所以最好使用 AJAX 将 JavaScript 值解析成 php 代码。

或者,我们可以在我们的代码中借助 COOKIES 来完成这项工作。

谢谢和干杯。

使用 + 号将您的 javascript 变量连接到您的 php 函数调用中。

 <script>
     var JSvar = "success";
     var JSnewVar = "<?=myphpFunction('" + JSvar + "');?>";
 </script>`

请注意 = 符号出现两次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM