如何将JavaScript变量传递给PHP?

如何将JavaScript变量传递给PHP?,php,javascript,variables,Php,Javascript,Variables,我想使用表单中的隐藏输入将JavaScript变量传递给PHP 但是我无法将$\u POST['hidden1']的值输入$salaried。有什么不对劲吗 代码如下: <script type="text/javascript"> // View what the user has chosen function func_load3(name) { var oForm = document.forms["myform"]; var

我想使用表单中的隐藏输入将JavaScript变量传递给PHP

但是我无法将
$\u POST['hidden1']
的值输入
$salaried
。有什么不对劲吗

代码如下:

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

//查看用户选择的内容
函数func_load3(名称){
形式变量=document.forms[“myform”];
var oSelectBox=oForm.select3;
var iChoice=oSelectBox.selectedIndex;
//警报(“您已选择:“+oSelectBox.options[iChoice].text”);
//document.write(oSelectBox.options[iChoice].text);
var sa=oSelectBox.options[iChoice].text;
document.getElementById(“hidden1”).value=sa;
}
用于显示查询结果的代码。

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

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

您可以按照前面的问题了解更多信息:

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

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


无法将变量值从当前页面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>

我的考试表
请选择薪资id以继续结果:

工薪阶层:
是否调用了设置隐藏窗体值的函数?本例中没有。在将表单发回服务器之前,修改隐藏值应该没有问题。

我自己也在尝试解决这个问题,然后意识到问题在于,这是一种向后看问题的方式。在大多数情况下,与其尝试将东西从JavaScript传递到php,不如换一种方式。PHP代码在服务器上执行并创建html代码(可能还有java脚本)。然后浏览器加载页面并执行html和java脚本

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

我所做的一件事情就是使用html图像标记调用PHP代码,这让我看起来像是在动态地从页面向PHP传递内容。大概是这样的:

<img src="pic.php">


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

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

你可以:

  • 以此处所述的形式发送信息(将导致页面刷新)
  • 在Ajax中传递(这里有几篇关于这方面的帖子)(没有页面刷新)
  • 通过XMLHttpRequest请求(无页面刷新)发出HTTP请求,如下所示:


  • 我相信这可以让它看起来更花哨,循环所有变量等等,但我保留了它的基本功能,以便新手更容易理解。

    只需将它保存在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"];
    ?>
    
    
    
    这不是一个很好的解决方案,但它很有效。

    我是这样做的(我需要在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);
    
    
    var d=新日期();
    document.write(d.getTimezoneOffset());
    
    你的代码有一些问题

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

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

    <script>
    var p1 = "success";
    </script>
    
    <?php
    echo "<script>document.writeln(p1);</script>";
    ?>
    
    
    var p1=“成功”;
    
    我们可以使用代码中显示的cookie轻松地在相同/不同的页面上传递值,如下所示(在我的情况下,我将其与facebook集成使用)-

    我已经通过以下方式访问了它(在任何文件中):


    也许您可以使用jquery serialize()方法,这样一切都可以一次性完成

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

    //通过这种方式,您也可以在服务器端获取隐藏值。

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

    只需设置一个cookie,其中包含要使用jav传递给PHP的数据
    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'];
        }
    ?>
    
    var data=$('#myForm').serialize();
    
    <script>
    var username = "<?php echo $myname;?>";
    alert(username);
    </script>
    
    <script>
        var username = "syed ali";
        var <?php $myname;?> = username;
        alert(myname);
        </script>
    
    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);
                }
                });
    
    <input type="hidden" id="mydata">
    
    <script>
    var myvalue = 55;
    $("#mydata").val(myvalue);
    </script>
    
    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
         $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();
    ?>