As caixas de seleção geralmente representam dados binários armazenados no banco de dados como valores Sim / Não, S / N ou 1/0. As caixas de seleção HTML têm natureza ruim para enviar valor ao servidor somente se a caixa de seleção estiver marcada! Isso significa que o script do servidor em outro site deve saber com antecedência quais são todas as caixas de seleção possíveis na página da Web para poder armazenar valores positivos (marcados) ou negativos (não marcados). Na verdade, apenas valores negativos são problemáticos (quando o usuário desmarca o valor previamente verificado (pré) - como o servidor pode saber disso quando nada é enviado se não souber antecipadamente que esse nome deve ser enviado). Se você possui um script do lado do servidor que cria dinamicamente o script UPDATE, há um problema porque você não sabe quais caixas de seleção devem ser recebidas para definir o valor Y para as verificadas e o valor N para as desmarcadas (não recebidas).
Como eu armazeno os valores 'Y' e 'N' no meu banco de dados e os represento por meio de caixas de seleção marcadas e desmarcadas na página, adicionei um campo oculto para cada valor (caixa de seleção) com os valores 'Y' e 'N' e utilizo as caixas de seleção apenas para visual representação e use a função JavaScript simples check () para definir o valor de se de acordo com a seleção.
<input type="hidden" id="N1" name="N1" value="Y" />
<input type="checkbox"<?php if($N1==='Y') echo ' checked="checked"'; ?> onclick="check(this);" />
<label for="N1">Checkbox #1</label>
use um ouvinte JavaScript onclick e chame a função check () para cada caixa de seleção na minha página da web:
function check(me)
{
if(me.checked)
{
me.previousSibling.previousSibling.value='Y';
}
else
{
me.previousSibling.previousSibling.value='N';
}
}
Dessa forma, os valores 'Y' ou 'N' são sempre enviados para o script do lado do servidor, ele sabe quais são os campos que devem ser atualizados e não há necessidade de converter o valor do checbox "on" em 'Y' ou a caixa de seleção não recebida em 'N '
NOTA: espaço em branco ou nova linha também é um irmão, então aqui eu preciso de .previousSibling.previousSibling.value. Se não houver espaço entre, apenas .previousSibling.value
Você não precisa adicionar explicitamente o ouvinte do onclick como antes, pode usar a biblioteca jQuery para adicionar dinamicamente o ouvinte de cliques com a função para alterar o valor de todas as caixas de seleção da sua página:
$('input[type=checkbox]').click(function()
{
if(this.checked)
{
$(this).prev().val('Y');
}
else
{
$(this).prev().val('N');
}
});