Ir para conteúdo

POWERED BY:

Arquivado

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

rafaelpampoch

[Resolvido] Criar array e gravar no banco

Recommended Posts

Boa tarde a todos!

 

Estou sofrendo para conseguir fazer um array e gravar no banco... permitam-me explicar-me melhor:

 

Tenho um formulário para criação de orçamentos, e nele existe uma área onde o usuário pode adicionar itens ao orçamento dinamicamente. Esta adição está sendo feita por javascript, funcionando 100%, e cada item do orçamento é composto de vários campos: descrição, condição, valor, etc...

 

Como esses campos são inseridos dinamicamente e podem variar em quantidade, acredito que não haja outra forma de guardá-los no banco senão em forma de arrays.

 

formulário:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>

<script type="text/javascript">
$(document).ready(function() {

$('.add').click(function(){
var id = parseInt($('#tabelaItens > tbody tr:last input:first').val()) + parseInt(1);
$('#tabelaItens > tbody').append('<tr>\n		<td><input type="text" class="text-input" name="item[]" id="item[]" value="'+id+'" size="4"></td>\n		<td><input type="text" class="text-input" id="descricao[]" size="50"></td>\n		<td><input type="text" class="text-input" id="condicao[]" size="8"></td>\n		<td><input type="text" class="text-input" id="valor[]" size="8"></td>\n		<td><input type="text" class="text-input" id="desconto[]" size="8"></td>\n		<td><input type="text" class="text-input" id="total[]" size="8"></td>\n		<td> </td>\n</tr>\n');
return false;
});

});
</script>
</head>

<body>

<form action="teste-add-2.php" method="post" enctype="multipart/form-data" id="cadastro">
<table width="100%" id="tabelaItens">
	<thead>
	<tr>
		<td width="40">Item</td>
		<td>Descrição</td>
		<td width="75">Cond. Pgto.</td>
		<td width="75">Vlr. Unit.</td>
		<td width="75">% Desc.</td>
		<td width="100">Total</td>
		<td width="50">Editar</td>
	</tr>
	</thead>
	<tbody>
	<tr>
		<td><input type="text" class="text-input" name="itens[item][]" value="1" size="4"></td>
		<td><input type="text" class="text-input" name="itens[descricao][]" size="50"></td>
		<td><input type="text" class="text-input" name="itens[condicao][]" size="8"></td>
		<td><input type="text" class="text-input" name="itens[valor][]" size="8"></td>
		<td><input type="text" class="text-input" name="itens[desconto][]" size="8"></td>
		<td><input type="text" class="text-input" name="itens[total][]" size="8"></td>
		<td> </td>
	</tr>
	</tbody>
</table>

<p><input class="button" value="Enviar" type="submit" tabindex="320"></p>

<p><a href="#" class="add">add</a></p>
</form>

</body>
</html>

Quando o usuário clica no botão add, é adicionada mais uma linha no final de tabela com os mesmos campos mostrados acima.

Até aí tudo bem, o problema surge quando tento tratar esse dados na página que os recebe, colocando eles em arrays pra salvar no banco de dados... acaba aparecendo somente o primeiro item inserido...

 

página add-2.php:

 

<?php
$valores = $_POST['itens'];

foreach($valores[item] as $key=>$value){

echo "Item: ".$value."<br/>";
echo "Descrição: ".$valores[descricao][$key]."<br/>";
echo "Condição: ".$valores[condicao][$key]."<br/>";
echo "Valor: ".$valores[valor][$key]."<br/>";
echo "Desconto: ".$valores[desconto][$key]."<br/>";
echo "Total: ".$valores[total][$key]."<br/>";

}
?>

Gostaria de saber se alguém conhece a forma correta de receber esses dados, para que seja possível gravar no banco...

 

Desde já agradeço a atenção de todos!

Muito obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu faria o HTML assim:

<td><input type="text" name="item[]" value="1" size="4" /></td>
                <td><input type="text" name="descricao[]" size="50" /></td>
                <td><input type="text" name="condicao[]" size="8" /></td>
                <td><input type="text" name="valor[]" size="8" /></td>
                <td><input type="text" name="desconto[]" size="8" /></td>
                <td><input type="text" name="total[]" size="8" /></td>
e então ajustaria o jQuery tb.

 

Para receber no php, bastaria um FOR

for( $i=0; $i<count($_POST['item']); $i++ )
{
   echo 'Item: '.$_POST['item'][$i].'--';
   echo 'Descrição: '.$_POST['descricao'][$i].'--';
   echo 'Condição: '.$_POST['condicao'][$i].'--';
   echo 'Valor: '.$_POST['valor'][$i].'--';
   echo 'Desconto: '.$_POST['desconto'][$i].'--';
   echo 'Total: '.$_POST['total'][$i].'<br /><br />';
}
ps: css, já que tá aplicando: class="text-input"

em todos os inputs, faça logo:

input {}

em vez de:

.text-input {}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, o campo name do input deve ficar assim:

 

name="itens[]"
name="descricao[]"
name="condicao[]"

Depois, dá um print_r($_POST) para verificar como chega os dados.

 

Sobre a forma de armazenar os dados, há outra forma, que inclusive a mais recomendada, segundo o conceito de normalização em banco de dados. É só criar uma tabela pedido, e gera um ID, e uma outra tabela de itens, guardando o id_pedido como chave estrangeira.

 

http://pt.wikipedia.org/wiki/Chave_estrangeira

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, muito obrigado mesmo!

 

William, com sua sugestão conseguí fazer o array correto!

 

E seguindo a sugestão do Vinicius, vou usar a chave estrangeira numa tabela somente dos itens mesmo...

 

Mais uma vez, obrigado a todos!

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.