Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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
PHP在不满足条件的情况下进入if条件_Php - Fatal编程技术网

PHP在不满足条件的情况下进入if条件

PHP在不满足条件的情况下进入if条件,php,Php,在数据库中保存复选框的值。我有三个变量($user\u id,$checkbox\u id,$checked),但只有第三个变量很重要 $checked为true或false,表示用户是否选中或取消选中复选框。以下代码只是相关的内容: $checked = $_POST['checked']; $check_interests_query = "SELECT All interests from interests Table"; $run_query = mysqli_query($con

在数据库中保存复选框的值。我有三个变量(
$user\u id,$checkbox\u id,$checked
),但只有第三个变量很重要

$checked
为true或false,表示用户是否选中或取消选中复选框。以下代码只是相关的内容:

$checked = $_POST['checked'];

$check_interests_query  = "SELECT All interests from interests Table";
$run_query = mysqli_query($connect, $check_interests_query);

$status_1 = $checked;

if(mysqli_num_rows($run_query) == 0 && $checked == true){
   $in = "first";
   //do stuff
}

else if(mysqli_num_rows($run_query) != 0 && $checked == true){
  $status_2 = $checked;
  $in = "second";
  //do stuff
}

//Other conditions
因此,现在我选中并取消选中相同的复选框,并得到以下结果

选中复选框时:

$checked = true
$in = "second"
$status_1 = true
$status_2 = true
$checked = false
$in = "second"
$status_1 = false
$status_2 = false
array(3) {
  ["checked_id"]=>
  string(1) "3"
  ["checked"]=>
  string(4) "true"
  ["user_id"]=>
  string(1) "6"
}
取消选中复选框时:

$checked = true
$in = "second"
$status_1 = true
$status_2 = true
$checked = false
$in = "second"
$status_1 = false
$status_2 = false
array(3) {
  ["checked_id"]=>
  string(1) "3"
  ["checked"]=>
  string(4) "true"
  ["user_id"]=>
  string(1) "6"
}
因此,
$checked
在文档开始时为false,在if条件之前为false,在输入条件之后为false。它进入所述条件,尽管该条件明确指示仅在
$checked
为真时播放

我错过了什么

编辑:
var\u dump($\u POST)
给出了以下内容

选中复选框时:

$checked = true
$in = "second"
$status_1 = true
$status_2 = true
$checked = false
$in = "second"
$status_1 = false
$status_2 = false
array(3) {
  ["checked_id"]=>
  string(1) "3"
  ["checked"]=>
  string(4) "true"
  ["user_id"]=>
  string(1) "6"
}
取消选中时:

array(3) {
  ["checked_id"]=>
  string(1) "3"
  ["checked"]=>
  string(5) "false"
  ["user_id"]=>
  string(1) "6"
}

您获得的POST参数是字符串

如果POST变量中的字符串为“true”或“false”,则应
json\u对其进行解码
以将其转换为布尔值

将第一行更改为:

$checked = json_decode($_POST['checked']);
或者,为了安全起见:

$checked = $_POST['checked'] == "true";

如果POST变量中包含字符串“true”,则最后一个将把
$checked
设置为true。

您的原始
$\u POST
值是什么?var\u dump是您的朋友:)不难判断未选中的复选框不是false。还没定检查
=
==
$\u POST
值之间的差异是字符串。试试这个有趣的例子
var\u dump('false'==true)
查看结果:)添加到此答案:检查
==“true”
也可以