如何将javascript变量传递给php?

kb5ga3dv  于 2021-07-26  发布在  Java
关注(0)|答案(15)|浏览(638)

我想使用表单中的隐藏输入将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>
e5nszbig

e5nszbig1#

我们可以使用如下代码中显示的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'];
    }
?>
du7egjpx

du7egjpx2#

当您的页面第一次加载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中获得值。

9gm1akwq

9gm1akwq3#

你的代码有一些问题。
您定义了一个javascript函数func\u 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;
?>
ecbunoof

ecbunoof4#

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

nfeuvbwi

nfeuvbwi5#

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

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

//这样,您也可以在服务器端获得隐藏的值。

zmeyuzjn

zmeyuzjn6#

您可以使用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();
?>
ygya80vv

ygya80vv7#

显然,这个解决方案在前面没有提到。您还可以使用cookies将数据从浏览器传递回服务器。
只需在浏览器中使用javascript设置一个cookie,其中包含要传递给php的数据。
然后,只需阅读php端的这个cookie。

wj8zmpe1

wj8zmpe18#

我们不能将javascript变量值直接传递给php代码。。。php代码在服务器端运行,它不知道客户端发生了什么。
因此,最好使用ajax将javascript值解析为php代码。
或者,我们也可以通过代码中的cookies来实现这一点。
谢谢,干杯。

guykilcj

guykilcj9#

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

owfi6suc10#

把它保存在饼干里:

$(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"];
?>

这不是一个很好的解决方案,但它是有效的。

bjg7j2ky

bjg7j2ky11#

有几种方法可以将变量从javascript传递到php(当然不是当前页面)。
你可以:
以此处所述的形式发送信息(将导致页面刷新)
在ajax中传递它(这里有几篇关于这个的帖子)(没有页面刷新)
通过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();

我相信这可以让它看起来更花哨,并通过所有的变量和什么循环-但我一直保持它的基本,使它更容易理解的新手。

l3zydbqr

l3zydbqr12#

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

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

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

cczfrluj13#

我试着自己去弄清楚,然后意识到问题是,这是一种向后看的方式。在大多数情况下,与其尝试将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代码。页面计数器在许多情况下都会使用这种技术。

yfwxisqw

yfwxisqw14#

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

30byixjq15#

php在页面发送给用户之前在服务器上运行,javascript在收到页面后在用户的计算机上运行,因此php脚本已经执行。
如果要将javascript值传递给php脚本,则必须执行xmlhttprequest将数据发送回服务器。
下面是前面的一个问题,您可以根据这个问题了解更多信息:ajax教程
现在,如果您只需要向服务器传递一个表单值,您也可以只执行一个普通的表单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>

单击“提交”将提交页面,并打印出提交的数据。

相关问题