DouGuAra 0 Denunciar post Postado Março 12, 2012 Senhores, boa tarde. Eu tenho uma aplicação que está funcionando 100%, porém só funciona quando eu uso assim <?php if ($correio == '0' OR $correio == '') { ?> <TD bgcolor="<?php echo $cor ?>"> <input type="text" name="correio[]" value="0"> </TD> <?php } else { ?> <TD bgcolor="<?php echo $cor ?>"> <input type="text" name="correio[]" value="1" checked> </TD> <?php } ?> e recebo na outro página assim <?php include_once('conexao_oficios.php'); if(isset($_POST)){ $count = count($_POST['chave']); $i = 0; while ($i < $count) { $id1 = $_POST['chave'][$i]; $correio = $_POST['correio'][$i]; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1"); ++$i; } } ?> </BODY></HTML> Porém, eu gostaria de usar ele com Checkbox assim <?php if ($correio == '0' OR $correio == '') { ?> <TD bgcolor="<?php echo $cor ?>"><input type="checkbox" name="correio" value="0"> </TD> <?php } else { ?> <TD bgcolor="<?php echo $cor ?>"><input type="checkbox" name="correio" value="1" checked> </TD> <?php } ?> </TR> </TBODY> <?php } ?> Só que quando eu tento receber me da o erro que não é compativel, entendo o erro, fiz várias mudanças porém nada faz funcionar, fiz algo semelhante a $radio=$_POST['N_campo']; if ($radio == 'rnome') { $campo='nome'; } if ($radio == 'rcpf') { $campo='CPF'; } if ($radio == 'rcontrato') { $campo='Contrato'; } if ($radio == 'rvalor') { $campo='Valor'; } Porém nada resolve, alquém poderia me ajudar. Grato. Douglas. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 12, 2012 Seu problema está aqui <input type="checkbox" name="correio" value="0"> <input type="checkbox" name="correio" value="1"> você se esqueceu de colocar o name como array, assim o html entrará em conflito. substitua o name para: <input type="checkbox" name="correio[]" value="0"> <input type="checkbox" name="correio[]" value="1"> Assim você define que o checkbox será um array, e não apenas um input. Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 12, 2012 Então, eu já tinha feito isso <?php if ($correio == '0' OR $correio == '') { ?> <TD bgcolor="<?php echo $cor ?>"> <input type="checkbox" name="correio[]" value="0"> </TD> <?php } else { ?> <TD bgcolor="<?php echo $cor ?>"> <input type="checkbox" name="correio[]" value="1" checked> </TD> <?php } ?> </TR> </TBODY> <?php } ?> ai, a hora que ele vai pra outro páginas da erro nessa linha $correio = $_POST['correio'][$i]; Notice: Undefined offset: 198 in C:\Webserver\Apache\htdocs\Oficios\corr2.php on line 12 Varios erros, só mudando o 198 (que deve ser o número da chave) Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 13, 2012 Você tem que entender que um checkbox funciona diferente de um text field. O text field sempre existe, da forma que, se el não for preenchido, envia o texto em branco. Já um checkbox, só vai enviar quando for selecionado, por isso, você nunca poderá iterar um vetor de checkbox do jeito que estava tentando. Vou lhe dar um exemplo: Suponha que tenha 4 checkbox: <input value='0' type="checkbox" name="checkbox[]" /> <input value='1' type="checkbox" name="checkbox[]" /> <input value='2' type="checkbox" name="checkbox[]" /> <input value='3' type="checkbox" name="checkbox[]" /> Agora, você seleciona somente os campos que possuam o valor 0 e 3, e da um var_dump no post, assim: var_dump( $_POST['checkbox'] ); a saída será: array( 0 => 0, 1 => 3 ); Apesar do valor 3 ser o quarto checkbox, ele está na chave 1, pois você selecionou somente o primeiro e o quarto checkbox. Se você for tentar acessar ele como: $_POST['checkbox'][3] Vai lançar esse notice: Notice: Undefined offset Que significa que a chave do vetor não existe. Para iterar um vetor dinâmico, você deve usar, preferencialmente, um foreach foreach( $_POST['checkbox'] AS $checkbox ) { echo $checkbox; } Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 14, 2012 Grabiel desde já obrigado pela atenção! Olha só, fiz, tudo que você disse, até chegar nesse código aqui. Mas nada. <?php include_once('conexao_oficios.php'); if(isset($_POST)){ $count = count($_POST['chave']); $i = 0; while ($i < $count) { $id1 = $_POST['chave'][$i]; //$correio = $_POST['correio'][$i]; $correio = $_POST['correio']; for($s=0; $i<sizeof($correio); $s++){ $correio = $correio[$s]; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1"); ++$i; } } } ?> </BODY></HTML> Ele não da erro, porém não faz as alterações. Usei o seu foreach mas também não deu. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 14, 2012 o for, nesse caso, está correto. faz assim, altere essa linha: $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1"); para: echo "UPDATE oficios SET inf_correio = '$correio' where Chave = $id1<br />"; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1") or die( odbc_error($conexao) ); O echo é para ver o que aparece no sql, e o die é para, caso houver um erro, mostrar. Caso seja exibida a sql, tente inserir diretamente no bd, e tente inserir diretamente no SGBD Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 14, 2012 Então Gabriel, não vai. Olha só UPDATE oficios SET inf_correio = '0' where Chave = 260 UPDATE oficios SET inf_correio = '0' where Chave = 259 UPDATE oficios SET inf_correio = '0' where Chave = 258 Fatal error: Maximum execution time of 30 seconds exceeded in C:\Webserver\Apache\htdocs\Oficios\corr2.php on line 14 Ai ele entra num loop infinito e não altera o que eu eu deixo como ckeck. ou seja 1 Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 14, 2012 Então Gabriel, não vai. Olha só UPDATE oficios SET inf_correio = '0' where Chave = 260 UPDATE oficios SET inf_correio = '0' where Chave = 259 UPDATE oficios SET inf_correio = '0' where Chave = 258 Fatal error: Maximum execution time of 30 seconds exceeded in C:\Webserver\Apache\htdocs\Oficios\corr2.php on line 14 Ai ele entra num loop infinito e não altera o que eu eu deixo como ckeck. ou seja 1 seu problema está qui for($s=0; $s < sizeof($correio); $s++) você tinha, no lugar de $s, $i, substitua essa linha e teste novamente. Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 14, 2012 seu problema está qui for($s=0; $s < sizeof($correio); $s++) você tinha, no lugar de $s, $i, substitua essa linha e teste novamente. Gabriel, grato desde já. Agora os loopings estão, okay, porém ele não me tras os resultados que foram checados, os inputs estão certos. <input type="checkbox" name="correio[]" value="0"> <input type="checkbox" name="correio[]" value="1" checked> e ele me tras isso UPDATE oficios SET inf_correio = '0' where Chave = 58 UPDATE oficios SET inf_correio = '0' where Chave = 57 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 55 UPDATE oficios SET inf_correio = '0' where Chave = 3 Não sei mais o que fazer, será que na página que ele vai fazer o update tenhamos que definir o valor lá, igual eu fiz com um radio. $radio=$_POST['N_campo']; if ($radio == 'rnome') { $campo='nome'; } Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 14, 2012 você está usando o mesmo nome de variável para duas variáveis. tenta assim: $correios = $_POST['correio']; for( $s = 0; $s < sizeof( $correios ); $s++ ){ $correio = $correios[$s]; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1"); ++$i; } Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 14, 2012 Gabriel, mudei, mas o resultado da input é sempre 0. Olha como ficou $correio1 = $_POST['correio']; for($s=0; $s<sizeof($correio1); $s++){ $correio1 = $correio1[$s]; echo "UPDATE oficios SET inf_correio = '$correio1' where Chave = $id1<br />"; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio1' where Chave = $id1") or die( odbc_error($conexao) ); e olha o resultado. UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 62 UPDATE oficios SET inf_correio = '0' where Chave = 61 UPDATE oficios SET inf_correio = '0' where Chave = 60 UPDATE oficios SET inf_correio = '0' where Chave = 59 UPDATE oficios SET inf_correio = '0' where Chave = 58 UPDATE oficios SET inf_correio = '0' where Chave = 57 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 55 UPDATE oficios SET inf_correio = '0' where Chave = 3 Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 15, 2012 $correio1 = $_POST['correio']; for($s=0; $s<sizeof($correio1); $s++){ $correio1 = $correio1[$s]; novamente, você repetiu os nomes das variáveis. Tem que entender que, aqui, $correio1 $correio1 = $_POST['correio']; necessita ser diferente de, $correio1 (o primeiro que aparece): $correio1 = $correio1[$s]; Você está sobrescrevendo as suas variáveis e, assim, perdendo seus atuais valores. Se você ver bem como eu coloquei no exemplo anterior, verá nomes diferentes para as variáveis. $correios = $_POST['correio']; for( $s = 0; $s < sizeof( $correios ); $s++ ){ $correio = $correios[$s]; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1"); ++$i; } Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 15, 2012 Grande Gabriel. Veja, só, se eu fizer isso que você falou, o sistema roda. Mas veja como fica a chave, ela repete várias vezes e o valor continua sendo "0", só fazendo daquela for o sistema roda todas as chaves. $correios = $_POST['correio']; for( $s = 0; $s < sizeof( $correios ); $s++ ){ $correio = $correios[$s]; echo "UPDATE oficios SET inf_correio = '$correio' where Chave = $id1<br />"; $alterar_dados = odbc_exec($conexao,"UPDATE oficios SET inf_correio = '$correio' where Chave = $id1"); UPDATE oficios SET inf_correio = '0' where Chave = 70 UPDATE oficios SET inf_correio = '0' where Chave = 70 UPDATE oficios SET inf_correio = '0' where Chave = 70 UPDATE oficios SET inf_correio = '0' where Chave = 70 UPDATE oficios SET inf_correio = '0' where Chave = 70 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 63 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 56 UPDATE oficios SET inf_correio = '0' where Chave = 56 Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 15, 2012 Você aplicou de forma errada a lógica errada, e está tendo um resultado errado... Me diga, o que realmente necessita vir no campo inf_correio? Compartilhar este post Link para o post Compartilhar em outros sites
DouGuAra 0 Denunciar post Postado Março 15, 2012 Gabriel Heming Vamos lá, deu um tempo aqui e consegui refazer e agora sim, cheguei num ponto, de todos os reguistro que tenho eu consigo fazer aparecer apenas os que eu selecionei. O problema agora é o seguinte. Eu não consigo pegar o número da chave (id) do banco Nesse exemplo ele me tras as quantidade que eu selecionei e seu valor, ótimo, porém, eu não sei como vou fazer pra pegar a Chave de cada registro. <TD bgcolor="<?php echo $cor ?>" title="<?php echo $pos ?>"><a href="oficios_editar.php?id=<?php echo $id ?>"><?php echo $oficio ?></a></TD> <TD bgcolor="<?php echo $cor ?>" title="Demorou <?php echo $df;?> dias para chegar"><?php echo $data_rec2 ?></TD> <TD bgcolor="<?php echo $cor ?>"><?php echo $data_of2 ?> </TD> <TD bgcolor="<?php echo $cor ?>"><?php echo $ref?></TD> <TD bgcolor="<?php echo $cor ?>"><?php echo $parte?></TD> <input type="hidden" name="chave[]" value="<?php echo $id ?>"> <TD bgcolor="<?php echo $cor ?>"> <input type="checkbox" name="correio[]" value="11"> <?php if (isset($_POST['submit'])) { $correio1 = $_POST["correio"]; $quantidade = count($correio1); echo 'Total encontrados: '.$quantidade.'<br><br>'; if ($quantidade > 0) { echo 'Você escolheu:<br>'; } for ($i=0; $i < $quantidade; $i++) { echo ($i+1) . '- ' . $correio1[$i] . '<br>'; //echo $correio1[$i]; echo "<br><br>" ; } echo "<br><br>" ; } ?> Abraços.. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Março 15, 2012 Gabriel Heming Vamos lá, deu um tempo aqui e consegui refazer e agora sim, cheguei num ponto, de todos os reguistro que tenho eu consigo fazer aparecer apenas os que eu selecionei. O problema agora é o seguinte. Eu não consigo pegar o número da chave (id) do banco Nesse exemplo ele me tras as quantidade que eu selecionei e seu valor, ótimo, porém, eu não sei como vou fazer pra pegar a Chave de cada registro. <TD bgcolor="<?php echo $cor ?>" title="<?php echo $pos ?>"><a href="oficios_editar.php?id=<?php echo $id ?>"><?php echo $oficio ?></a></TD> <TD bgcolor="<?php echo $cor ?>" title="Demorou <?php echo $df;?> dias para chegar"><?php echo $data_rec2 ?></TD> <TD bgcolor="<?php echo $cor ?>"><?php echo $data_of2 ?> </TD> <TD bgcolor="<?php echo $cor ?>"><?php echo $ref?></TD> <TD bgcolor="<?php echo $cor ?>"><?php echo $parte?></TD> <input type="hidden" name="chave[]" value="<?php echo $id ?>"> <TD bgcolor="<?php echo $cor ?>"> <input type="checkbox" name="correio[]" value="11"> <?php if (isset($_POST['submit'])) { $correio1 = $_POST["correio"]; $quantidade = count($correio1); echo 'Total encontrados: '.$quantidade.'<br><br>'; if ($quantidade > 0) { echo 'Você escolheu:<br>'; } for ($i=0; $i < $quantidade; $i++) { echo ($i+1) . '- ' . $correio1[$i] . '<br>'; //echo $correio1[$i]; echo "<br><br>" ; } echo "<br><br>" ; } ?> Abraços.. Bom, se você tem de passar o valor do checkbox, junto com a chave do banco, fica mais fácil de eu te ajudar e de encontrar uma solução. Primeiro passo, associar as coisas. Algo que pouca gente utiliza, no HTML ao menos, é utilizar chaves de vetores (do mesmo modo que o php). E como diabos se faz isso? <input type="checkbox" name="correio[<?php echo $id /** esse é o id do banco **/ ?>]" value="<?php echo $value /** aqui você insere o valor correspondente **/ ?>"> E agora, como se faz para pegar a chave no php????? Do mesmo modo que se pega uma chave no php \o/ $correios = $_POST['correios']; foreach( $correios AS $key => $correio ) { /** $correio é o value que está no checkbox $key é o valor que está dentro dos colchetes ( correio[ esse valor aqui ] ) **/ echo "UPDATE oficios SET inf_correio = '$correio' where Chave = $key<br />"; } É isso cara, mais fácil impossível. Agora é só você adaptar isso ao seu código. Qualquer dúvida, não tenha medo de perguntar. O que eu não quero, é fazer por ti, pois a ideia do fórum é aprender e não ganhar pronto Compartilhar este post Link para o post Compartilhar em outros sites