phs22 0 Denunciar post Postado Novembro 10, 2009 Eu tenho uma dúvida sobre indice de array's, eh o seguinte e um form tenho vários campos com o mesmo nome. Ex. ID Part Jogadores Gols 1 1 Fulano 1 2 2 Beltrano 0 O form está assim <?php $seleciona = mysql_query("Select * from elenco where cp_ativo='S' order by Jogador asc"); $nr_linhas = mysql_num_rows($seleciona); ?> <form id="ficha_tecnica" name="ficha_tecnica" action="add_ficha_confirm" method="post"> <table id="ficha_tecnica" summary="Ficha Técnica 2010"> <thead> <tr> <th colspan="6"> Ficha Técnica 2010 </th> </tr> </thead> <tbody> <tr> <th style="width: 5%;"> ID </th> <th style="width: 5%;"> Part. </th> <th style="width: 30%;"> Jogador </th> <th> Gols </th> <th> Cartões </th> <th> Faltas </th> </tr> <?php $list = 1; while($campo = mysql_fetch_array($seleciona)){ extract($campo); $part = $list++; ?> <tr> <td scope="row"> <?php echo $id; ?> <input type="hidden" name="id[]" value="<?php echo $id; ?>" /> </td> <td> <input name="part[]" type="checkbox" value="<?php echo $part++; ?>"> </td> <td style="font-size:18px"> <strong><?php echo $Jogador; ?></strong> </td> <td> <input name="gols[]" type="text" /> </td> <td> <input name="cp_ct_amarelo[]" type="checkbox" value="S"> <img src="imgs/site/ct_amarelo.png" alt="Amar." /> <input name="cp_ct_azul[]" type="checkbox" value="S"> <img src="imgs/site/ct_azul.png" alt="Azul" /> <input name="cp_ct_vermelho[]" type="checkbox" value="S"> <img src="imgs/site/ct_vermelho.png" alt="Verm." /> </td> <td> <input type="text" name="faltas[]" /> </td> </tr> <?php } ?> <tr> <th colspan="3"> Quadro </th> <th colspan="2"> Competição / Liga </th> <th colspan="1"> Data </th> <tr> <td colspan="3"> <input name="quadro" type="radio" value="1"> 1° Quadro <input name="quadro" type="radio" value="2"> 2° Quadro <input name="quadro" type="radio" value="3"> Seleção </td> <td colspan="2"> <input name="cp_competicao" type="text" id="cp_competicao" style="width: 95%" /> </td> <td colspan="1"> <input name="cp_data" type="text" id="cp_data" maxlength="10" style="width: 90%" /> </td> </tr> </table> <table> <tr> <th style="width: 50px"> Placar </th> <th> Adversário </th> <th> Jogadores </th> <th> Gols </th> <th> Faltas </th> </tr> <tr> <td> <input name="placar_adver" type="text" style="width: 20px" /> </td> <td> <input name="cp_adver" type="text" style="width: 90%" /> </td> <td> <textarea rows="1" name="cp_equipe_adver" style="width: 90%"></textarea> </td> <td> <textarea rows="1" name="cp_gols_vs" style="width:90%"></textarea> </td> <td> <textarea rows="1" name="cp_faltas" style="width: 90%"></textarea> </td> </tr> <tr> <th colspan="2"> Cartões Amarelos </th> <th colspan="2"> Cartões Azuis </th> <th colspan="2"> Cartões Vermelhos </th> </tr> <tr> <td colspan="2"> <textarea rows="1" name="ct_am_vs" style="width: 90%"></textarea> </td> <td colspan="2"> <textarea rows="1" name="ct_az_vs" style="width: 90%"></textarea> </td> <td colspan="2"> <textarea rows="1" name="ct_verm_vs" style="width: 90%"></textarea> </td> </tr> <tr> <td colspan="6" style="height: 45px"> <input type="submit" name="gravar" value="Gravar"> || <input type="reset" value="Limpar"> </td> </tr> </tbody> </table> </form> O queria saber como eu faço para gravar no banco apenas os jogadores que tiverem o checkbox part selecionado, mas não eh isso que esta acontecendo. Está pegando sempre o primeiro registro, como eu faço para pegar o registro pelo indice do array. Segue abaixo a página que recebe os dados do formulario <?php echo '<pre>'; print_r($_POST); echo '</pre>'; if($_POST) { extract($_POST); list ($dia, $mes, $ano) = split ('[/.-]', $cp_data); $data_bd = $ano."-".$mes."-".$dia; $cadastrados = '0'; $sql = "INSERT INTO dados_jogadores (ID_jogador, cp_quadro, gols, cp_data, cp_competicao, ct_am, ct_azul, ct_verm, cp_faltas) VALUES"; if($part!="") { foreach($part as $chave => $partida) { if($cp_ct_amarelo[$chave] == ""){$cp_ct_amarelo[$chave] = 'N';} if($cp_ct_azul[$chave] == ""){$cp_ct_azul[$chave] = 'N';} if($cp_ct_vermelho[$chave] == ""){$cp_ct_vermelho[$chave] = 'N';} $sql .= " ('".$id[$chave]."', '".$quadro."', '".$gols[$chave]."', '".$data_bd."', '".$cp_competicao."', '".$cp_ct_amarelo[$chave]."', '".$cp_ct_azul[$chave]."', '".$cp_ct_vermelho[$chave]."', '".$faltas[$chave]."'),"; } } $sql = substr($sql,0,-1); $grava = mysql_query($sql) or die (mysql_error()); if($grava) echo $sql; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 10, 2009 exemplo para debug: print_r( $_POST['part'] ); exemplo para debug 2 $p = 'part'; // nome do campo if( isset( $_POST[$p] ) ) { foreach( $_POST[$p] as $k => $v ) { echo '<br>'; echo $k; echo ': '; echo $v; } } Compartilhar este post Link para o post Compartilhar em outros sites
phs22 0 Denunciar post Postado Novembro 10, 2009 O resultado para o primeiro debug é Array ( [0] => 3 ) para o segundo é esse 0: 3 olha como eu estou recebendo os arrays do form Array ( [id] => Array ( [0] => 2 [1] => 3 [2] => 1 ) [gols] => Array ( [0] => [1] => [2] => ) [faltas] => Array ( [0] => [1] => [2] => ) [part] => Array ( [0] => 3 ) [cp_competicao] => [cp_data] => [placar_adver] => [cp_adver] => [cp_equipe_adver] => [cp_gols_vs] => [cp_faltas] => [ct_am_vs] => [ct_az_vs] => [ct_verm_vs] => [gravar] => Gravar ) Tipo eu quero receber apenas os dados do array dos jogadores que eu selecionei part, mas eu estou recebendo de todos. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 11, 2009 a dúvida está em obter os dados do índice "part" ? Compartilhar este post Link para o post Compartilhar em outros sites
phs22 0 Denunciar post Postado Novembro 11, 2009 a dúvida está em obter os dados do índice "part" ? Isso mesmo, eu quero inserir no banco apenas a linha que o indice estiver selecionado. Exemplo: No form, aparecem todos os jogadores cadastrados no time e eu quero inserir os dados por data, tipo em data tal tais jogadores jogaram e fizeram tantos gols, faltas, etc. tudo individualmente. esses jogadores são selecionados por um checkbox, mas na parte que recebe os dados em vez de receber apenas os jogadores selecionados, vai todos da que constam na tabela, apenas o array part vai o que eu selecionei, tipo. 4 quatro jogadores cadastrados ID [0]=>1 [1]=>2 [2]=>3 [3]=>4 part [0]=>4 Jogadores Fulano Beltrano Tl Etc Gols [0]=> [1]=> [2]=> [3]=>1 Como você pode ver no exemplo acima, eu selecionei apenas o jogador 4 na lista, mas os indices ficam fora da ordem, e sempre pega o indice 0 dos outros arrays. Onde o correto seria pegar o indice 3. Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Novembro 11, 2009 nesse caso é mais seguro atribuir índices nos nomes dos campos do forum html ao invés de fazer name="cat[]" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif name="cat[1]" faça o mesmo para os outros campos, cada qual com o mesmo indice relacionando com os outros campos entendeu ? Compartilhar este post Link para o post Compartilhar em outros sites
phs22 0 Denunciar post Postado Novembro 11, 2009 nesse caso é mais seguro atribuir índices nos nomes dos campos do forum html ao invés de fazer name="cat[]" http://forum.imasters.com.br/public/style_emoticons/default/seta.gif name="cat[1]" faça o mesmo para os outros campos, cada qual com o mesmo indice relacionando com os outros campos entendeu ? Putz, que fácil, deu certo, vlw mesmo, ja tinha tentado fazer isso, mas estava incrementando errado. Compartilhar este post Link para o post Compartilhar em outros sites