Jump to content

eacpaula

Members
  • Content count

    6
  • Joined

  • Last visited

Community Reputation

0 Comum

About eacpaula

  • Birthday 09/11/1994

Informações Pessoais

  • Sexo
    Masculino

Contato

  • Skype
    eacpaula@outlook.com
  1. eacpaula

    Problema - Inserção de tabelas relacionadas - PHP e MYSQL

    Olá pessoal! Resolvi mudar de vez o código e implementar tudo utilizando o PDO. Então novamente torno a ter problema para recuperação da chave primaria no insert da primeira tabela. Segue abaixo código da estrutura: <?php try{ $pdo = new PDO('mysql:host="INFORMAÇÃO REMOVIDA";dbname="INFORMAÇÃO REMOVIDA"',"INFORMAÇÃO REMOVIDA","INFORMAÇÃO REMOVIDA"); $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); /*-------------------------------------------- TRABALHANDO DADOS BANCÁRIOS -------------------------------------------------*/ //VARIAVEIS DADOS BANCARIOS $banco = $_POST["bancoPF"]; $agencia = $_POST["agenciaPF"]; $conta = $_POST["contaPF"]; $tipo = $_POST["tipoBancoPF"]; $titular = $_POST["titularPF"]; //PREPARACAO INSERCAO $insercao_dadosbank = $pdo -> prepare('INSERT INTO dados_bancarios_pf ( banco, agencia, conta, tipo, titular )VALUES( :banco, :agencia, :conta, :tipo, :titular) '); //CITUANDO RELACAO ENTRE PSEUDO-NOMES E VARIAVEIS DEFINIDAS POR POST $insercao_dadosbank -> bindValue(":banco",$banco); $insercao_dadosbank -> bindValue(":agencia",$agencia); $insercao_dadosbank -> bindValue(":conta",$conta); $insercao_dadosbank -> bindValue(":tipo",$tipo); $insercao_dadosbank -> bindValue(":titular",$titular); //VALIDA INSERCAO $valida_insercao_dadosbank = $pdo -> prepare("SELECT * FROM dados_bancarios_pf WHERE titular=?"); $valida_insercao_dadosbank -> execute(array($titular)); if($valida_insercao_dadosbank -> rowCount() == 0): //EXECUTANDO INSERCAO DADOS BANCARIOS $insercao_dadosbank -> execute(); $id_dadosbank = $pdo -> lastInsertId(); $confirma_insercao_dadosbank = 0; else: $confirma_insercao_dadosbank = 1; endif; /*-------------------------------------------- TRABALHANDO CLIENTE PF-------------------------------------------------------*/ //VARIAVEIS DADOS CLIENTE PF $nome = $_POST["nomePF"]; $sobrenome = $_POST["sobrenomePF"]; $nome_completo = $_POST["nomeCompletoPF"]; $rg = $_POST["rgPF"]; $cpf = $_POST["cpfPF"]; $cep = $_POST["cepPF"]; $endereco = $_POST["enderecoResidencial"]; $bairro = $_POST["bairroPF"]; $cidade = $_POST["cidadePF"]; $estado = $_POST["estadoPF"]; $pais = $_POST["paisPF"]; $telefone_residencial = $_POST["telPF"]; $celular = $_POST["celPF"]; $email = $_POST["emailPJ"]; $cargo = $_POST["cargoPF"]; $sexo = $_POST["sexoPF"]; $estado_civil = $_POST["estadoCivilPF"]; $data_nascimento = $_POST["dataNascimentoPF"]; //PREPARACAO INSERCAO $insercao_clientepf = $pdo -> prepare('INSERT INTO clientes_pf( banco_id, titulo_id, nome, sobrenome, nome_completo, cpf, rg, cep, endereco, bairro, cidade, estado, pais, telefone_residencial, celular, email, cargo, sexo, estado_civil, data_nascimento )VALUES( $id_dadosbank, null, :nome, :sobrenome, :nome_completo, :cpf, :rg, :cep, :endereco, :bairro, :cidade, :estado, :pais, :telefone_residencial, :celular, :email, :cargo, :sexo, :estado_civil, :data_nascimento) '); //CITUANDO RELACAO ENTRE PSEUDO-NOMES E VARIAVEIS DEFINIDAS POR POST $insercao_clientepf -> bindValue(":nome",$nome); $insercao_clientepf -> bindValue(":sobrenome",$sobrenome); $insercao_clientepf -> bindValue(":nome_completo",$nome_completo); $insercao_clientepf -> bindValue(":cpf",$cpf); $insercao_clientepf -> bindValue(":rg",$rg); $insercao_clientepf -> bindValue(":cep",$cep); $insercao_clientepf -> bindValue(":endereco",$endereco); $insercao_clientepf -> bindValue(":bairro",$bairro); $insercao_clientepf -> bindValue(":cidade",$cidade); $insercao_clientepf -> bindValue(":estado",$estado); $insercao_clientepf -> bindValue(":pais",$pais); $insercao_clientepf -> bindValue(":telefone_residencial",$telefone_residencial); $insercao_clientepf -> bindValue(":celular",$celular); $insercao_clientepf -> bindValue(":email",$email); $insercao_clientepf -> bindValue(":cargo",$cargo); $insercao_clientepf -> bindValue(":sexo",$sexo); $insercao_clientepf -> bindValue(":estado_civil",$estado_civil); $insercao_clientepf -> bindValue(":data_nascimento",$data_nascimento); //VALIDA INSERCAO //$valida_insercao_clientepf = $pdo -> prepare("SELECT * FROM dados_bancarios_pf WHERE rg=?, cpf=?, nome_completo=?"); //$valida_insercao_clientepf -> execute(array($rg,$cpf,$nome_completo)); /*-------------------------------------------- VALIDAÇÃO E EXECUÇÃO DE INSERÇÕES ------------------------------------------*/ if($confirma_insercao_dadosbank == 0): //VERIFICA SUCESSO DE INSERCAO if($insercao_dadosbank): //if($valida_insercao_clientepf -> rowCount() == 0): //EXECUTANDO INSERCAO CLIENTE PF $insercao_clientepf -> execute(); //VERIFICA SUCESSO DE INSERCAO if($insercao_clientepf): echo "<p align='center'><strong>REGISTROS INSERIDOS COM SUCESSO!</strong></p><br><br>"; echo "<p align='center'><a href="INFORMAÇÃO REMOVIDA"> VOLTAR </a></p>"; else: echo "<p align='center'><strong>FALHA NA INSERÇÃO DE DADOS DO CLIENTE!</strong></p><br><br>"; echo "<p align='center'><a href="INFORMAÇÃO REMOVIDA"> VOLTAR </a></p>"; //2 DELETANDO DADOS INSERIDOS EM CASO DE ERRO $id = $id_dadosbank; $busca_delete = $pdo -> prepare('DELETE * FROM clientes_pf WHERE id=:id'); $busca_delete -> bindValue(":id",$id); $busca_delete -> execute(); endif; //else: echo "<p align='center'><strong>DADOS DO CLIENTE JÁ EXISTEM NA BASE DE DADOS!</strong></p><br><br>"; echo "<p align='center'><a href="INFORMAÇÃO REMOVIDA"> VOLTAR </a></p>"; //2 DELETANDO DADOS INSERIDOS EM CASO DE ERRO $id = $id_dadosbank; $busca_delete = $pdo -> prepare('DELETE * FROM clientes_pf WHERE id=:id'); $busca_delete -> bindValue(":id",$id); $busca_delete -> execute(); //endif; else: echo "<p align='center'><strong>FALHA NA INSERÇÃO DE DADOS BANCÁRIOS!</strong></p><br><br>"; echo "<p align='center'><a href="INFORMAÇÃO REMOVIDA"> VOLTAR </a></p>"; endif; else: echo "<p align='center'><strong>DADOS BANCÁRIOS JÁ EXISTEM NA BASE DE DADOS!</strong></p><br><br>"; echo "<p align='center'><a href="INFORMAÇÃO REMOVIDA"> VOLTAR </a></p>"; endif; /*-------------------------------------------------- RETORNO PARA FALHAS ---------------------------------------------------*/ }catch(PDOException $e){ echo "<p>ERRO NA CONEXAO DE INSERÇÃO DE REGISTROS DE DADOS CLIENTE PF</p></br></br>"; //DUMP DO ERRO //var_dump($e); //Método de teste para retornar mensagem de erro da conexão em PDO echo $e -> getMessage(); //Método de teste para retornar o código do erro da conexão em PDO //echo $erroPDO -> getCode(); /*######################################DICAS##################################### SEMPRE VERIFICAR O VAR_DUMP DO ERRO PARA SABER QUE INFORMAÇÕES PODE RECUPERAR */ } ?> Testei com a captura de id com o método nativo de PDO, porém, me retorna o seguinte erro: ERRO NA CONEXAO DE INSERÇÃO DE REGISTROS DE DADOS CLIENTE PF SQLSTATE[42S22]: Column not found: 1054 Coluna '$id_dadosbank' desconhecida em 'field list'
  2. eacpaula

    Problema - Inserção de tabelas relacionadas - PHP e MYSQL

    Oi Ander e Osmar obrigado pelas respostas. Sobre PDO, realmente é a melhor prática, porém estou tentando utilizar estas três funções, deixarei a forma em PDO para fazer mais adiante, pois, é um pouco mais complexa de momento, mas, realmente vou fazer. Quanto ao método nativo em php com "mysql_insert_id" estive testando, porém, a função está retornando sempre zero, verifiquei como estão minhas colunas de autoincrement, e estão de acordo para o funcionamento da função. Não sei o que pode estar ocorrendo, fiz como sugeriu anderluz. outra questão, como neste momento é um cadastro(insert) para cadastrar os clientes e dados bancários, a tabela de títulos está relacionada, porém, não vai ter um cadastro(insert) junto com estás tabelas, o que faz com que no primeiro cadastro de clientes e dados bancários o "titulo_id" fique em branco, porém, o banco não aceita que eu faça insert com essa coluna em branco, como posso contornar isto?
  3. Olá Pessoal! Estou com problema para inserção de tabelas relacionadas, pesquisei diversos sites e fóruns para tentar entender qual seria a melhor forma. Então, vi que precisaria capturar o último ID inserido da tabela pai (coluna autoincrement) para chave pk da tabela filha, encontrei os seguintes métodos: LAST_INSERT_ID() - MYSQL mysql_insert_id() - PHP lastinserid() - PDO Realmente, tive uma exaustiva tentativa de uso destes métodos, não sou experiente com PHP e tenho bastante dificuldade. Além deste problema de inserção de tabelas relacionadas, nesta ocasião a uma "coluna pk" que não vou precisar preencher, porém, como é obrigatório o preenchimento, após não saberei como proceder. Então vamos ao meu cenário: //DADOS BANCARIOSCREATE TABLE IF NOT EXISTS `dados_bancarios_pf` ( `id` int(11) unsigned NOT NULL, `banco` varchar(50) NOT NULL, `agencia` varchar(15) NOT NULL, `conta` varchar(15) NOT NULL, `tipo` varchar(30) NOT NULL, `titular` varchar(50) NOT NULL) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;//CLIENTESCREATE TABLE IF NOT EXISTS `clientes_pf` ( `id` int(11) unsigned NOT NULL, `banco_id` int(11) unsigned NOT NULL, `titulo_id` int(11) unsigned NOT NULL, `nome` varchar(20) NOT NULL, `sobrenome` varchar(50) NOT NULL, `nome_completo` varchar(70) NOT NULL, `cpf` varchar(11) NOT NULL, `rg` varchar(10) NOT NULL, `cep` varchar(8) NOT NULL, `endereco` varchar(45) NOT NULL, `bairro` varchar(30) NOT NULL, `cidade` varchar(50) NOT NULL, `estado` varchar(30) NOT NULL, `pais` varchar(30) NOT NULL, `telefone_residencial` varchar(11) NOT NULL, `celular` varchar(11) NOT NULL, `email` varchar(50) NOT NULL, `cargo` varchar(30) NOT NULL, `sexo` varchar(12) NOT NULL, `estado_civil` varchar(12) NOT NULL, `data_nascimento` date NOT NULL) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1; a coluna abaixo, no cadastro de clientes não precisa ser iniciada visto que de primeiro momento é só cadastro de clientes `titulo_id` int(11) unsigned NOT NULL, Quanto ao código php que segue abaixo, está bem básico, sei que posteriormente tenho que ver algo para consultar se os dados já existem e deixar de uma forma mais consistente, porém, de momento gostaria de entender bem este insert com tabelas relacionadas: <?php include "../include/conecta_banco.inc"; require_once ('../include/funcoes.php'); conexao(); //dados bancarios $banco = $_POST["bancoPF"]; $agencia = $_POST["agenciaPF"]; $conta = $_POST["contaPF"]; $tipo = $_POST["tipoBancoPF"]; $titular = $_POST["titularPF"]; $string_sql_banco = "INSERT INTO dados_bancarios_pf (banco, agencia, conta, tipo, titular) VALUES ('$banco','$agencia','$conta','$tipo','$titular')"; /*RECUPERANDO ÚLTIMO ID - TENTATIVA COM FUNÇÃO NATIVA PHP $ref_id_banco = mysql_insert_id($link); printf ("Nova gravação dos dados bancários inserida com o id %d.\n", $ref_id_banco); */ //RECUPERANDO ÚLTIMO ID - TENTATIVA COM COMANDO MYSQL $consult_last_id = "SELECT LAST_INSERT_ID()"; //CONSULTA $resultado = mysql_query($consult_last_id) or die ("PROBLEMAS COM A CONSULTA; ".mysql_error()); // CONSULTA ENVIADA AO SGBD $ref_id_banco = mysql_fetch_row($resultado); // RECUPERANDO O QUE FOR RETORNADO EM UM ARRAY - $ref_id_banco echo $ref_id_banco[0]; /* //RECUPERANDO ÚLTIMO ID - TENTATIVA 2 COM COMANDO MYSQL $consult_last_id = "SELECT LAST_INSERT_ID() AS id FROM dados_bancarios_pf"; $resultado = mysql_query($consult_last_id) or die ("PROBLEMAS COM A CONSULTA; ".mysql_error()); $ref_id_banco = mysql_result ($resultado, 0, 'id'); echo $ref_id_banco[0]; */ //dados do cliente $nome = $_POST["nomePF"]; $sobrenome = $_POST["sobrenomePF"]; $nome_completo = $_POST["nomeCompletoPF"]; $rg = $_POST["rgPF"]; $cpf = $_POST["cpfPF"]; $cep = $_POST["cepPF"]; $endereco = $_POST["enderecoResidencial"]; $bairro = $_POST["bairroPF"]; $cidade = $_POST["cidadePF"]; $estado = $_POST["estadoPF"]; $pais = $_POST["paisPF"]; $telefone_residencial = $_POST["telPF"]; $celular = $_POST["celPF"]; $email = $_POST["emailPJ"]; $cargo = $_POST["cargoPF"]; $sexo = $_POST["sexoPF"]; $estado_civil = $_POST["estadoCivilPF"]; $data_nascimento = $_POST["dataNascimentoPF"]; $string_sql_cliente = "INSERT INTO clientes_pf (id, banco_id, titulo_id, nome, sobrenome, nome_completo, cpf, rg, cep, endereco, bairro, cidade, estado, pais, telefone_residencial, celular, email, cargo, sexo, estado_civil, data_nascimento) VALUES (null,'$ref_id_banco',null,'$nome','$sobrenome','$nome_completo','$cpf','$rg','$cep','$endereco','$bairro','$cidade','$estado','$pais','$telefone_residencial','$celular','$email','$cargo','$sexo','$estado_civil','$data_nascimento')"; if (inserir($string_sql_banco)){ if (inserir($string_sql_cliente)){ echo ('Registros incluídos com sucesso! <a href="">voltar</a>'); }else{ echo('<p align=center>Erro durante a inserção de registros! - Cliente PF <a href="">voltar</a></p>'). mysql_error(); } }else{ echo('<p align=center>Erro durante a inserção de registros! - Dados Bancários <a href="">voltar</a></p>'). mysql_error(); }?> Então como podem ver constam as minhas tentativas de captura, sendo que a mais assertiva foi a "primeira tentativa com comando", pelas minhas pesquisas, ví que melhor opção seria com o comando de SQL, pois: Retorna sempre o último ID num sério de inserções múltiplas e é o mais seguro; Quero fazer esta implementação sem gambiarras usando um select para ver o último ID inserindo, quero sempre implementar com as melhores práticas possíveis para poder levar este conhecimento em qualquer cenário, agradeço muiiiiitíssmo a ajuda! Se alguém puder me dar um help?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.