2010-12-29 38 views

Trả lời

238

Nếu trang HTML của bạn trông như thế này:

<input type="checkbox" name="test" value="value1"> 

Sau khi nộp đơn, bạn có thể kiểm tra xem nó với:

isset($_POST['test']) 

hoặc

if ($_POST['test'] == 'value1') ... 
+45

Hộp kiểm cũng có thể có giá trị 'on', khi chúng được chọn. Do đó, tính tương thích sẽ dễ dàng hơn khi sử dụng 'isset ($ _ POST ['checkboxName'])'. – Damiqib

+9

Giá trị "bật" có thể được hỗ trợ bởi một số trình duyệt khi thuộc tính giá trị không được đặt, nhưng nói chung tốt hơn là đặt thuộc tính giá trị và để kiểm tra giá trị đó khi gửi. –

+2

Liệu 'Value1' có thay đổi nếu hộp được chọn không? – DeveloperACE

2

Bạn có thể kiểm tra giá trị tương ứng như được đặt và không trống trong mảng $ _POST hoặc $ _GET tùy thuộc vào hành động của biểu mẫu của bạn.

ví dụ: Với một hình thức POST sử dụng một name của "test" (ví dụ: <input type="checkbox" name="test">, bạn muốn sử dụng:

if(isset($_POST['test']) { 
    // The checkbox was enabled... 

} 
75

Zend Framework sử dụng một hack thoải mái trên hộp kiểm, mà bạn cũng có thể tự làm:

Mỗi hộp kiểm được tạo sẽ được liên kết với trường bị ẩn cùng tên, được đặt ngay trước hộp kiểm và với giá trị là "0". Nếu hộp kiểm của bạn là giá trị "1", bạn sẽ luôn nhận được Giá trị '0' hoặc '1' trong kết quả GET hoặc POST

<input type="hidden" name="foo" value="0" /> 
<input type="checkbox" name="foo" value="1"> 
+0

Tôi cũng nhận thấy về điều đó, nhưng tôi cảm thấy an toàn khi sử dụng nó: Zend Framework cũng vậy! – HPM

+0

Điều này thật thú vị. Nhưng có khả năng nhỏ nào mà tác nhân người dùng có thể gửi giá trị đầu tiên thay vì giá trị cuối cùng, giả sử hộp kiểm được chọn không? – rybo111

+0

@ rybo111, đối với tác nhân người dùng, tôi không nghĩ như vậy, nhưng đối với trình phân tích cú pháp biểu mẫu javascript tùy chỉnh, bạn nên cẩn thận. – regilero

33

Hãy html của bạn cho hộp kiểm của bạn sẽ như thế nào

<input type="checkbox" name="check1"> 

Sau đó, sau khi gửi mẫu của bạn, bạn cần phải kiểm tra như

if (isset($_POST['check1'])) { 

    // Checkbox is selected 
} else { 

    // Alternate code 
} 

Giả sử rằng check1 nên hộp kiểm của bạn name.And nếu mẫu của bạn phương thức gửi là GET thì bạn cần phải kiểm tra với các biến số $_GET như

if (isset($_GET['check1'])) { 

    // Checkbox is selected 
} 
+5

Đó là một hình đại diện khá đẹp. –

2

Tìm hiểu về isset được tích hợp sẵn trong "chức năng" có thể được sử dụng trong câu lệnh if cho biết nếu một biến đã được sử dụng hoặc thiết lập

Ví dụ:

if(isset($_POST["testvariabel"])) 
    { 
     echo "testvariabel has been set!"; 
    } 
2

Vâng, các ví dụ trên chỉ làm việc khi bạn muốn chèn một giá trị, không hữu ích cho CẬP NHẬT giá trị khác nhau vào các cột khác nhau, vì vậy đây là mẹo nhỏ của tôi để cập nhật:


//EMPTY ALL VALUES TO 0 
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0'; 
      $stmtMU = $db->prepare($queryMU); 
      $stmtMU->execute(); 
if(!empty($_POST['check_menus'])) { 
    foreach($_POST['check_menus'] as $checkU) { 
try { 
//UPDATE only the values checked 
    $queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1'; 
      $stmtMU = $db->prepare($queryMU); 
      $stmtMU->execute(); 
     } catch(PDOException $e) { 
      $msg = 'Error: ' . $e->getMessage();} 

     } 
} 
<input type="checkbox" value="menu_news" name="check_menus[]" /> 
<input type="checkbox" value="menu_gallery" name="check_menus[]" /> 

....

Bí mật chỉ cập nhật tất cả VALUES trước (trong trường hợp này là 0) và vì sẽ chỉ gửi giá trị đã chọn, có nghĩa là mọi thứ bạn cần phải được đặt thành 1, vì vậy mọi thứ bạn nhận được đặt nó thành 1.

Ví dụ là PHP nhưng áp dụng cho mọi thứ.

Hãy vui vẻ :)

37

Khi sử dụng hộp kiểm ở dạng array:

<input type="checkbox" name="food[]" value="Orange"> 
<input type="checkbox" name="food[]" value="Apple"> 

Bạn nên sử dụng in_array():

if(in_array('Orange', $_POST['food'])){ 
    echo 'Orange was checked!'; 
} 

Nhớ kiểm tra mảng được thiết lập đầu tiên, chẳng hạn như:

if(isset($_POST['food']) && in_array(... 
+0

Rất cám ơn, đã tìm kiếm chính xác điều này! – Telion

0

Để kiểm tra xem một hộp kiểm được kiểm tra sử dụng rỗng()

Khi một mẫu được gửi, hộp kiểm sẽ LUÔN được thiết lập, vì TẤT CẢ POST biến sẽ được gửi với biểu mẫu.

Kiểm tra xem hộp kiểm được kiểm tra với trống như sau:

//Check if checkbox is checked  
if(!empty($_POST['checkbox']){ 
#Checkbox selected code 
} else { 
#Checkbox not selected code 
} 
1
$is_checked = isset($_POST['your_checkbox_name']) && 
       $_POST['your_checkbox_name'] == 'on'; 

Short circuit evaluation sẽ chăm sóc để bạn không truy cập your_checkbox_name khi nó không được nộp.

6
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0; 
+0

rất nhanh và rất thông minh –

-3
<?php 

if(isset($_POST['nameCheckbox'])){ 
    $_SESSION['fr_nameCheckbox'] = true; 
} 

?> 

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){ 
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']); 
} 

?> 
+0

Chào mừng bạn đến với Stack Overflow! Mặc dù đoạn mã này có thể giải quyết được sự cố, nhưng nó không giải thích tại sao hoặc cách nó trả lời câu hỏi. Vui lòng [đưa ra giải thích cho mã của bạn] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers), vì điều đó thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. ** Người đánh cờ/người đánh giá: ** [Đối với các câu trả lời chỉ có mã như câu trả lời này, bạn không nên xóa!] (// meta.stackoverflow.com/a/260413/2747593) –

1

Một tấm séc boolean Minimalistic với vị trí công tắc giữ

<?php 

$checked = ($_POST['foo'] == ' checked'); 

?> 

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>> 
+1

Khi đưa ra câu trả lời, câu trả lời là thích hợp hơn để cung cấp cho [một số giải thích là tại sao câu trả lời của bạn] (http://stackoverflow.com/help/how-to-answer) là một. Điều này đặc biệt đúng khi trả lời một câu trả lời khác của * VERY * 11 câu trả lời khác. –

+0

Thật tuyệt khi bạn nhận ra sự cần thiết của hộp kiểm để giữ lại trạng thái của nó. Tuy nhiên, mã của bạn để làm điều này là không chính xác. –

1

Bạn có thể làm điều đó với thời gian ngắn nếu:

$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0; 

hoặc qua các nhân PHP7 mới Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0; 
0

Tôi đã sử dụng thủ thuật này trong vài năm và nó hoạt động hoàn hảo mà không gặp bất kỳ vấn đề nào đối với tình trạng kiểm tra/bỏ chọn trong khi sử dụng với PHP và Cơ sở dữ liệu.

HTML: (ví Add Trang)

<input name="status" type="checkbox" value="1" checked> 

Gợi ý: loại bỏ "checkbox" nếu bạn muốn hiển thị nó như không được kiểm soát theo mặc định

HTML Code: (ví Edit Page)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>> 

PHP Code: (sử dụng cho Add/Edit trang)

$status = $_POST['status']; 
if ($status == 1) { 
$status = 1; 
} else { 
$status = 0; 
} 

Gợi ý: Sẽ luôn có giá trị trống trừ khi người dùng đã chọn nó. Vì vậy, chúng tôi đã có mã PHP để bắt nó khác giữ giá trị là 0. Sau đó, chỉ cần sử dụng biến $ status cho cơ sở dữ liệu.

0
<?php 

    if (isset($_POST['add'])) { 

    $nama  = $_POST['name']; 
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked"; 

    echo "Name: {$nama} <br />"; 
    echo "Subscribe: {$subscribe}"; 

    echo "<hr />"; 

    } 

?> 

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" > 

    <input type="text" name="name" /> <br /> 
    <input type="checkbox" name="subscribe" value="news" /> News <br /> 

    <input type="submit" name="add" value="Save" /> 

</form> 
Các vấn đề liên quan