请仔细阅读我的问题,这有点棘手。
以下功能用于显示是否在我的“添加”和“编辑”记录页面上的表单中选中了复选框。这里没问题。
问题: 假设我有两个字段'name'和'enabled'。只有经过验证的字段才是“名称”。 当用户编辑现有记录并输入无效的“名称”时,表单将得到验证。如果用户取消选中“启用”复选框(先前值为$ field_record_value =“1”,从数据库设置),则复选框值仍设置为“1”,因为它仍然来自数据库。
问题: 当数据库记录($ field_record_value)设置为1时,如何将值设置为“0”?
我知道问题在于此代码:
$is_checked = isset($field_record_value) ? $field_record_value : '0';
我似乎无法弄明白,也许是因为我花了大约2个小时才开始锻炼,我的大脑被炸了......但我离题了:)
//------------------------------------------------
// Function to check if checkbox is selected
//------------------------------------------------
function form_checkbox_selected($field_name, $page = 'add', $field_record_value = '0')
{
if(!empty($_POST[$field_name]) && intval($_POST[$field_name]))
{
$is_checked = '1';
}
else
{
if($page ==' edit')
{
$is_checked = isset($field_record_value) ? $field_record_value : '0';
}
else
{
$is_checked = '0';
}
}
return $is_checked;
}
答案 0 :(得分:0)
问题是你期望一个复选框的未经检查的值,浏览器永远不会为未选中的复选框发送一个值,所以你可以知道一个复选框的唯一方法是在它的未选中状态是假设,你可以仅在表单提交后才假设。我会像这样重写你的函数:
function form_checkbox_selected /// line wrapped for SO read-ability
($field_name, $page = 'add', $form_submitted = false, $field_record_value = '0'){
if ( form_submitted ) {
$is_checked = !empty($_POST[$field_name]) ? 1 : 0;
}
else if ( $page == 'edit' ) {
/// isset is not required because it will always
/// be defined by $field_record_value = '0' in default params.
$is_checked = $field_record_value ? 1 : 0;
}
else {
$is_checked = 0;
}
return $is_checked;
}
为了判断表单是否已提交,通常最好有一个您知道将始终发送的隐藏字段,或者您可以为提交按钮定义名称。
<form>
<input name="sent" type="hidden" value="1" />
</form>
<form>
<input name="sent" type="submit" value="Submit Form" />
</form>
然后在php端你可以调用你的函数:
form_checkbox_selected(
'my_field', 'edit', !empty($_POST['sent']), $db['my_field']
);
现在这意味着你的php可以更好地假设当没有数据实际传入时字段的状态是什么。