Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Roger Tas

Preso em array de checkbox

Recommended Posts

Beleza galera?

 

Estou numa situação um pouco complicada com checkbox. Vou tentar explicar detalhadamente.

 

Tenho um quantidade de 30 checkbox e todos começam assim:

 

<input type="checkbox" name="dia[]" id="01" value="01" />
<input type="checkbox" name="dia[]" id="02" value="02" />
//... e assim por diante até 30

Sei que é errado usar vários IDs, navegadores como IE 6.0 não reconhece, mas como é pra um trabalho interno, não terei problemas.

 

Então, com o resultado dos checkbox selecionados eu uso diversar funções pelo array dia[]. Depois de todo código feito e tudo mais resolvi então trabalhar em manter a opção checked. Ai sim fui supreendido novamente: Se o cara clicar apenas no dia 1, eu poderia usar dentro do código HTML

 

<input type="checkbox" name="dia[]" id="01" value="01" <?php if ($_POST['dia'][0] == "") {echo $checked};?> />
Só que se o cara clicar no número 2 somente o array dias[0] será 2 e lasca com meu checked, acaba marcando a checkbox errada.

 

Por fim, to perdidão, tentei buscar o resultado pelo id e não consigo nem com reza braba.

Alguém tem alguma sugestão? Eu poderia fazer uma penca de if e outra penca de variáveis pra resolver, mas acredito que não seja o caminho correto.

 

 

Grato pela ajuda,

 

 

Roger

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize um loop:

<?php
for($i = 1; $i <= 30; $i++ ){
$post = isset($_POST['dia'][$i-1]) ? $_POST['dia'][$i-1] : null;
?>
<input type="checkbox" name="dia[]" id="<?php echo $i; ?>" value="<?php echo $i; ?>" <?php if($post) {  echo 'checked="checked"; } ?> />
<?php
}
?>

Era algo como isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize um loop:

<?php
for($i = 1; $i <= 30; $i++ ){
$post = isset($_POST['dia'][$i-1]) ? $_POST['dia'][$i-1] : null;
?>
<input type="checkbox" name="dia[]" id="<?php echo $i; ?>" value="<?php echo $i; ?>" <?php if($post) {  echo 'checked="checked"; } ?> />
<?php
}
?>

Era algo como isso?

 

Vou tentar, mas acho que não posso alterar o ID.

O input completo é:

 

<input type="checkbox" name="dia[]" id="01" value="01" /><label for="01" class="opt">01</label>

Roda um JS baseado no ID e o texto desse ID é 01.

Com esse código, não vai colocar id="02" value "02" e no texto ao lado do checkbox num vai ficar 01?

 

Vou tentar e te aviso

 

grato,

 

Roger

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução que o lucaswxp deu foi a que me serviu melhor, porém tive que fazer uma boa parte braçal

 

Ficou assim:

 

Antes dos input

 

<?php for ($i = 0; $i <= 10;) {
	if ($_POST['dia'][$i] == "01") $marca01 = "checked";
	if ($_POST['dia'][$i] == "02") $marca02 = "checked";
	if ($_POST['dia'][$i] == "03") $marca03 = "checked";
	if ($_POST['dia'][$i] == "04") $marca04 = "checked";
	if ($_POST['dia'][$i] == "05") $marca05 = "checked";
// ... até 31 peão
$i++;
	}
	?>

Depois nos input

 

<input type="checkbox" name="bolas[]" id="01" value="01" <?php echo $marca01 ?>/><label for="01" class="opt">01</label>
                <input type="checkbox" name="dia[]" id="02" value="02" <?php echo $marca02 ?>/><label for="02" class="opt">02</label>
                <input type="checkbox" name="dia[]" id="03" value="03" <?php echo $marca03 ?>/><label for="03" class="opt">03</label>
                <input type="checkbox" name="dia[]" id="04" value="04" <?php echo $marca04 ?>/><label for="04" class="opt">04</label>
                <input type="checkbox" name="dia[]" id="05" value="05" <?php echo $marca05 ?>/><label for="05" class="opt">05</label>
// ... e mais chicote, até 31. Imagina se fosse até 10.000

 

Bom, resolveu né?

 

Obrigado galera.

Compartilhar este post


Link para o post
Compartilhar em outros sites

q tal automatizar isso

tenta ae

<?php 
$qtde_checks = 30;//quantidade de checkboxs
for ($i = 0; $i < $qtde_checks; $i++) {
   $marca[$i] = ($_POST['dia'][$i] == ($i+1)) = "checked='checked'" : "";
   echo "<input type='checkbox' name='dia[]' id=".($i+1)." value=".($i+1)." {$marca[$i]}><label for=".($i+1)." class='opt'>".$i+1)."</label>";         
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei ele separado só pra ver como funciona, mas ta dando erro:

Parse error: syntax error, unexpected '=' in ...\teste.php on line 4

 

q tal automatizar isso

tenta ae

<?php 
$qtde_checks = 30;//quantidade de checkboxs
for ($i = 0; $i < $qtde_checks; $i++) {
   $marca[$i] = ($_POST['dia'][$i] == ($i+1)) = "checked='checked'" : "";
   echo "<input type='checkbox' name='dia[]' id=".($i+1)." value=".($i+1)." {$marca[$i]}><label for=".($i+1)." class='opt'>".$i+1)."</label>";         
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

claro q vai dá errado coloquei a sintaxe errada

muda essa linha

$marca[$i] = ($_POST['dia'][$i] == ($i+1)) = "checked='checked'" : "";
para essa

$marca[$i] = ($_POST['dia'][$i] == ($i+1)) ? "checked='checked'" : "";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troquei e deu erro na linha 5.

Parse error: syntax error, unexpected ')', expecting ',' or ';' in \...teste.php on line 5
A linha:

echo "<input type='checkbox' name='dia[]' id=".($i+1)." value=".($i+1)." {$marca[$i]}><label for=".($i+1)." class='opt'>".$i+1)."</label>";

 

Então, adicionei o que parênteses que faltava em

 

class='opt'>".$i+1)

echo "<input type='checkbox' name='dia[]' id=".($i+1)." value=".($i+1)." {$marca[$i]}><label for=".($i+1)." class='opt'>".($i+1)."</label>";

"Oia" aparentemente funcionou que é uma beleza, vou incorporar no código original do meu e ver como vai ficar. Aviso aqui.

Eu usava print pra colocar esses códigos html e só me lascava com as barras invertidas \. echo parece funcionar bem melhor.

 

De qualquer forma, seu código além de ser a luz no túnel do problema, mostrou que da pra cortar muito mais do código atual.

 

Muito obrigado mesmo Victor Cometti.

 

Roger.

 

claro q vai dá errado coloquei a sintaxe errada

muda essa linha

$marca[$i] = ($_POST['dia'][$i] == ($i+1)) = "checked='checked'" : "";
para essa

$marca[$i] = ($_POST['dia'][$i] == ($i+1)) ? "checked='checked'" : "";

Quase funcionou, apesar do texto ao lado do checkbox ser números, os 9 primeiro tem que ter duas casa: 01, 02, 03...

 

<input type="checkbox" name="dia[]" id="02" value="02" <?php echo $marca02 ?>/><label for="02" class="opt">02</label>

No caso o seu código php me da tudo com uma casa decimal somente: 1, 2, 3, 4...

 

E a opção de ficar marcado automaticamente não rolou...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

já que você ker zero "0" antes nos numeros de 1 a 9 tae!!

<?php 
$qtde_checks = 30;//quantidade de checkboxs
for ($i = 0; $i < $qtde_checks; $i++) {
   $marca[$i] = ($_POST['dia'][$i] == ($i+1)) ? "checked='checked'" : "";
   $id = $i < 9 ? "0".($i+1) : ($i+1);        
   echo "<input type='checkbox' name='dia[]' id={$id} value={$id} {$marca[$i]}><label for={$id} class='opt'>{$id}</label>";         
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que é errado usar vários IDs, navegadores como IE 6.0 não reconhece...

hein???

O problema tá só em usar ID numérico, use id's alfanuméricos

 

faça esse teste simples:

 

<style type="text/css" media="all">
input { display: block; }
</style>
<form action="" method="post">
<?php 

for($i = 0; $i < 30; $i++){
$check = isset($_POST['opt'.$i])? 'checked="checked" ': '';
echo '<input type="checkbox" name="opt'.$i.'" id="opt'.$i.'" value="'.$i.'" '.$check.'/>' . PHP_EOL;
}

?>
<button type="submit">OK</button>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

já que você ker zero "0" antes nos numeros de 1 a 9 tae!!

<?php 
$qtde_checks = 30;//quantidade de checkboxs
for ($i = 0; $i < $qtde_checks; $i++) {
   $marca[$i] = ($_POST['dia'][$i] == ($i+1)) ? "checked='checked'" : "";
   $id = $i < 9 ? "0".($i+1) : ($i+1);        
   echo "<input type='checkbox' name='dia[]' id={$id} value={$id} {$marca[$i]}><label for={$id} class='opt'>{$id}</label>";         
}
?>

Victor Cometti, o seu funcionou beleza, só que pra manter os checkbox ticados ocorre o seguinte:

Se eu selecionar 1,2,3,4,5 e enviar, eles vão ficar ticados. Agora se eu selecionar 2,3,4,5,6 ele ja não mantém ticado. Aparenta depender de ordem crescente.

1,2,3,5,15 Só vai manter ticado: 1,2,3.

Muito obrigado.

 

 

 

 

Sei que é errado usar vários IDs, navegadores como IE 6.0 não reconhece...

hein???

O problema tá só em usar ID numérico, use id's alfanuméricos

 

faça esse teste simples:

 

<style type="text/css" media="all">
input { display: block; }
</style>
<form action="" method="post">
<?php 

for($i = 0; $i < 30; $i++){
$check = isset($_POST['opt'.$i])? 'checked="checked" ': '';
echo '<input type="checkbox" name="opt'.$i.'" id="opt'.$i.'" value="'.$i.'" '.$check.'/>' . PHP_EOL;
}

?>
<button type="submit">OK</button>
</form>

 

Testar ele seco como está me mostrou os checkboxes sem texto ao lado mas manteve os checkbox marcados. Vou testar no código completo a partir dele.

Muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.