0

Problemas com check box no update

criado por Mateus da Silva Pessanha em 03/09/2010 5:35pm
Tenho um script que executa um select em um campo que contem os meses de um ano (não necessáriamente todos).
Este script tem um grupo de checkboxs que devem ser checkados de acordo com os meses informados no campo do select citado acima, mas os outros meses tambem devem aparecer no formulário, porém sem estarem checkados.
Segue abaixo o que tentei fazer até o momento.

<?php
include 'conexao.php';

$id = $_POST['id'];
$result = mysql_query("select *
from calendar
where CALID= ".$id."");
$row = mysql_fetch_array($result);

$months = explode(",",$row['MONTH']);

foreach($months as $key=>$value) {

if ($months[$key] == 1){
echo "<input type='checkbox' name='months[]' id='1' value='$value' checked='checked' /> Jan ";
}else {
echo "<input type='checkbox' name='months[]' id='1' value='1' /> Jan ";
}
if ($months[$key] == 2){
echo "<input type='checkbox' name='months[]' id='2' value='$value' checked='checked' /> Feb ";
}else {
echo "<input type='checkbox' name='months[]' id='2' value='2' /> Feb ";
}
if ($months[$key] == 3){
echo "<input type='checkbox' name='months[]' id='3' value='$value' checked='checked' /> Mar ";
}else {
echo "<input type='checkbox' name='months[]' id='3' value='3' /> Mar ";
}
if ($months[$key] == 4){
echo "<input type='checkbox' name='months[]' id='4' value='$value' checked='checked' /> Apr ";
}else {
echo "<input type='checkbox' name='months[]' id='4' value='4' /> Apr ";
}
if ($months[$key] == 5){
echo "<input type='checkbox' name='months[]' id='5' value='$value' checked='checked' /> May ";
}else {
echo "<input type='checkbox' name='months[]' id='5' value='5' /> May ";
}
if ($months[$key] == 6){
echo "<input type='checkbox' name='months[]' id='6' value='$value' checked='checked' /> Jun <br>";
}else {
echo "<input type='checkbox' name='months[]' id='6' value='6' /> Jun <br>";
}
if ($months[$key] == 7){
echo "<input type='checkbox' name='months[]' id='7' value='$value' checked='checked' /> Jul";
}else {
echo "<input type='checkbox' name='months[]' id='7' value='7' /> Jul";
}
if ($months[$key] == 8){
echo "<input type='checkbox' name='months[]' id='8' value='$value' checked='checked' /> Aug ";
}else {
echo "<input type='checkbox' name='months[]' id='8' value='8' /> Aug ";
}
if ($months[$key] == 9){
echo "<input type='checkbox' name='months[]' id='9' value='$value' checked='checked' /> Sep ";
}else {
echo "<input type='checkbox' name='months[]' id='9' value='9' /> Sep ";
}
if ($months[$key] == 10){
echo "<input type='checkbox' name='months[]' id='10' value='$value' checked='checked' /> Oct ";
}else {
echo "<input type='checkbox' name='months[]' id='10' value='10' /> Oct ";
}
if ($months[$key] == 11){
echo "<input type='checkbox' name='months[]' id='11' value='$value' checked='checked' /> Nov ";
}else {
echo "<input type='checkbox' name='months[]' id='11' value='11' /> Nov ";
}
if ($months[$key] == 12){
echo "<input type='checkbox' name='months[]' id='12' value='$value' checked='checked' /> Dec ";
}else {
echo "<input type='checkbox' name='months[]' id='12' value='12' /> Dec ";
}
}
?>

Lista de Respostas:

+1
03/09/2010 10:41pm
(~14 anos atrás)
Mateus, aparentemente o seu SELECT consulta um único registro do BD, que devolve na coluna "MONTH" um conjunto de valores separados por vírgula.

Seu código está percorrendo estes meses e criar sempre checkbox marcados, afinal, no foreach abaixo:
foreach($months as $key => $value) {
$months[$key] é a mesma coisa que $value.

Se você quer monstrar 12 meses, mas marcar apenas aqueles que estão em $months, então faz assim:
$nomes_meses = array(1 => 'Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez');
$id = mysql_real_escape_string($_POST['id']);
$result = mysql_query("select MONTH from calendar where CALID= ".$id."");
$row = mysql_fetch_array($result);

$months = explode(',',$row['MONTH']);

for ($m = 1; $m <= 12; $m++) {
    $checked = in_array($m, $months) ? ' checked="checked"' : '';
    echo '<label>';
    echo "<input type='checkbox' name='months[]' id='{$m}' value="{$m}"{$checked} /> ";
    echo $nomes_meses[$m];
    echo '</label>';
}

0
08/09/2010 9:36am
(~14 anos atrás)
O brigado Rubens, ficou muito bacana.

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)