Rasp 3 Denunciar post Postado Novembro 30, 2011 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
William Bruno 1501 Denunciar post Postado Novembro 30, 2011 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
Leozitho 81 Denunciar post Postado Novembro 30, 2011 Você vai precisar de uma tabela exclusiva para armazenar os e-mails e outra para os telefones. Daí em cada registro você relaciona com o ID do cliente, entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
Rasp 3 Denunciar post Postado Novembro 30, 2011 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
William Bruno 1501 Denunciar post Postado Novembro 30, 2011 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
Rasp 3 Denunciar post Postado Novembro 30, 2011 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
William Bruno 1501 Denunciar post Postado Novembro 30, 2011 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
Henrique Barcelos 290 Denunciar post Postado Novembro 30, 2011 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
Rasp 3 Denunciar post Postado Dezembro 5, 2011 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