Ir para conteúdo

POWERED BY:

Arquivado

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

Vinicius Cainelli

[Resolvido] Array + Check box

Recommended Posts

Tenho um form e pego os dados do check e mando pra um array, de acordo com cada check que é selecionado

 

<input type="checkbox" name="protudoIcone[]" value="ico-01.jpg" />
<input type="checkbox" name="protudoIcone[]" value="ico-02.jpg" />
<input type="checkbox" name="protudoIcone[]" value="ico-03.jpg" />
<input type="checkbox" name="protudoIcone[]" value="ico-04.jpg" />

 

Usando esse script, com o JOIN eu guardo todos os dados dos campos em uma variavel só, depois imprimo..

 

$protudoIcone = join(",",$_POST["protudoIcone"]);

$arr = array($protudoIcone);

$tam = sizeof($arr);

for ($i = 0; $i <= $tam-1; $i++) {
echo $arr[$i]."<br />";
}

 

 

Se eu selciono dois dos checks, o dois e o quatro por exemplo, ele imprime os dados assim:

 

ico-02.jpg,ico-03.jpg

 

ao invés de imprimir assim:

 

ico-02.jpg

ico-03.jpg

 

 

E eu gostaria que ele imprimisse dessa segunda forma, assim posso fazer com que as imagens no caso apareçam.

 

Alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o resultado obtido é o esperado.

 

Depois do implode(), que é a função "certa" a qual join() se refere, você faz:

 

$arr = array($protudoIcone);

Isso faz com que a variável $arr armazene o seguinte:

 

array( 'ico-02.jpg,ico-03.jpg' );

E quando você itera desnecessariamente, afinal SEMPRE haverá um único índice, você tem, no source da página:

 

ico-02.jpg,ico-03.jpg<br />

O que você aparenta querer fazer pode ser resumido nisso:

 

$protudoIcone = implode( "<br />\n", $_POST["protudoIcone"] );

Ao ecoar/printar essa variável você já terá todos os valores do array de entrada separados por uma tag <br /> e, no source da página, um embaixo do outro, frescura proporcionada pelo \n.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, então eu expliquei minha dúvida errado..

 

Como faço pra ter os itens nessa disposição.

 

array( 'ico-02.jpg','ico-03.jpg' );

 

Ao invés dessa que tenho hoje.

 

array( 'ico-02.jpg,ico-03.jpg' );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para ter essa disposição você não precisa fazer nada.

 

Faça:

 

print '<pre>'; print_r( $_POST["protudoIcone"] );

Que você verá que esse índice do array superglobal $_POST já é um array tendo tantos índices quantos checkboxes tiverem sido marcados.

 

Isso porque quando você adiciona um par de colchetes ao atributo name do elemento de formulário, o browser entende que você deseja trabalhar com uma estrutura multidimensional e informa isso ao programa PHP.

 

Este por sua vez converte essa estrutura num array. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda não é isso que eu preciso.. o q eu preciso é disso, ...com esse codigo

 

for ($i = 0; $i <= $tam-1; $i++) {
echo "<img src=\"".$arr[$i]."\" />";
echo $arr[$i]."<br />";
}

 

os itens apareçam assim..

 

<img src="ico-02.jpg" />
<img src="ico-03.jpg" />

 

Isso de acordo com cada check selecionado... mas também preciso guardar esses dados num campo de mysql pra poder usa-los em uma consulta futura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não foi isso que você disse no post #3. <_<

 

Quanto mais claro for, mais rápido sua dúvida será respondida. :thumbsup:

 

mas ainda assim, o que eu disse no post #4 ainda é válido. Porém agora que você disse o que REALMENTE quer fazer, basta, então iterar como estava fazendo, porém sem toda aquela confusão que estava fazendo ao transformar um array em string:

 

if( count( $_POST["protudoIcone"] ) > 0 ) {

   foreach( $_POST["protudoIcone"] as $image ) {

       printf( "<img src=\"%s\" /><br />\n", $image );
   }

} else {

   echo 'Nenhuma imagem para mostrar';
}

Adapte às suas necessidades. Eu usei foreach e printf(), mas nada te impede de usar um for e echo's :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim rrsrsrs, eu dei muitas voltas pra chegar onde queria malz..

 

então.. mas eu estava transformando o array em string pois precisava guardar os valores dos checks em uma variavel pra poder gravar no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é porquê você precisa que um array seja armazenado como string, que você vai transformar em string e depois iterá-la (a string).

 

Para isso existe serialize() ou json_encode().

 

Se o cadastro/alteração no banco virá depois da exibição, serialize/converta o array dentro de $_POST depois do loop.

 

Se vai acontecer antes, faça antes do loop, mas crie outra variável para que o loop aconteça de forma lógica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se essa é a melhor maneira, mas foi a que eu econtrei pra minha necessidade.

 

(sei que o post é de duas semana atrás, mas é só pra concluir e pro moderador poder fecha-lo.

 


if ($_POST["protudoIcone"] == "") {$protudoIcone = "ICONES";} else { $protudoIcone = join(", ",$_POST["protudoIcone"]);}

$separados = explode(", ", $protudoIcone );

$contagem = count ($separados);

for ($i = 0; $i <= $contagem; $i++){

	if($separados[$i]){ echo "<img src=\"../files/2012/icones/".$separados[$i]."\" />";}

}

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.