Ir para conteúdo

Arquivado

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

Rasp

Cadastro com múltiplos emails e telefones

Recommended Posts

Pessoal, Boa tarde!

Estou com uma dúvida e resolvi vir pedir ajuda a vocês.

 

Estou fazendo um cadastro de clientes, onde posso adicionar quantos e-mails e telefones quiser, já resolvi o lado do html e jquery, porém, não sei ao certo como trabalhar com o php e o mysql.

 

No php, estou testando usar dois Arrays com todos os e-mails e telefones, porém, como faço pra gravar no banco?

 

Alguém tem uma ideia de como posso fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o banco já está modelado ?

 

se estiver normalizado, você terá q percorrer cada array com um for(), e inserir na respectiva tabela.

 

TABLE telefone

id_usuario, telefone

 

TABLE email

id_usuario, email

 

 

Algo do tipo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu tenho as 3 tabelas abaixo, onde na tabela cliente_telefone e cliente_email, eu faço referência ao registro do cliente no campo 'fk_cliente'. Está correto assim?

 

cliente.sql

CREATE TABLE IF NOT EXISTS `cliente` (
 `id_cliente` int(11) NOT NULL AUTO_INCREMENT,
 `tipo_cliente` enum('PF','PJ') NOT NULL DEFAULT 'PF',
 `razao_nome` varchar(150) NOT NULL,
 `cnpj` char(15) DEFAULT NULL,
 `cpf` char(11) DEFAULT NULL,
 `cep` char(8) NOT NULL,
 `endereco` varchar(80) NOT NULL,
 `numero` int(6) NOT NULL,
 `complemento` varchar(20) DEFAULT NULL,
 `bairro` varchar(30) NOT NULL,
 `cidade` varchar(30) NOT NULL,
 `fk_estado` char(2) NOT NULL,
 `telefone` varchar(12) NOT NULL,
 `responsavel` varchar(150) NOT NULL,
 `data_inicial` date NOT NULL,
 `observacoes` varchar(300) DEFAULT NULL,
 PRIMARY KEY (`id_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

 

cliente_telefone.sql

CREATE TABLE IF NOT EXISTS `cliente_telefone` (
 `id_telefone` int(11) NOT NULL AUTO_INCREMENT,
 `fk_cliente` int(11) NOT NULL,
 `telefone` varchar(60) NOT NULL,
 `tipo` enum('1','2','3','4') NOT NULL DEFAULT '1',
 PRIMARY KEY (`id_telefone`),
 KEY `fk_cliente` (`fk_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

 

cliente_email.sql

CREATE TABLE IF NOT EXISTS `cliente_email` (
 `id_email` int(11) NOT NULL AUTO_INCREMENT,
 `fk_cliente` int(11) NOT NULL,
 `email` varchar(60) NOT NULL,
 PRIMARY KEY (`id_email`),
 KEY `fk_cliente` (`fk_cliente`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu excluria os campos:

 

`id_email` int(11) NOT NULL AUTO_INCREMENT,

e:

`id_telefone` int(11) NOT NULL AUTO_INCREMENT,

 

 

são desnecessários, pois se você trabalhar com chave composta(fk_cliente + telefone|email), nem vai usar eles.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, mas nesse caso, como faço a identificação da chave primaria? ou é desnecessário?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, mas nesse caso, como faço a identificação da chave primaria?

e você precisa fazer ?

 

Já fiz sistemas assim, e no caso é desnecessário você identificar cada linha de forma única, afinal, todas pertencem ao cliente, e a FK tá lá para isso.

Por isso que eu sugeri a exclusão dessas PKs.

 

 

Se ainda assim, você precisar, pode usar composta, como sugeri.

WHERE fk_cliente = 2 AND email = 'exemplo@provedor.com'

partindo do princípio de que seu cliente, não vai cadastrar emails e nem telefones repetidos, esse WHERE te leva sempre a um único registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O correto é fazer assim:

PRIMARY KEY (`fk_cliente`, `telefone`),

e excluir esse campo id_telefone.

A mesma coisa para a tabela de e-mails.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal.

William, realmente não há necessidade da chave primeira nem do ID, fiz da forma que recomendou e fica até mais pratico para entendimento. Valeu ;)

 

Só estou com um problema que é para o SELECT, estou usando INNER JOIN, mas não consigo recuperar todos os e-mails ou telefones de determinado usuário. só consigo recuperar o primeiro e-mail e o primeiro telefone.

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.