Ir para conteúdo

Arquivado

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

lico1707

Dúvida sobre inserção de valores no banco de dados

Recommended Posts

Oi, bom dia.

 

A dúvida é o seguinte. Tenho uma página simples, com 1 input TEXT. Vou usar um script para adicionar mais inputs de acordo com a necessidade do usuário. O problema é que naõ sei como inserir os dados desses inputs extras no banco.

 

Exemplo: vou usar o seguinte código de exemplo, bem simples.

<!DOCTYPE html>
<html>
<body>

<p>Click the button to make a BUTTON element.</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction() {
    var btn = document.createElement("INPUT");
    document.body.appendChild(btn);
}
</script>

</body>
</html>

 

Sei como recuperar os dados enviados por um formulário, que no caso não está no código acima pois é só de exemplo.

Também sei como inserir esses dados no banco Mysql. Mas se eu criar inputs extras, como vou inserir essas informações?

 

Pra tentar ser mais claro, suponhamos que eu tenha um banco "Ocorrencias" e a tabela "envolvidos".

Na tabela "envolvidos" tenho os campos nome e idade. Na página php para cadastro, tenho os campos nome e idade, com opção de adicionar mais envolvidos.

Os 2 primeiros campos eu consigo inserir na tabela "envolvidos", mas como insiro os demais campos que forem sendo adicionados pelo usuário? Alguma luz?

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nomeie os campos com colchetes no final, isso gerará um array, por exemplo:

<... name="campo[]"...>
<... name="teste[]"...>
<... name="campo[]"...>
<... name="teste[]"...>
<... name="campo[]"...>
<... name="teste[]"...>

Ai basta usar o foreach para ler os array, a cada volta você pegará o valor do array e o índice para resgatar o par respectvo (campo e teste foram um par com o mesmo número de índice).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado. Vi alguns tópicos aqui sobre inserção de arrays em banco de dados, porém vi que cada valor é inserido em um "id" diferente e não é isso que preciso. Não sei se tem como, mas no "id" 1, terá 3 dados de envolvidos, no "id" 2 terá por exemplo 5 envolvidos, e assim por diante, dependendo de cada cadastro, de forma que quando eu consultar o "id" 1, ele me mostre por exemplo o nome e idade dos 3 envolvidos cadastrados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nunca faria isso que você está tentando fazer, qualquer livro de introdução à modelagem vai condenar essa sua solução. Mas se você quiser continuar no erro, sem problema. Use o implode para juntar todos os elementos do array que você criou, pronto, ai é só inserir isto no BD.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não quero continuar no erro. A questão é que não sei a solução para isso.

Qual a melhor forma que posso usar para, quando consultar o "id" 1 por exemplo, ele me retorne o nome e idade de 3 envolvidos que eu cadastrei? Não sei como inserir e muito menos com consultar. Se fosse 1 campo nome e 1 campo idade, é fácil inserir na tabela do banco, mas e se for 3 campos de nome e 3 de idade, como resolver isso?

É como se fosse um boletim de ocorrencia por exemplo, que na Ocorrencia de número 1 eu possa ter 1 vítima, 1 autor e 1 testemunha, na ocorrencia número 2, eu tenha 2 vítimas, 1 autor e 3 testemunhas por exemplo. E aí, tem alguma jeito de resolver isso? Obrigado mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, você precisa fazer exatamente o que você disse.

Crie uma tabela "envolvidos" com as colunas "id", "id_ocorrencia", "chave", "valor".

 

Dessa forma, se você quiser recuperar todos os envolvidos de determina ocorrência, você pode simplesmente fazer:

SELECT chave, valor FROM envolvidos WHERE id_ocorrencia = X

Eu ainda iria mais fundo... Acredito que você não precisa de campos personalizados, pois as "chaves" únicas serão poucas, então você pode ter uma tabela a mais... Veja o exemplo:

Ocorrencia (#id, data, ...)

Envolvidos (#id, nome)
//exemplos de entradas: Advogado, Vítima, Juíz, Réu, Delegado, etc, etc...

EnvolvidosOcorrencias (#id, &id_ocorrencia, &id_envolvido)
//aqui você insere cada envolvido em cada ocorrência


E para recuperar depois:

SELECT
	e.nome
FROM
	Ocorrencia o, Envolvidos e
	
INNER JOIN
	EnvolvidosOcorrencias eo ON
		eo.id_ocorrencia = o.id
		AND
		eo.id_envolvido = e.id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah entendi, achei interessante usando o parâmentro WHERE. Da outra forma que você disse não entendi muito por falta de mais conhecimento no assunto. Se entendi bem bem, posso criar uma tabela que vai receber todos o envolvidos de todas as ocorrências, e usando o WHERE seleciono somente as que fazem parte de determinada ocorrencia. Se for isso mesmo, muito obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É exatamente isso... A ideia é reduzir a redundância de informações.

 

Quantas vezes uma ocorrência terá uma vítima, por exemplo? Provavelmente 100%, certo? Por isso você insere a palavra "Vítima" somente uma vez, e depois os representa por seus IDs (com chaves estrangeiras).

 

No exemplo que fiz, # significa chave primária e & significa chave estrangeira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso cara, você é o cara. :ph34r:

Toda ocorrência terá obrigatoriamente uma vítima porém nem sempre tem o autor. Mas agora já clareou tudo aqui pra mim, agora é só pensar no relacionamento entre as tabelas e escolher a melhor forma pra isso, porque são muitos dados. Fino demais, vlw Amigão.

Resolvido :D

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.