2013-03-22 59 views
-1

空()函数,我写了这个代码:复选框选中得到即使值为空,在PHP

<?php if (!empty($isLocal)) {echo "checked";} ?> 

听起来很简单?如果$ isLocal不是空的,那么检查它,否则不检查它。

然而,它不断检查它,尽管空值!这有什么问题?

我不得不在页面上重复几次isLocal,它仍然是一样的 - 它仍然是空的,但复选框被选中。是的,我查看了HTML代码,看看“checked”是否写入,而不是。它只在PHP逻辑内打印“checked”。

的HTML代码是这样的

Enable this machine:<input type="checkbox" value="1" name="isLocal" 
<?php if (!empty($isLocal)) {echo "checked";} ?> /> 

一件事 - 我从XML文件中使用SimpleXML加载isLocal。

$configurations = simplexml_load_file('configs.xml'); 

foreach ($configurations->xpath("/configurations") as $t) 
{ 

$isLocal=$t->isLocal; 

} 

但是,你看,问题是它可以看到它是否为空或有值。我不能使用“isset()”,因为它总是设置为空值。

+3

由于HTML没有显示检查的属性,所以你会回显出来,这听起来像别的东西可能会切换复选框 - 该页面上是否有任何可能改变内容的JavaScript? – ernie 2013-03-22 22:02:18

+0

没有Javascript。这就是为什么我感到困惑。如果我回显“$ isLocal”,并且在复选框之前显示空值,那么在应该取消选中时,复选框仍会被检查。复选框后,我也回复$ isLocal,它仍然是空的。 – netrox 2013-03-25 17:23:45

+0

由于您在查看源代码时看到的呈现HTML未显示“checked”,因此其他内容正在检查该复选框。这可能是您的浏览器会话管理,JavaScript或其他。这不太可能是你的PHP的问题。 – ernie 2013-03-25 17:55:44

回答

0

刚刚获悉,通过输入“的var_dump($ isLocal)”这表明,它是一个对象,而不是一个简单的数据类型!

这样做加载XML对象后:

$isLocal=(string)$t->isLocal; 

解决了这个问题。

0

这样做:

<form action="checked.php" method="post"> 
<input type="checkbox" value="1" name="isLocal"/> Enable this machine 
<input type="submit" name="formSubmit" value="Submit" /> 
</form> 

<?php 
if (!empty($_POST['isLocal'])) 
{echo "checked";} 
?>