NIKESLB 0 Denunciar post Postado Maio 6, 2010 Boas! Surgiu-me um problema. Tenho através de uma base dados uma lista de informações em uma tabela, cada linha tem uma checkbox. Se eu fizer check à uma checkbox e fizer enviar, tá tudo bem, ele envia o value da checkbox para a outra página que devolve outros resultados. O problema é na página da listagem, se eu fizer check em 2 checkbox, para enviar o valor é complicado, se forem vários o serviço só aceita os valores do tipo: "2,5" e não ",2,5" ou "2,5,". $cod = $test["tests"]; //checkbox <input name=\"s1[]\" type=\"checkbox\" value=\"$cod\" /> A minha pergunta é: Como enviar/ receber os valores tendo uma virgula entre dois ou mais valores enviado? Por favor ajuda ^^ Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Maio 6, 2010 n intendi, qual sua dificuldade em enviar vários checks marcados?? qual é o formato da sua variável $cod??? de uma olhada aki http://forum.imasters.com.br/index.php?/topic/125036-pegar-dados-de-checkbox/ Compartilhar este post Link para o post Compartilhar em outros sites
NIKESLB 0 Denunciar post Postado Maio 6, 2010 não, eu consigo enviar os valores das checkbox, mas se forem enviadas mais do que uma, para aquilo funcionar tem que ter uma virgula entre os valores. Por exemplo, vamos supor que tenho uma checkbox com valor = 1, e outra checkbox com valor = 2 (esses dois valores pertencem a variável $cod), para eu poder enviar mais do que um valor, terá que ser enviado da seguinte forma: "1,2". Com uma virgula entre os valores, o serviço que estou a usar só aceita desta forma. Como poderei por uma virgula entre os valores, sabendo que esses valores estão todos numa variável? Compartilhar este post Link para o post Compartilhar em outros sites
Kineri 0 Denunciar post Postado Maio 6, 2010 Quando os valores da checkbox são enviados, eles chegam como um array na página que recebe. Você precisa pegar os valores, um a um, dessa array e transformá-los em um só, algo como $stringFinal = ""; for($contador=0;$contador>TAMANHO_DO_ARRAY;$contador++){ $stringFinal = $stringFinal . " " . $arrayCheckbox[$contador] . ","; } Isso retorna seus valores, separador por vírgula: "1,2,3,4,5,6,7,8,9," Aí sobra uma vírgula no final, e você tira ela com o "substr()": $stringFinal = substr($stringFinal, 0, -1); Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Maio 6, 2010 var_dump(implode(',',$_POST['s1'])); Compartilhar este post Link para o post Compartilhar em outros sites
visitante_xp 0 Denunciar post Postado Maio 6, 2010 Bom, se o seu problema é só com a tal virgula no final dos numeros, faz assim substr($string, 0, -1); ai vai tirar a virgula do final... Compartilhar este post Link para o post Compartilhar em outros sites
NIKESLB 0 Denunciar post Postado Maio 10, 2010 Obrigado pelas respostas mas continuo ainda com algumas dificuldades. Página de envio echo ("<table border=\"0\" style=\"border: solid 1px #D4D4D4;\" width =\"100%\" cellpadding =\"2\" cellspacing =\"2\"> <tr> <th align=\"center\" bgcolor=\"#F3F3F3\" width=\"5%\">| S1</th> <th align=\"center\" bgcolor=\"#F3F3F3\" width=\"5%\">| S2</th> </tr>"); if(!isset($tests["CD_test"])): foreach($tests as $index=>$test){ $cod = $test["CD_test"];//variável que contém o código para ser implementando no campo Hidden echo(" <tr style=\"width:100%; background-color:\" onMouseover=\"this.style.backgroundColor='#F0F0F0';\" onMouseout=\"this.style.backgroundColor='';\"> <td align=\"center\" width=\"\"><input type=\"hidden\" name=\"cod[]\" /><label><input name=\"s1[]\" type=checkbox value=\"$cod\" /></label></td> <td align=\"center\" width=\"\"><label><input name=\"s2[]\" type=checkbox value=\"$cod\" /></label></td> <tr/>"); } echo ("</table></center>"); Página que recebe <?php function test($string) //função que permite concatenar os valores do array, separar por virgulas e eliminar a ultima virgula { $stringFinal = ""; for( $contador = 0; $contador > $string.length; $contador++ ) { $stringFinal = $stringFinal . " " . $string[$contador] . ","; } $stringFinal = substr($stringFinal, 0, -1); } ?> if (isset($_POST['cod']) AND isset($_POST['s1']))//se a variável cod e S1 existe, cod recebido da primeira pagina { foreach ($_POST['s1'] as $key =>$value1) { echo test($value1); } } Será que fiz mal a função? Compartilhar este post Link para o post Compartilhar em outros sites
Kineri 0 Denunciar post Postado Maio 10, 2010 Então, cara, o que você está fazendo aí é só jogar um valor numa função a cada loop, não está nem retornando nada. Primeiro, receba o array $array_checkbox = $_GET["checbox"];Depois, ache o tamanho do array $tamanho_do_array = count($array_checkbox);Agora, tendo o array em mãos, bem como o seu tamanho, faça um loop baseado nesse tamanho for($contador=0;$contador<$tamanho_do_array;$contador++){ }E quebre o array, acumulando o resultado na string $string_final_com_virgulas = $string_final_com_virgulas . $array_checkbox[$contador] . ", "E, do mesmo jeito que falei antes, tire a última vírgula que sobra $string_final_com_virgulas = substr($string_final_com_virgulas, 0, -1);EDIT: achei a função que faltava Compartilhar este post Link para o post Compartilhar em outros sites
NIKESLB 0 Denunciar post Postado Maio 10, 2010 finalmente funciona, muito obrigado pela ajuda e a explicação aprendi mais uma coisa hoje http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Maio 10, 2010 O Evandro já postou uma dica legal. Não precisa fazer isso tudo aí não, um for() depois concatena as virgulas e no final de tudo utilizar substr para retirar o ultimo caractere. Utilizando a dica do Evandro, vejam como fica: <?php $str = '2138721788971210214'; # 2,1,3,8,7,2,1,7,8,8,9,7,1,2,1,0,2,1,4 echo implode( ',', str_split( $str ) ); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Kineri 0 Denunciar post Postado Maio 10, 2010 Mas o implode() só funciona com strings, não? Opa! Falha minha, funciona com array sim =P http://br.php.net/manual/pt_BR/function.implode.php Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Maio 10, 2010 implode() SOMENTE funciona com array ;). Compartilhar este post Link para o post Compartilhar em outros sites