PHP if / else语句表现得很奇怪

时间:2018-02-28 01:42:17

标签: php

我是新的php相关性,只测试了一些代码。奇怪的是代码既可以/不可行。代码应检查MySQLi数据库以确定复选框的状态,然后将该状态应用于复选框。代码目前所做的是仅根据if条件的值指定复选框状态,而不管MySQLi数据库值如何。

以下是html页面的代码,它是导致问题的底部附近的if语句;



<?php
	include_once 'includes/dbh.inc.php';
?>

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<?php

	$sql_1 = "SELECT * FROM test2;";
	$results = mysqli_query($conn, $sql_1) or die('Error getting data.');
	
	echo(string) "<table>";
	echo "<tr><th>state</th><th>id</th></tr>";
	
	while($row = mysqli_fetch_array($results, MYSQLI_ASSOC)) {
		echo "<tr><td>";
		echo $row['state'];
		echo "</td><td>";
		echo $row['id'];
		echo "</td></tr>";
		}
		
	echo "</table>";
?>

<form action="includes/checkbox.inc.php" method="post">
	<input type="hidden" name="checkbox1" value="0">
	<input type="checkbox" name="checkbox1" value="1"
	
<?php
	$sql_2 = mysqli_query($conn, "SELECT state FROM test2 WHERE id = '0'") or die('Error getting data.');
	if ($sql_2 == "0") {
      echo "checked";
   } else {
      echo " ";
   }
   mysqli_close($conn);	
?>	
	> Item 1<br>
	
	
	<input type="hidden" name="checkbox2" value="0">
	<input type="checkbox" name="checkbox2" value="1" checked> Item 2<br>
	<input type="submit" name="Submit" value="Submit">
</form>
<br>
<a href="http://localhost/testsite2.com/includes/update.inc.php">Reset</a><br>


</body>
</html>
&#13;
&#13;
&#13;

此代码的奇怪之处在于if ($sql_2 == "0")导致复选框保持未选中状态,但将0更改为1,if ($sql_2 == "1")会导致复选框保持选中状态。无论数据库显示什么结果,两种结果都无关紧要。

我知道所有其他代码都有用,因为当我选中复选框并提交时,它会更新数据库并正确显示(反之亦然)。

如果有人知道if ($sql_2 == "0")无效的原因,请告知我们。我甚至检查了其他堆栈溢出帖子,据我所知,所有内容都应该正确编码。

编辑:

我应该说在上面的问题中,将=更改为==或撤销订单并不能解决问题。 if语句仍然只返回else语句。

我已完成其他研究,并认为该问题与使用mysqli_query检索数据有关,因为它应该是mysqli_fetch_row

2 个答案:

答案 0 :(得分:2)

if ($sql_2 = "0")会将$ sql2的值设为'0',此条件将始终为真

将其更改为

if ($sql_2 == "0")

以防止意外分配,您可以执行以下操作

if ("0"==$sql_2)  

答案 1 :(得分:0)

问题未解决

解决方案是在php中添加mysqli_data_seek(),下面是工作代码。

&#13;
&#13;
<?php
include_once 'includes/dbh.inc.php';
?>

<!DOCTYPE html>
<html>
<head>
</head>
<body>

<?php

$sql_1 = "SELECT * FROM test2;";
$result_1 = mysqli_query($conn, $sql_1) or die('Error getting data.');

echo(string) "<table>";
echo "<tr><th>state</th><th>id</th></tr>";
while($row = mysqli_fetch_array($result_1, MYSQLI_ASSOC)) {
	echo "<tr><td>";
	echo $row['state'];
	echo "</td><td>";
	echo $row['id'];
	echo "</td></tr>";
	}	
echo "</table>";

$query_1 = "SELECT state, id FROM test2 ORDER BY id";
$sql_3 = mysqli_query($conn, $query_1) or die('Error getting data.');
if ($result_2 = $sql_3) {
	mysqli_data_seek($result_2, 0);
	$row_1 = mysqli_fetch_row($result_2);
}
if ($result_3 = $sql_3) {
	mysqli_data_seek($result_3, 1);
	$row_2 = mysqli_fetch_row($result_3);
}
?>

<form action="includes/checkbox.inc.php" method="post">
<input type="hidden" name="checkbox1" value="0">
<input type="checkbox" name="checkbox1" value="1"
<?php
if ($row_1[0]=="1") {
  echo "checked";
} else {
  echo " ";
}	
?>
> Item 1<br>


<input type="hidden" name="checkbox2" value="0">
<input type="checkbox" name="checkbox2" value="1"
<?php
if ($row_2[0]=="1") {
  echo "checked";
} else {
  echo " ";
}	
?>
> Item 2<br>
<input type="submit" name="Submit" value="Submit">
</form>
<br>
<a href="http://localhost/testsite2.com/includes/update.inc.php">Reset</a>        
<br>
<?php
mysqli_close($conn);	
?>
</body>
</html>
&#13;
&#13;
&#13;