Ir para conteúdo

Arquivado

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

sacofrito

[Resolvido] retornar array de inputs com mesmo nome

Recommended Posts

Ola galera, estou precisando retornar de um formulario, varios campos com o mesmo name, mas nao esta retornando a mesma coisa.

Segue como estou fazendo.

 

HTML

        <label for="produto">Produto</label><br/>
       <select name="produto" id="produto">
       <option></option>
       <? 
       // POPULA SELECT
	unset($idprodutos,$descricao);		
       $rows=$db->select('select idprodutos, descricao from produtos order by descricao');
       if ($rows >= 0){
           for ($x = 0 ; $x <= $rows; $x++){
               echo "<option value=\"" . $idprodutos["$x"] . "\">" . strtoupper($descricao["$x"]) . " </option>";							
           }
       }
       ?>

       </select><br/>
       <label for="qtd">Qtd</label><br/>        
       <input type="text" name="qtd" id="qtd"/><br/>
       <label for="preco">Preço Custo</label><br/>
       <input type="text" name="preco" id="preco" /> <br/>

       <label for="produto">Produto</label><br/>
       <select name="produto" id="produto">
       <option></option>
       <? 
       // POPULA SELECT
	unset($idprodutos,$descricao);		
       $rows=$db->select('select idprodutos, descricao from produtos order by descricao');
       if ($rows >= 0){
           for ($x = 0 ; $x <= $rows; $x++){
               echo "<option value=\"" . $idprodutos["$x"] . "\">" . strtoupper($descricao["$x"]) . " </option>";							
           }
       }
       ?>

       </select><br/>
       <label for="qtd">Qtd</label><br/>        
       <input type="text" name="qtd" id="qtd"/><br/>
       <label for="preco">Preço Custo</label><br/>
       <input type="text" name="preco" id="preco" /> <br/>        

 

PHP

	if ($rows >= 0){
	$x = 0;
	/*
	if(is_array($_POST['produto'])){
		echo "é array";	
	}else{
		echo "nao é";	
	}
	*/
	echo $_POST['produto'];
	foreach($_POST['produto'] as $prods){			
		$db->insert('entrada_itens', "identrada,id_produto,vl_compra,qtd,item,id_usuario","$identrada,$prods,$preco[$x],$qtd[$x],$x+1,$iduser");			
	}
}

 

Acabei de lembrar a solução.

Basta colocar <input type="text" name="produto[]">

 

Faltou o '[]' no fim do nome.

 

Podem fechar o tópico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for o input, sim, há (nunca testei com select).

 

Você terá de definir o name do input como se fosse um vetor, assim:

 

<input type="text" name="produto[]" value="Produto 1" />
<input type="text" name="produto[]" value="Produto 2" />
<input type="text" name="produto[]" value="Produto 3" />

 

já no envio por post, você pode iterá-lo:

$produtos = $_POST['produto'];
foreach( $produtos AS $produto ) {
  echo $pruduto.'<br />';
}

 

Você também pode definir as chaves do vetor...

 

assim:

<input type="text" name="produto[1]" value="Produto 1" />
<input type="text" name="produto[5]" value="Produto 2" />
<input type="text" name="produto[10]" value="Produto 3" />

 

Quando você for imprimir, pode ser feito assim:

 

já no envio por post, você pode iterá-lo:

$produtos = $_POST['produto'];
foreach( $produtos AS $key => $produto ) {
  echo $pruduto.'<br />';
}

 

ou

 

já no envio por post, você pode iterá-lo:

$produtos = $_POST['produto'];
echo $produto[5];

 

O uso de chave, para o vetor, é interessante quando já há um id cadastrado no banco, assim não se faz a necessidade dois inputs, um para o nome do produto e outro para o id dele.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complementando a dica do Gabriel:

 

Você também pode trabalhar com todos os dados de um produto na forma de um vetor:

 

<!-- produto 1 -->
<input type="text" name="produto[0][nome]" value="nome do produto" />
<input type="text" name="produto[0][valor]" value="valor do produto" />
<input type="text" name="produto[0][codigo]" value="codigo do produto" />

<!-- produto 2 -->
<input type="text" name="produto[1][nome]" value="nome do produto" />
<input type="text" name="produto[1][valor]" value="valor do produto" />
<input type="text" name="produto[1][codigo]" value="codigo do produto" />

<!-- produto 3 -->
<input type="text" name="produto[2][nome]" value="nome do produto" />
<input type="text" name="produto[2][valor]" value="valor do produto" />
<input type="text" name="produto[2][codigo]" value="codigo do produto" />

 

Assim, quando você for pegar pelo PHP:

 

if(!empty($_POST['produto']) && is_array($_POST['produto'])){
 foreach($_POST['produto'] as $item) {
   echo $item['nome'], ' com valor ', $item['valor'], ' e codigo ', $item['codigo'], '<br />', PHP_EOL;
 }
}

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel,

 

Fiz as seguintes implementações:

 

<?php echo $def[aca_item_anal_def];?>
<input type="hidden" name="def[0][]" value="nome_def" />
<input type="hidden" name="def[0][]" value="def_detec" />
<input type="hidden" name="def[0][]" value="def_res" />
foreach($_POST['def'] as $key => $data) {
printf(
"Defeito: %s \n
Quant. Defeitos: %s \n
Resultado: %s \n",
$data,
$_POST['nome_def'][$key],
$_POST['def_detec'][$key],
$_POST['def_res'][$key]
);
}
SAÍDA:
Defeito: Array Quant. Defeitos: Resultado:
----------------------------------------------------------------------------------------------------
<input type="hidden" name="def[0][]" value="nome_def" />
<input type="text" name="def[0[[]" size="4" maxlength="2" />
<input type="text" name="def[0][]" size="10" maxlength="20" />
foreach($_POST['def'] as $key => $data) {
printf(
"Defeito: %s \n
Quant. Defeitos: %s \n
Resultado: %s \n",
$data,
$_POST['ao_nome_def'][$key],
$_POST['ao_def_detec'][$key],
$_POST['ao_def_res'][$key]
);
}
SAÍDA:
Defeito: Array Quant. Defeitos: Resultado: Defeito: 5 Quant. Defeitos: Resultado:
--------------------------------------------------------------------------------------------------------------
<input type="hidden" name="def[0][]" value="nome_def" />
<input type="text" name="def[0[[]" size="4" maxlength="2" />
<input type="text" name="def[0][]" size="10" maxlength="20" />
$item = $_POST['def'][0];
foreach ($item AS $data){
echo $data\n;
}
SAÍDA:
2 APROVADO 0 APROVADO 5 REPROVADO 8 REPROVADO
-------------------------------------------------------------------------------
SAÍDA CORRETA:
DESVIO DE COR 2 APROVADO
PESO FORA DOS LIMITES 0 APROVADO
CODIFICAÇÃO INCOMPLETA 5 REPROVADO
SUJEIRA EXTERNA REMOVIVEL 8 REPROVADO
---------------------------------------------------------------------------------
Então,
Entendi o que vc quis dizer.
Como vc pode notar, os input hidden não retornam nada.
Os input text, retornam alguma coisa, mas aqui é fácil de arrumar e deixar Ok.
Importante lembrar que a variavel 'aca_item_anal_def' vem de uma tabela pelo SELECT.. O grande problema, que eu estou vendo é passar o valor dos input hidden para array.
Obrigado Gabriel e fique bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 2012-4-17 at 10:34, hufersil disse:

 

Em 2012-4-17 at 10:34, hufersil disse:

Complementando a dica do Gabriel:

 

Você também pode trabalhar com todos os dados de um produto na forma de um vetor:

 

 


<!-- produto 1 -->
<input type="text" name="produto[0][nome]" value="nome do produto" />
<input type="text" name="produto[0][valor]" value="valor do produto" />
<input type="text" name="produto[0][codigo]" value="codigo do produto" />

<!-- produto 2 -->
<input type="text" name="produto[1][nome]" value="nome do produto" />
<input type="text" name="produto[1][valor]" value="valor do produto" />
<input type="text" name="produto[1][codigo]" value="codigo do produto" />

<!-- produto 3 -->
<input type="text" name="produto[2][nome]" value="nome do produto" />
<input type="text" name="produto[2][valor]" value="valor do produto" />
<input type="text" name="produto[2][codigo]" value="codigo do produto" />
 

 

 

Assim, quando você for pegar pelo PHP:

 

 


if(!empty($_POST['produto']) && is_array($_POST['produto'])){
 foreach($_POST['produto'] as $item) {
   echo $item['nome'], ' com valor ', $item['valor'], ' e codigo ', $item['codigo'], '<br />', PHP_EOL;
 }
}
 

 

 

@braços e fique com Deus!

olá amigo o meu formulario se encaixa nesse exemplo que postou 

 

name=data['ClientesEndereco'][0]['nome_tipo']; 
name=data['ClientesEndereco'][0]['cep'];  
name=data['ClientesEndereco'][0]['logradouro']; 

name=data['ClientesEndereco'][0]['numero'];  
name=data['ClientesEndereco'][0]['complemento']; 
name=data['ClientesEndereco'][0]['bairro'];   
name=data['ClientesEndereco'][0]['codigo_cidade'];   
name=data['ClientesEndereco'][0]['nome_cidade'];   
name=data['ClientesEndereco'][0]['estado']; 

 

mas quando coloco: 

 

if(!empty($_POST['data']) && is_array($_POST['data'])){
 foreach($_POST['data'] as $item){
   echo $item['nome_tipo'], $item['cep'],  $item['logradouro'],  $item['numero'], $item['complemento'],$item['bairro'], PHP_EOL;
 }
}

 

dá erro da index indefinida ...onde estou errando, como faço ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 20/05/2017 at 15:14, romario@seg disse:

olá amigo o meu formulario se encaixa nesse exemplo que postou 

 

name=data['ClientesEndereco'][0]['nome_tipo']; 
name=data['ClientesEndereco'][0]['cep'];  
name=data['ClientesEndereco'][0]['logradouro']; 

name=data['ClientesEndereco'][0]['numero'];  
name=data['ClientesEndereco'][0]['complemento']; 
name=data['ClientesEndereco'][0]['bairro'];   
name=data['ClientesEndereco'][0]['codigo_cidade'];   
name=data['ClientesEndereco'][0]['nome_cidade'];   
name=data['ClientesEndereco'][0]['estado']; 

 

mas quando coloco: 

 

if(!empty($_POST['data']) && is_array($_POST['data'])){
 foreach($_POST['data'] as $item){
   echo $item['nome_tipo'], $item['cep'],  $item['logradouro'],  $item['numero'], $item['complemento'],$item['bairro'], PHP_EOL;
 }
}

 

dá erro da index indefinida ...onde estou errando, como faço ?

 

 

Eu creio que o problema esta nas aspas, usa sem as aspas no data['ClientesEndereco'][0]['estado']

vai ficar data[ClientesEndereco][0][estado]

se nao der certo remove esse data e muda para da seguinte forma:  ClientesEndereco[0][estado]

que dai no teu exemplo ficaria assim: name=ClientesEndereco[0][estado]; 

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.