如何阅读,如果一个复选框被选中在PHP?
当前回答
我已经使用这个技巧好几年了,它在PHP和数据库中使用时,对于选中/未选中的复选框状态完全没有任何问题。
HTML代码:(用于添加页面)
<input name="status" type="checkbox" value="1" checked>
提示:如果您想默认显示为未选中,则删除选中
HTML代码:(用于编辑页面)
<input name="status" type="checkbox" value="1"
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>
PHP代码:(用于添加/编辑页面)
$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}
提示:除非用户选中它,否则将总是空值。我们已经有PHP代码来捕获它,否则保持值为0。然后,简单地使用$status变量为数据库。
其他回答
Zend框架在复选框上使用了一个不错的hack,你也可以自己做:
生成的每个复选框都与一个同名的隐藏字段相关联,位于复选框之前,值为“0”。然后,如果您的复选框为值“1”,则在结果get或POST中始终获得“0”或“1”值
<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1">
根据表单的操作,您可以在$_POST或$_GET数组中检查相应的值是否已设置且非空。
例如:使用一个名为"test"的POST表单(即:<input type="checkbox" name="test">,你会使用:
if(isset($_POST['test']) {
// The checkbox was enabled...
}
filter_input(INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)
好吧,上面的例子只适用于当你想要INSERT一个值时,对于更新不同的值到不同的列并不有用,所以这里是我的更新小技巧:
//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[]" />
....
秘诀是首先更新所有的值(在本例中为0),由于只发送检查过的值,这意味着您得到的所有值都应该设置为1,所以您得到的所有值都设置为1。
例子是PHP,但适用于所有东西。
玩得开心!
如果你的HTML页面是这样的:
<input type="checkbox" name="test" value="value1">
提交表单后,您可以检查它:
isset($_POST['test'])
or
if ($_POST['test'] == 'value1') ...