Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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' );
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:
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.
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:
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.
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.
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]."\" />";}
}
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: