2013-03-22 24 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";} 
?>