Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JavaScript变量传递给PHP?_Php_Javascript_Variables - Fatal编程技术网

如何将JavaScript变量传递给PHP?

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

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

但我无法将$u POST['hidden1']的值转换为$salareid。有什么不对劲吗

代码如下:

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

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>

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

我自己也在尝试解决这个问题,然后意识到问题在于,这是一种向后看问题的方式。在大多数情况下,与其尝试将东西从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);

你的代码有一些问题

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

我们可以使用代码中显示的cookies轻松地在相同/不同的页面上传递值,如下所示。在我的例子中,我将其与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'];
    }
?>

可能您可以使用jquery序列化方法,以便所有内容都可以一次性完成

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

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

显然,前面没有提到过这种解决方案。你也可以用co 确定将数据从浏览器传回服务器

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


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

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

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>
通过隐藏字段将值从javascript传递到php。 否则,您可以在表单中创建隐藏的HTML输入。像

<input type="hidden" id="mydata">
然后通过jQuery或javaScript将值传递给隐藏字段。像

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>

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

我们不能直接将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();
?>


@Zurahn,是的,也许我尝试使用XMLHttpRequest,所以我不能使用javascript将javascript值传递给同一页面中的php脚本?我搜索了很多,有人说可以用表单中隐藏的输入来完成。我需要进一步尝试这个解决方案吗?@Sergey,我在这里使用了提交表单和POST方法,我不知道为什么它不起作用。你知道为什么吗?如何解决这个问题?@sergey,所以我需要使用ajax?事实上,我很熟悉。事实上,我在过去的一级选择框中使用过你的方法。但是现在我制作了一个三链选择框,所以我不能使用您的方法。如果你在实现上有困难,我想我可以帮助你。@MadaraUchiha这个OP已经使用了mysql_uu函数;完全重写并不是回答这个问题的目的。@perstilence,你说得对,我没有调用这个函数。你知道如何在php中调用它吗?嗯。当有人在你的表单/onClick处理程序中选择某个内容时,你似乎想调用它。从PHP调用它没有任何意义。有人选择一个表单值,您的函数启动,更新一个隐藏的表单值,然后在FormPost上进入php。否?@pestilence,我想让某人在selectbox中选择一个项目,当我单击submit按钮时,搜索结果将显示在表格中。因此,在后端,当我选择该项时,它的值将作为变量传递给php中的mysql查询。这就是我想做的。但我似乎无法在javascript中找到解决方案。您有什么线索吗?是的,表单中的post或get方法如果有效,将被接受。您可以将js变量值存储在cookie中,然后在php cookie中访问该变量。@shasikanth-您可以这样做,但直到第二次查看页面时才会设置cookie。到那时,它将是来自第一个页面视图的值-它总是落后一个。cookie不是一种动态地将信息传递回服务器的机制;您必须执行其他操作来刷新页面,例如发布表单或进行Ajax调用。如果您正在执行其中一项操作,则没有理由使用cookie—只需在您使用的机制中传递信息即可。此外,页面消失后,cookie将继续存在,而不是本问题的目的。每次提交新表单时,如何获取db数组并将其传递到javascript上。然后javascript中的变量也会改变。怎样帮帮我Ajax实际上是XMLHttpRequest,后者只是它的一个技术术语;本例中的php只是将javascript作为字符串回显到页面。Javascript没有被传递到php。是的,这就是我们需要做的。。。有时我们需要在同一页面上使用php中的JavaScript值&而不刷新页面。。。然后它会像魅力一样工作@不,你误解了这个评论。php从未看到p1的值。echo文件。writelnp1;;在javascript中使用javascript变量p1,而不是在php中。document.writeln是一个javascript函数,当浏览器构建HTML页面时,您正在浏览器中执行该函数!一个有效的选择!我一直在寻找一个选择的时间,现在,使一个游戏,并希望成为一名球员
结束一个数据库的最高分数,现在修复它!干杯事实上,这是一个很好的解决方案!从php到javascript很容易。从javascript到php并不容易。使用饼干简单、优雅。没有废话。。!!当然,如果客户端关闭COOKIE,,,这是一个需要默认处理的问题。您能告诉我如何使用$_COOKIE[height]来获取其中的名称、值吗?谢谢不适合我。尽管有这么多的投票,这不是一个好的解决方案。原因:服务器直到下一次浏览器请求页面时才看到cookie。总是落后一个。第一次在浏览器中打开页面时,将不会有任何cookie。这可以接受吗?下一次在浏览器中打开页面时,将出现第一次打开的cookie。对于一个常量值,例如本例,尽管第一次不工作,这可能是可以接受的!!。现在考虑一个动态值,比如当前的DATETIME。php将看到以前的日期时间,而不是现在。使用ajax。我得到错误的未定义索引:高度。你想举一个例子,也许是一个相关的链接或两个?看,谢谢。非常有用。jQuery方法不允许传递在页面运行时生成的数据?您不能将输入字段设置为一个值&用php来获取它吗?这是我见过的最清晰的Ajax示例之一。我期待着尝试一下。
<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();
?>