Ir para conteúdo

Arquivado

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

vinicius.nyx

Percorrer Array

Recommended Posts

Ola pessoal, tenho uma duvida de como percorrer múltiplos arrays de forma simétrica, acontece que estou enviando informações de um "checkbox" e de um campo "text" de um form para uma pagina php e percebi que o php reserva o índice do checkbox apenas quando ele é marcado, ou seja se você tem 10 checkbox mas apenas 3 estão marcados, quando executar um POST para recuperar os dados do formulário você terá um array de apenas 3 índices, pois ele não reserva espeço para conteúdo nulo, porem ao executar o mesmo processo para o campo text ele reserva índices até mesmo para espaços vazios, ou seja usar Array_combine ou jogar o índice que o foreach percorre no outro array não o fara exibir o conteúdo simetricamente, pois o campo text gera espeço vazio...

no meu codigo eu criei por meio de um while 30 "checkbox[]" juntos com campos "text[]" e ao passar pelo POST para outra pagina php ele deveria exibir apenas os campos que foram marcados no checkbox e juntamente o conteúdo equivalente ao seu campo "text" , por meio de um foreach ficaria isso

$a = $_POST['check'];

$b = $_POST['texto'];

 

foreach( $a as $key => $value){

echo $value . " e " . $b[$key];

}

 

porem como o índice do checkbox só conta os campos marcados e o do "text" conta todos os campos o código não exibe a sequencia correta, alguém poderia me ajudar ou indicar uma solução mais plausível? estou brigando a horas com esse código...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz aqui:

 

 

tela1.php

 

<form method="post" name="form" action="tela2.php">
    <input type="checkbox" name="marcar[]" value="paulo" />
    <input type="text" name="texto_paulo" value="" />
    <br/>
    <input type="checkbox" name="marcar[]" value="maria" />
    <input type="text" name="texto_maria" value="" />
    <br/>
    <input type="checkbox" name="marcar[]" value="jose" />
    <input type="text" name="texto_jose" value="" />
    <br/>
    <input type="submit" />
</form>

Atenção! O name do checkbox - sem isso não funciona => marcar[]

Com isso você faz um array que usa no for na próxima pagina.

 

 

tela2.php

 

 

 

if(count(@$_POST["marcar"]) > 0) //verificia se algum checkbox foi enviado no form - O "@" é caso nenhum seja marcado não dar erro
{
	for($i=0;$i<count($_POST["marcar"]);$i++) //faz o loop nos chechkbox enviados
	{
		$campo = $_POST["marcar"][$i];
	
		echo "O nome <b>".$campo."</b> foi selecionada!<br/>";
		echo "O campo de texto tem o seguinte conteudo: ".$_POST["texto_".$campo]; //pega o valor do campo texto usando o valor do checkbox como referencia
		echo '<hr/>';
	}
} 
else
{ echo 'Nenhum item foi marcado.'; }

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Fiz aqui:

 

 

tela1.php

 

 

<form method="post" name="form" action="tela2.php">
    <input type="checkbox" name="marcar[]" value="paulo" />
    <input type="text" name="texto_paulo" value="" />
    <br/>
    <input type="checkbox" name="marcar[]" value="maria" />
    <input type="text" name="texto_maria" value="" />
    <br/>
    <input type="checkbox" name="marcar[]" value="jose" />
    <input type="text" name="texto_jose" value="" />
    <br/>
    <input type="submit" />
</form>

Atenção! O name do checkbox - sem isso não funciona => marcar[]

Com isso você faz um array que usa no for na próxima pagina.

 

 

tela2.php

 

 

 

if(count(@$_POST["marcar"]) > 0) //verificia se algum checkbox foi enviado no form - O "@" é caso nenhum seja marcado não dar erro
{
	for($i=0;$i<count($_POST["marcar"]);$i++) //faz o loop nos chechkbox enviados
	{
		$campo = $_POST["marcar"][$i];
	
		echo "O nome <b>".$campo."</b> foi selecionada!<br/>";
		echo "O campo de texto tem o seguinte conteudo: ".$_POST["texto_".$campo]; //pega o valor do campo texto usando o valor do checkbox como referencia
		echo '<hr/>';
	}
} 
else
{ echo 'Nenhum item foi marcado.'; }

Obrigado por responder PauloRJ, mas tem um probleminha, no código que vc fez o checkbox é um array, mas o campo de texto n! e ainda mais, o valor por traz do campo nem mesmo é visível. o meu grande problema é que preciso percorrer dois vetores! um do checkbox e outro de um campo text, essa é a grande questão pois a lista do meu checkbox é gerada por um while que lista o conteúdo de um banco de dados, e aparentemente percorrer dois vetores de forma sincronizada é uma tarefa demasiadamente difícil, pois os diferentes inputs geram diferentes tipos de arrays...

Existe um método de passar muitos arrays de uma pagina para outra para que eu possa percorre-los como bem entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

PauloRJ, eu resolvi meu problema com uma estrutura de gambiarras cara xD
Vou postar aki só para deixar a livre avaliação e criticas, se souber um geito melhor de fazer a mesma coisa, por favor me mostre.
Seguinte: a ideia é puxar multiplos arrays de um form e depois percorre-los sincronizadamente, o grande problema é que um foreach percorre um array de cada vez, logo se vc quer listar o conteudo em uma tabela, isso nunca vai funcionar, pois necessitara de um foreach para cada array!
Logo, declare seus arrays no inicio do codigo e pelo POST recupere os arrays do formulario, depois apenas percorre um desses arrays com uma estrutura mais ou menos assim:

$nome = $_POST['nome'];
$selec = $_POST['check'];
$indice = 0; //usaremos apenas para descobrir o tamanho do vetor, pois em alguns casos o vetor pode ser dinâmico e não sabemos quantos valores o usuário colocou nele...

foreach($nome as $value){
indice++;
$value;
}

for($cont = 0; $cont < $indice; $cont++){

echo $nome[$cont] . " é " . $selec[$cont] . '<br>'; 
}

pelo menos para o meu sistema funcionou perfeitamente!

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.