Roger Tas 0 Denunciar post Postado Maio 13, 2010 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
lucaswxp 22 Denunciar post Postado Maio 13, 2010 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
Roger Tas 0 Denunciar post Postado Maio 13, 2010 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
Victor Cometti 8 Denunciar post Postado Maio 13, 2010 tem um topico aki ensinando, caso tenha mais duvidas http://forum.imasters.com.br/index.php?/topic/125036-pegar-dados-de-checkbox/ Compartilhar este post Link para o post Compartilhar em outros sites
Roger Tas 0 Denunciar post Postado Maio 13, 2010 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
Victor Cometti 8 Denunciar post Postado Maio 13, 2010 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
Roger Tas 0 Denunciar post Postado Maio 13, 2010 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
Victor Cometti 8 Denunciar post Postado Maio 14, 2010 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
Roger Tas 0 Denunciar post Postado Maio 14, 2010 Troquei e deu erro na linha 5. Parse error: syntax error, unexpected ')', expecting ',' or ';' in \...teste.php on line 5A 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
Victor Cometti 8 Denunciar post Postado Maio 14, 2010 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
Evandro Oliveira 331 Denunciar post Postado Maio 14, 2010 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
Roger Tas 0 Denunciar post Postado Maio 14, 2010 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