Ir para conteúdo

Arquivado

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

Luis_Carlos

Fatal error: Call to a member function prepare() on a non-object in C:

Recommended Posts

Olá, estou com um erro e não consigo resolver, segue o erro e codigo:

Fatal error: Call to a member function prepare() on a non-object in C:\wamp\www\av3\usuario_login.php on line 27

<?php include('header.php'); ?>

<?php include('conexao.php'); ?>

<form method='post'>
  <label>
    E-mail:
    <input type='email' name='email' size='30' maxlength='30' />
  </label>
  <label>
    Senha:
    <input type='password' name='senha' size='30' maxlength='30' />
  </label>
  <input type='submit' value='Entrar >>>' />
</form>

<br><br>

<?php
session_start();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  $email = $_POST['email'];
  $senha = md5($_POST['senha']);
  
  $sql = 'SELECT id_usuario, nome FROM usuarios WHERE email = ? AND senha = ?';
  
  $comando = $conexao->prepare($sql);  
  $comando->bind_param('ss', $email, $senha);
  $comando->execute();
  $comando->bind_result($id, $nome);
  
  // existe este email/senha?
  if ($comando->fetch()) {
    
    $usuario = array('id' => $id, 'nome' => $nome, 'email' => $email);
    $_SESSION['usuario'] = $usuario;
    header('Location: index.php');
  
  } else { // não existe
    echo "Usuário não encontrado. Tente novamente.";
  }
}
?>

<?php include('footer.php'); ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendo muito PHP, mas, olhando o erro e o código, parece que você está chamando erradamente esta função. Essa variável $conexao não deveria ser criada antes?

 

Espero que o pessoal possa te ajudar melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi Walter... em todo caso o codigo conexao.php esta abaixo, e na mesma pasta que os outros arquivos PHP.

<?php

$conexao = @mysql_connect('127.0.0.1','root','');
if (!$conexao) {
	die('Não foi possível Conectar: ' . mysql_error());
}
mysql_select_db('sistema_de_noticias', $conexao);

?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então o problema é a sua conexão.. a função mysql_connect() não tem o método prepare.. além do mais é absoleta. Procure programar usando mysqli ou PDO ..

 

abaixo segue um exemplo rápido para te esclarecer..

 

class.Connection.php

class Connection{

	public $ini;
	public $host;
	public $user;
	public $password;
	public $database;
	public $con;
	
	function Connection(){
		$this->ini = parse_ini_file('app.ini');
		$this->host = $this->ini['host'];
		$this->user =  $this->ini['user'];
		$this->password =  $this->ini['password'];
		$this->database = $this->ini['database'];
		
	}
	
	function getConnectionMysqli(){
		$this->con = new mysqli($this->host, $this->user, $this->password, $this->database);
		if (mysqli_connect_errno()) trigger_error(mysqli_connect_error());
		
		return $this->con;
	}



}

DAO

 

repare que meu método prepare() é do objeto da classe Connection que devolve uma conexão com mysqli

<?php

require_once('class.Usuario.php');
require_once('class.Connection.php');

class UsuarioDAO{

	private $con;

	function UsuarioDAO(){
		$this->con = (new Connection())->getConnectionMysqli();
	}
	
	function getCon(){
		return $this->con;	
	}

	function insertUsuario($usuario){
		$nome =  $usuario->getNome();
		$dataCadastro = $usuario->getDataCadastro();
		$dataAtualizacao = $usuario->getDataAtualizacao();
		$email = $usuario->getEmail();
		$registro = $usuario->getRegistro();
		try{
			$stmt = $this->con->prepare("INSERT INTO TB_USUARIO (NOME, DATA_CADASTRO, DATA_ATUALIZACAO, EMAIL, REGISTRO) VALUES (?,?,?,?,?)");
			$stmt->bind_param('sssss',$nome,$dataCadastro ,$dataAtualizacao ,$email ,$registro );
			$stmt->execute();
			$stmt->close();
			$this->con->close();
		}catch(Exception $e){
			echo "Um erro ocorreu : ".$e->getMessage();
		}
	}
	
	
}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela dica Walter, não usei essa forma pois para mim é um pouco avançada e teria que fazer outras alterações no código, mais alterei para mysqli e funcionou obrigado pela dica!!!! :)

 <?php
$conexao = new mysqli('localhost', 'root', '', 'sistema_de_noticias');
$conexao->set_charset('utf8');
if ($conexao->connect_error) {
  die('conexao falhou');
}
?>

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.