Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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!
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.
>
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 ?>
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];
Se for o input, sim, há (nunca testei com select).
Você terá de definir o name do input como se fosse um vetor, assim:
já no envio por post, você pode iterá-lo:
Você também pode definir as chaves do vetor...
assim:
Quando você for imprimir, pode ser feito assim:
já no envio por post, você pode iterá-lo:
ou
já no envio por post, você pode iterá-lo:
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.