Oi, pessoal tudo bem com vocês?
Estou com um problema com um projeto que tenho que apresentar na quarta-feira.
Estou desenvolvendo um projeto de fórum de discussão. Até aí tudo bem, só que quando eu chamo o método inserir que está na fachada, quando chega no repositório de dados ele simplesmente não mostra nenhum valor, tentei mudar de diversas maneiras o meu código e até agora nada. Será que alguém poderia me ajudar?
Código da fachada:
$fachada = new Fachada();
try{
$usuario = new Usuario();
$usuario->setNome($_POST['nome']);
$usuario->setDataNascimento($_POST['datanascimento']);
$fachada->inserirUsuario($usuario);
echo "usuario cadastrado com sucesso!";
}catch(UsuarioCadastroException $e){
}
código do repositório
//Antes eu tinha codificado assim.
public function inserirUsuario(Usuario $usuario){
}
// depois mudei para isto
public function inserirUsuario($usuario){
if($usuario instanceof Usuario){
try{
$sql = "";//Declaração sql
$resultado = mysql_query($sql);
}catch(Exception $e){
}
}
}
Ele simplesmente não manda os valores que está na página php para o repositório.
perdeu
Dezembro 9, 2012, 12:51pm
#2
ja tentou imprir a consulta sql?
pode ser q os nomes dos campos ($_POST) estejam errados.
WRYEL
Dezembro 9, 2012, 1:19pm
#3
[quote=perdeu]ja tentou imprir a consulta sql?
pode ser q os nomes dos campos ($_POST) estejam errados.[/quote]
++
aproveite, e veja o que está vindo no seu $_POST fazendo um print_r($_POST).
Agora o menos importante:
se for pra usar mysql_function, prefira usar mysql[color=red]i[/color]_functions, pois a mesma, é a versão mais atualizada.
se tiver tempo, ignore a sugestão acima, e use PDO, esta, já tem as proteções básicas contra SQL Injection, coisa que a mysql e mysqli não tem.
se não me falha a memória (3 mais anos que não programo em PHP), a linguagem não é fortemente tipada, impedindo que você faça seu Usuario $usuario …
Essa fachada que você cita, não seria seu BO (Business Object) de Usuario ? Mais sobre fachada aqui: http://en.wikipedia.org/wiki/Facade_pattern
Você esta passano no parametro uma Classe que esta instanciado atraves de um objeto, isso esta ok.
O problema é que no seu Looping vc esta fazendo na sua classe, mas isso não funciona…
Você tem que fazer um Looping em um atributo de sua classe, caso contrário, vc esta fazendo um Looping em nada…
Pq tem q ser um atributo? pq ele tem um valor.
Para ter certeza, coloque um comando de exceção
Algo desse tivo;;
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
die('Query Inválida: ' . mysql_error());
}
Código do meu repositório de dados
require_once('/utilitarios/GerenciarConexao.class.php');
require_once('/classesbasicas/Usuario.class.php');
require_once('/utilitarios/UsuarioCadastroInserirException.php');
require_once('/utilitarios/ConsultaErroException.php');
require_once('/utilitarios/UsuarioCadastroAlterarException.php');
require_once('/utilitarios/UsuarioCadastroExcluirException.php');
class RepositorioUsuario{
private $con;
public function __construct(){
$this->con = GerenciarConexao::getConexao();
}
public function verificarExistencia($codigo){
$retorno = false;
try{
if(is_int($codigo)){
$sql = "Select codigo from usuario where codigo = '$codigo'";
$resultado = mysql_query($sql);
if($resultado){
$retorno = true;
}
}
}catch(Exception $e){
throw new ConsultaErroException("Erro ao tentar verificar a existencia do usuario.");
}
return $retorno;
}
public function inserir($usuario){
if($usuario instanceof Usuario){
try{
$sql = "Insert into usuario(nome, datanascimento, login, senha, email, estatus) Values(".$usuario->getNome().",".$usuario->getDataNascimento() . ",". $usuario->getLogin(). ",". $usuario->getSenha().",". $usuario->getEmail() . ",". "'1')";
$resultado = mysql_query($sql);
}catch(Exception $e){
throw new UsuarioCadastroInserirException("Erro ao tentar inserir os dados do usuario.");
}
}
}
public function alterar($usuario){
if($usuario instanceof Usuario){
try{
$sql = "Update usuario set nome = '$usuario->getNome()', datanascimento = '$usuario->getDataNascimento()', login = '$usuario->getLogin()', senha = '$usuario->getSenha()', email = '$usuario->getEmail()' where codigo = '$usuario->getCodigo()' and estatus = '1'";
$resultado = mysql_query($sql);
}catch(Exception $e){
throw new UsuarioCadastroAlterar("Erro ao tentar alterar os dados do usuario.");
}
}
}
public function excluir($usuario){
if($usuario instanceof Usuario){
try{
$sql = "Update usuario set estatus = '0' where codigo = '$usuario->getCodigo()' and estatus = '1'";
$resultado = mysql_query($sql);
}catch(Exception $e){
throw new UsuarioCadastroExcluirException("Erro ao tentar excluir os dados do usuario");
}
}
}
public function listar($usuario){
$listaUsuario = -1;
$contador = 0;
if($usuario instanceof Usuario){
try{
$sql = "Select * from usuario";
if($usuario->getNome() == ""){
if($usuario->getCodigo() > 0){
$sql . " where codigo = '$usuario->getCodigo()' and estatus = '1' order by codigo";
}else{
if($usuario->getDataNascimento() > 0){
$sql . " where datanascimento = '$usuario->getDataNascimento()' and estatus = '1' order by datanascimento";
}else{
if($usuario->getEmail() != ""){
$sql . " where email = '$usuario->getEmail()' and estatus ='1' order by email";
}else{
}
}
}
}else{
sql . "where estauts ='1' order by nome";
}
$resultado = mysql_query($sql);
while($linha = mysql_fetch_array($resultado)){
$listaUsuario[] = $linha;
}
}catch(Exception $e){
throw new ConsultaErroException("Erro ao tentar listar os dados do usuario");
}
}
return $listaUsuario;
}
}
É assim como está agora. eu só modifiquei algumas coisas.
o parâmetro de entrada de método estava assim:
public function inserirUsuario(Usuario $usuario){}//estava assim.
perdeu
Dezembro 9, 2012, 7:53pm
#7
lembre q vc tem colocar aspas no valores q n são integer
$sql = "Insert into usuario(nome, datanascimento, login, senha, email, estatus) Values(".$usuario->getNome().",".$usuario->getDataNascimento() . ",". $usuario->getLogin(). ",". $usuario->getSenha().",". $usuario->getEmail() . ",". "'1')";
imprimiu o valor de $sql?
Mas eu tinha colocado. e não adiantou.
perdeu
Dezembro 9, 2012, 11:19pm
#9
o excluir e alterar funcionam??
Não. Se o incluir não funcionou o alterar e o excluir também não funcionarão.
É que tem similaridades no código.
na código sql eu fiz o mesmo para o incluir e o alterar. os valores eu passei da mesma forma.
perdeu
Dezembro 10, 2012, 11:25am
#11
Realmente o problema é com a query.
Ela simplesmente não está pegando o valor.
Alguém sabe como eu faço para resolver o problema?