2017-03-03 32 views
3

我在HTML文件中有一個複選框:PHP複選框驗證,如果其他問題

<input type="checkbox" id="kopia" name="kopia" class="form-input" value="0"> 

我試圖傳遞到PHP文件(通過AJAX)一對夫婦的價值觀,其中之一是通過一個複選框(簡體)創建布爾值:

name: "kopia" 
value: document.getElementById("kopia").checked 

如果我通過控制檯檢查,如果檢查和false如果不加以控制它返回true

document.getElementById("kopia").checked 

如果我通過PHP文件檢查,它的行爲是一樣的:

echo $_POST['kopia'] 

但是,當我寫的東西是這樣的:

$checkbox = $_POST['kopia']; 
if ($checkbox){ 
    echo "hey"; 
} else {echo "bye";} 

它總是返回 「哎」,無論如果複選框被選中或沒有。我不明白。即使我做這樣的事情:

$checkbox = $_POST['kopia']; 
if ($checkbox){ 
    echo $checkbox; 
} else {echo "bye";} 

它永遠不會返回「再見」,如果沒有被選中此複選框或沒有,但返回true如果檢查和false如果不加以控制的事情。這件東西已經被盜了幾個小時,這也是幾個小時。任何想法,提示?

+3

我假設你省略了一些改變值的JS。在PHP中,'$ _POST'值總是字符串,所以你的'if'需要布爾值。試試'if($ checkbox ==「true」)'或者使用'0'和'1'。 – AbraCadaver

+0

'if($ checkbox ==「true」)'這是一個等於「true」的字符串;布爾的'if($ checkbox == true)'@AbraCadaver兩種不同的動物;-) –

+1

@ Fred-ii-重新閱讀我的評論。你將不會在'$ _POST'變量中獲得布爾值。這就是爲什麼當OP'echo $ checkbox;'他們得到「true」或「false」 – AbraCadaver

回答

2

你在$_POST['kopia']通過的document.getElementById("kopia").checked返回路過truefalse,但是$_POST值是PHP的字符串。因此,字符串"true"和字符串"false"將在您當前的if條件下評估爲true。您可以檢查字符串值:

$checkbox = $_POST['kopia']; 
if ($checkbox == "true"){ 
    echo $checkbox; 
} else { 
    echo "bye"; 
} 

或者你可以將它們轉換成一個布爾值,見PHP: Validate Filters(感謝Sysix):

$checkbox = filter_var($_POST['kopia'], FILTER_VALIDATE_BOOLEAN); 

或者,如果你設置$_POST['kopia']01,這些字符串將在當前if條件下正確評估。

或者你可以放棄JS值開關,只是檢查是否$_POST['kopia']存在(檢查只有當):

if(isset($_POST['kopia'])) { 
    echo "hey"; 
} else { 
    echo "bye"; 
} 
+0

就是這樣!我更多的是一個js的人,所以我不知道$ _POST值轉換爲字符串。謝謝! –

+1

他也可以將字符串轉換爲一個布爾型,其中'$ checkbox = filter_var($ _ POST ['kopia'],FILTER_VALIDATE_BOOLEAN);' – Sysix

+0

@Sysix:對,我總是忘記一個。 – AbraCadaver

0

你可以做一個簡單的檢查,像這樣:

$isChecked = !empty($_POST['kopia']) ? true : false; 
if($isChecked){ 
    echo 'Checked'; 
} 
else{ 
    echo 'Not checked'; 
} 

空同時檢查isset,如果0等於false,如果1等於true,如果不等於false,則等於false。

希望這有助於。

+0

除非OP的描述和代碼永遠不會爲空。 – AbraCadaver