Rafael Laurindo Postado Fevereiro 6, 2010 Denunciar Share Postado Fevereiro 6, 2010 (editado) Galera, preciso muito de ajuda, bati a cabeça horas e horas, e não consigo resolver. Vou postar o código abaixo, ele está lento na hora de cadastar, e não consegue realizar um dos cadastros. Editado Fevereiro 8, 2010 por Rafael Laurindo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rafael Laurindo Postado Fevereiro 7, 2010 Autor Denunciar Share Postado Fevereiro 7, 2010 (editado) Olhem o código. No final de tudo depois de demorar alguns segundos, ele só cadastra os dados na tabela Pessoa e GenPessoa em Login não.A tela é esta. Está bem simples, só para testes.<?php//usar o require_once para chamar este arquivo externamente$login = $_POST['txtLogin'];require_once '../lib/sample/Main.php';$main = new sample_Main();$_db = $main->get_conn();$cidades = "select *from cidade";if ($login){ $genPessoa = new sample_GenPessoa(); $genPessoa = $genPessoa->retornaGenPessoa($login); $nome = $genPessoa['nome']; $email = $genPessoa['email']; $sexo = $genPessoa['sexo']; $naturalidade = $genPessoa['id_cidade'];}?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Teste</title><script> function validarLogin(login){ //usar ajax }</script></head><body><div align="right"><a href="#" onclick="">Sair</a></div><!--<form method="POST" action="../lib/sample/Login.php">--><form method="POST" action="../lib/sample/GenPessoa.php"><fieldset> <legend>Dados da Pessoa</legend> Nome: <input type="text" name="txtNome" maxlength="10" value="<?= $nome ?>" /> <br/> login: <input type="text" name="txtLogin" id="txtLogin" maxlength="45" value="<?= $login ?>"/><!-- onblur="validarLogin(this.id)" --> <br/> senha: <input type="password" name="txtSenha" maxlength="45" value="<?= $senha ?>" /> <br/> Sexo: <br /> M <input type="radio" name="rbSexo" value="M" <?php if($sexo == 'M') echo "checked=\"checked\"" ?> /> <br/> F <input type="radio" name="rbSexo" value="F" <?php if($sexo == 'F') echo "checked=\"checked\"" ?> /> <br/><br/> Naturalidade: <select name="cbNaturalidade"> <option value="">selecione...</option> <?php $stmt = $_db->query($cidades); while ($cidade = $stmt->fetch()) { if($naturalidade == $cidade['id']) echo "<option value=\"$cidade[id]\" selected=\"selected\">$cidade[nome]</option>"; else echo "<option value=\"$cidade[id]\">$cidade[nome]</option>"; } ?> </select> <br /><br /> <input type="submit" id="submit" name="submit" value="Salvar"/></fieldset></form></body></html>[/codebox]Login.php[code]<?php require_once 'Main.php'; class sample_Login { public $login, $senha; protected $_db; public function __construct() { $main = new sample_Main(); $this->_db = $main->get_conn(); } public function obterLogin() { $this->login = $_POST['txtLogin']; $this->senha = md5($_POST['txtSenha']); } public function adicionarLogin($id) { $this->obterLogin(); $add = " insert into login(id_pessoa, login, senha) values('$id', '$this->login', '$this->senha') "; $stmt = $this->_db->prepare($add); if ($stmt->execute()){ return true; } return false; } }[/code] Pessoa.php [code]<?php abstract class sample_Pessoa { protected $_db, $id=NULL, $nome, $id_cidade; abstract function obterPessoa(); abstract function adicionarPessoa($query_pessoa); }[/code]GenPessoa.php[codebox]<?phprequire_once 'Main.php'; //Responsável por fazer a conexão com o bancoclass sample_GenPessoa extends sample_Pessoa{ public $sexo; public function __construct() { $main = new sample_Main(); $this->_db = $main->get_conn(); if(!empty($_POST['submit'])) $this->adicionarGenPessoa(); } public function obterPessoa() { $this->nome = $_POST['txtNome']; $this->id_cidade = $_POST['cbNaturalidade']; } public function adicionarPessoa(){ $this->obterPessoa(); $add = " insert into pessoa(id, nome, id_cidade) values ('$this->id', ?, ?) "; $stmt = $this->_db->prepare($add); $stmt->bindParam(1, $this->nome, PDO::PARAM_STR); $stmt->bindParam(2, $this->id_cidade, PDO::PARAM_INT); if ($stmt->execute()){ $id = " select max(id) from pessoa "; if ($this->id = $this->_db->query($id)->fetchColumn()){ return true; } return false; } return false; } public function obterGenPessoa(){ $this->sexo = $_POST['rbSexo']; } private function adicionarGenPessoa() { $this->_db->beginTransaction(); //inicia uma transação. Método da classe PDO (PHP Data Object) do PHP $this->obterGenPessoa(); $query_pessoa = " insert into pessoa(id, nome, id_cidade) values ('$this->id', ?, ?) "; if(!$this->adicionarPessoa($query_pessoa)) $this->_db->rollback(); $add = " insert into genPessoa(id_pessoa, sexo) values ('$this->id', ?) "; $stmt = $this->_db->prepare($add); $stmt->bindParam(1, $this->sexo, PDO::PARAM_STR); if (!$stmt->execute()) $this->_db->rollBack(); $login = new sample_Login(); //aparentemente o script trava aqui. Se eu comentar esse último if funciona normalmente. if (!$login->adicionarLogin($this->id)) $this->_db->rollBack(); else echo 'Todos os dados foram cadastrados com sucesso!'; $this->_db->commit(); //encerra a transação }}$genPessoa = new sample_GenPessoa();Existem outros métodos, mas não vem ao caso, pois somente estes estão envolvidos no problema em questão. Editado Fevereiro 8, 2010 por Rafael Laurindo Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Rafael Laurindo Postado Fevereiro 8, 2010 Autor Denunciar Share Postado Fevereiro 8, 2010 Bom galera, eu mesmo resolvi depois de muito lutar. Quando a classe Login é utilizada ela estava criando uma conexão também, conflitando assim as duas, solução usar o Design Pattern Singleton na classe Connection e na classe Main. Abraços até a próxima. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Rafael Laurindo
Galera, preciso muito de ajuda, bati a cabeça horas e horas, e não consigo resolver. Vou postar o código abaixo, ele está lento na hora de cadastar, e não consegue realizar um dos cadastros.
Editado por Rafael LaurindoLink para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.