【问题标题】:Checking boolean variable from JQuery POST in PHP从 PHP 中的 JQuery POST 检查布尔变量
【发布时间】:2019-07-29 04:34:43
【问题描述】:

我是 PHP 新手。

我在 jquery 中有一个名为 editMode 的变量设置为 false。我在 jquery 中使用 $.post() 在 php 函数中传递变量。但是当我检查它的值时,它的值很好,但是 if 语句没有按照它应该的方式运行。这是我的代码:

jQuery(只是一个 sn-p):

var editMode = false;
$(document).ready(function(){
    //some function that handles UI input that triggers editMode=true

    $("#form").submit(function(event){
      event.preventDefault();

      var fName = $("#firstname").val();
      var lName = $("#lastname").val();
      //... and the rest of post values coming from UI input

      $.post('includes/sql/register.php', {
         fName: fName,
         lName: lName,
         //... and the rest of post values coming from UI input
         editMode: editMode // this is where I post the value for editMode
      },
      //jQuery function to handle the result
});

在我的 register.php 中:

<?php
  if(isset($_POST['submit'])){
     $fName = mysqli_escape_string($conn,$_POST['fName']);
     $lName = mysqli_escape_string($conn,$_POST['lName']);
     //and other post values from UI input
     $editMode = $_POST['editMode'];

     if($editMode) {
        echo $editMode . ": edit"; //fires update query
     } else {
        echo  $editMode . "add"; //fires insert query
     }
  } 
?>

在测试代码时,它返回了正确的$editMode 值,但没有正确执行if 语句。我的意思是,如果$editMode 为真,它会回显:true: edit,这很好。但是当它为假时,它会回显:false: edit。所以它仍然执行if 子句,即使它的值现在是false。我也试过if($editMode === true) {//edit} else {//add},结果正好相反。无论$editMode 是真还是假,它都会执行else 子句。请赐教。

【问题讨论】:

  • 您可以发送一个标志,1 代表真,0 代表假(而不是 JavaScript 中的 true/false)。这变成了if ("0") 是假的,或者if ("1") 是真的。所有 POST 数据都以字符串形式发送(如果我没记错的话,出于某种原因也可以使用布尔值)。
  • 回答了!您可以将其发布为答案,以便我可以将其标记为已解决。谢了哥们! :)

标签: php jquery if-statement boolean


【解决方案1】:

所有发送的 POST 请求都将被视为字符串 - 如果我没记错的话,JavaScript 中的布尔值 true 将成为 PHP 中 "true"字符串(因为它是在发送到 PHP 之前转换为字符串)。

我建议将数据作为布尔值的整数表示形式发送,即将editMode 数据作为editMode ? 1 : 0 发送。

$.post('includes/sql/register.php', {
    fName: fName,
    lName: lName,
    //... and the rest of post values coming from UI input
    editMode: editMode ? 1 : 0 
},

在 PHP 中,if ("1") 为真,if ("0") 为假。由于 PHP 是一种弱类型语言,它们将被视为整数(if (1)if (0)),它们分别是真和假表达式。

所以在 PHP 中你可以这样做

if ($editMode) {
    echo "true: edit"; //fires update query
} else {
    echo "false: edit";  //fires insert query
}

【讨论】:

    【解决方案2】:

    您可以在签入条件语句之前验证布尔值:

    $editMode = 'False';
    $editMode = filter_var($editMode, FILTER_VALIDATE_BOOLEAN);
    if ($editMode) {
        echo $editMode . ": edit"; //fires update query
    } else {
        echo  $editMode . "add"; //fires insert query
    }
    

    【讨论】:

    • 嗯.. 我更喜欢这个答案,因为它“强制”PHP 将变量视为布尔值,而不是字符串。谢谢老哥!
    【解决方案3】:

    如果你想保留你的代码,它只是在字符串中发送 false

    而不是

    var editMode = false;
    

    使用

    var editMode = "false";
    

    在你的 php 文件中

    if($editMode == "true") {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多