Jump to content
Lucas Antonio

Erro com conexão

Recommended Posts

Estou com um problema de rowCount bom vou explicar da melhor forma possível meu erro e irei mostrar abaixo, eu fiz a conexão externa por config.php com class e na hora deu puxar na index.php da erro de rowCount e se não declaro ela na index ele não procede.

 

Código do config.php

<?php

class Conexao{

	private $db;
	public function __construct(){

		try{

			$this->db = new PDO("mysql:dbname=parceiros;host=localhost", "root", "root");

		}catch(PDOException $e){
			echo "FALHA: ".$e->getMessage();
		}
	}

	public function verificar($email, $senha){

		$sql = ("SELECT * FROM usuarios WHERE email = ':email' AND senha = ':senha' ");
		$sql = $this->db->prepare($sql);
		$sql->bindValue(':email', $email);
		$sql->bindValue(':senha', $senha);

		$sql->execute();

		 $array = array();


    		if($sql->rowCount() > 0){
        		$array = $sql->fetch();

        		$_SESSION['id'] = $array['id'];
    		}  

    		return $array;
    }

}

Código do index.php

<?php
 require "asset/config/config.php";

 if(isset($_POST['mail']) && empty($_POST['mail']) == false){

    $email = addslashes($_POST['mail']);
    $senha = md5(addslashes($_POST['pass']));
    $dsn = new Conexao();
    $sql = $dsn->verificar($email, $senha);
    
   if($dsn->rowCount() > 0){

        $_SESSION['id'] = $array['id'];

        header("Location: painel/index.php");
   }
}
?>

 

Share this post


Link to post
Share on other sites

config.php : Troque:

':email' AND senha = ':senha'

config.php: por (removi as aspas):

:email AND senha = :senha

index.php: Troque:

if($dsn->rowCount() > 0){

index.php: por:

if(!empty($sql)){

Nessa forma atual que você construiu o código não é possível usar rowCount() usando o método verificar(), pq rowCount() não existe, ele retorna como método indefinido. Nesse contexto, você tem que verificar se o retorno de verificar() é vazio, usando empty(), pra saber se retornou algum resultado ou se não retornou nada, pq você deu essa responsabilidade pra variável chamada $array dar o retorno da busca lá no método verificar().

Share this post


Link to post
Share on other sites
6 horas atrás, BrunoBit disse:

config.php : Troque:


':email' AND senha = ':senha'

config.php: por (removi as aspas):


:email AND senha = :senha

index.php: Troque:


if($dsn->rowCount() > 0){

index.php: por:


if(!empty($sql)){

Nessa forma atual que você construiu o código não é possível usar rowCount() usando o método verificar(), pq rowCount() não existe, ele retorna como método indefinido. Nesse contexto, você tem que verificar se o retorno de verificar() é vazio, usando empty(), pra saber se retornou algum resultado ou se não retornou nada, pq você deu essa responsabilidade pra variável chamada $array dar o retorno da busca lá no método verificar().

 

Ele não conecta agora só retorna pro login denovo

Share this post


Link to post
Share on other sites
class Conexao{

	private $db;
	public function __construct(){

		try{

			$this->db = new PDO("mysql:dbname=parceiros;host=localhost", "root", "root");

		}catch(PDOException $e){
			echo "FALHA: ".$e->getMessage();
		}
	}

	public function verificar($email, $senha){

		$sql = ("SELECT * FROM usuarios WHERE email = :email AND senha = :senha ");
		$sql = $this->db->prepare($sql);
		$sql->bindValue(':email', $email);
		$sql->bindValue(':senha', $senha);

		$sql->execute();

		 $array = array();


    		if($sql->rowCount() > 0){
        		$array = $sql->fetch();

        		$_SESSION['id'] = $array['id'];
    		}  

    		return $array;
    }

}
require "asset/config/config.php";

 if(isset($_POST['mail']) && empty($_POST['mail']) == false){

    $email = addslashes($_POST['mail']);
    $senha = md5(addslashes($_POST['pass']));
    $dsn = new Conexao();
    $sql = $dsn->verificar($email, $senha);
    
   if(!empty($sql)){

        $_SESSION['id'] = $array['id'];

        header("Location: painel/index.php");
   }
}

 

  • Confuso 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Sapinn
      Recentemente, o seguinte erro estava aparecendo em meu site 'max_user_connections', depois de muitas pesquisas descobri que o problema era devido a uma conexão persistente de banco de dados, então o removi do meu código e funcionou. Outro problema surgiu agora, meu lastInsertId () está retornando 0. Quando eu uso a conexão persistente, ele funciona se eu removê-lo, ele falha. Eu nem sei mais o que fazer. Vou deixar as partes mais importantes do meu código aqui:
      Conexão:
      public function __construct()     {         $dsn = 'mysql:host='.$this->host.';dbname='.$this->bank;            try {             $this->dbh = new PDO($dsn,$this->user,$this->password);             $this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);                               } catch (PDOException $e) {             print "Error!: " . $e->getMessage() . "<br/>";             die();         }               }     public function lastId Inserted(){         return $this->dbh->lastInsertId();     }  
      Pesquisando pelo último Id:
       
       if($this->saleModel->store($data)):                             $sale_id = $this->db->lastId Inserted();                                                         $data['sale_id'] = $sale_id;                             $this->sellModel->sellProduct($data);                             $total = $stock->quant_product - $data['quant_sale'];                             $this->ProductModel->decreaseSales($data['product_id'],$total);                             Url::redirect('sales/sellProducts/'.$sale_id.'');                         endif;  
    • By Sapinn
      Estou precisando salvar fotos dos usuários de um sistema e não estou conseguindo fazer com OO já assisti video aulas e li algumas matérias mas sempre dá erro. Alguém sabe algum jeito de se fazer?? Eu até tentei mas fica sempre com erro, vou postar aqui talvez tenha algo que eu esteja fazendo errado.
       
      class para salvar a foto:
         private function salvarFoto($foto){         $fotos = $_FILES['foto_admin'];         $fotoDir = "imagens/fotos_admins/";         $fotoPath = $fotoDir . basename($foto['foto_admin']['name']);         $fotoTmp = $foto['foto_admin']['tmp_name'];         if(move_uploaded_file($fotoTmp, $fotoPath)):             return $fotoPath;         else:             return false;         endif;     } E estou chamando ela assim:
       $upload = $this->salvarFoto($_FILES);                 if(gettype($upload) == 'string'):                     $dados['foto_admin'] = $upload;                 endif;  
      E o erro é o seguinte: move_uploaded_file(imagens/fotos_admins/sapinn.jpg): failed to open stream: No such file or directory in
       
      Não sei o que está errado a pasta imagens/fotos_admins está dentro da minha pasta Controller
    • By Sapinn
      Boa pessoal. Então, estou fazendo um sistema para uma loja de manutenção de aparelhos eletrônicos, e eu tenho um formulário de cadastro onde eu posso inserir os dados de um cliente e os dados do seu aparelho. E eu consigo cadastrar simultaneamente cada um em suas respectivas tabelas. O que eu gostaria de fazer era assim que cadastra-se o cliente pega-se o seu id( Nesse caso o ultimo id inserido) e inserisse na tabela serviços junto. No PDO tem um jeito de fazer isso que é usando o lastInsertId() mas eu não estou sabendo como retornar esse ultimo id para fazer essa inserção
    • By acdestefani
      Olá pessoal!
      Peguei alguns códigos na internet para para estudar um pouco e aproveitei para desenvolver um sisteminha simples aqui onde eu trabalho. Consegui desenvolvê-lo usando esse arquivo de conexão:
      <?php /************************************************************************************************************* * @author William F. Leite * * Data: 20/06/2014 * * Descrição: Classe elaborada com o objetivo de auxlilar nas operações CRUDs em diversos SGBDS, possui * * funcionalidades para construir instruções de INSERT, UPDATE E DELETE onde as mesmas podem ser executadas * * nos principais SGBDs, exemplo SQL Server, MySQL e Firebird. Instruções SELECT são recebidas integralmente * * via parâmetro. * *************************************************************************************************************/ /* * Constantes de parâmetros para configuração da conexão */ define('SGBD', 'mysql'); define('HOST', 'localhost'); define('DBNAME', 'contratos_rh'); define('CHARSET', 'utf8'); define('USER', 'tonhao'); define('PASSWORD', '100375'); define('SERVER', 'linux'); class conexao { /* * Atributo estático de conexão */ private static $pdo; /* * Escondendo o construtor da classe */ private function __construct() { // } /* * Método privado para verificar se a extensão PDO do banco de dados escolhido * está habilitada */ private static function verificaExtensao() { switch(SGBD): case 'mysql': $extensao = 'pdo_mysql'; break; case 'mssql':{ if(SERVER == 'linux'): $extensao = 'pdo_dblib'; else: $extensao = 'pdo_sqlsrv'; endif; break; } case 'postgre': $extensao = 'pdo_pgsql'; break; endswitch; if(!extension_loaded($extensao)): echo "<h1>Extensão {$extensao} não habilitada!</h1>"; exit(); endif; } /* * Método estático para retornar uma conexão válida * Verifica se já existe uma instância da conexão, caso não, configura uma nova conexão */ public static function getInstance() { self::verificaExtensao(); if (!isset(self::$pdo)) { try { $opcoes = array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'); switch (SGBD) : case 'mysql': self::$pdo = new \PDO("mysql:host=" . HOST . "; dbname=" . DBNAME . ";", USER, PASSWORD, $opcoes); break; case 'mssql':{ if(SERVER == 'linux'): self::$pdo = new \PDO("dblib:host=" . HOST . "; database=" . DBNAME . ";", USER, PASSWORD, $opcoes); else: self::$pdo = new \PDO("sqlsrv:server=" . HOST . "; database=" . DBNAME . ";", USER, PASSWORD, $opcoes); endif; break; } case 'postgre': self::$pdo = new \PDO("pgsql:host=" . HOST . "; dbname=" . DBNAME . ";", USER, PASSWORD, $opcoes); break; endswitch; self::$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { print "Erro: " . $e->getMessage(); } } return self::$pdo; } public static function isConectado(){ if(self::$pdo): return true; else: return false; endif; } } O sistema está funcionando perfeitamente, porém gostaria de incluir a necessidade de fazer login para acessá-lo. Usei o código abaixo, que também consegui na internet:
      <?php session_start(); include('conexao.php'); if(empty($_POST['usuario']) || empty($_POST['senha'])) { header('Location: index.php'); exit(); } $usuario = mysqli_real_escape_string($conexao, $_POST['usuario']); $senha = mysqli_real_escape_string($conexao, $_POST['senha']); $query = "SELECT usuario FROM tab_usuarios WHERE usuario = '{$usuario}' AND senha = md5('{$senha}')"; $result = mysqli_query($conexao, $query); $row = mysqli_num_rows($result); if($row == 1) { $_SESSION['usuario'] = $usuario; header('Location: painel_professor.php'); exit(); } else { $_SESSION['nao_autenticado'] = true; header('Location: index.php'); exit(); } Porém esse login só funciona usando esse arquivo de conexão:
      <?php define('HOST', '127.0.0.1'); define('USUARIO', 'tonhao'); define('SENHA', '100375'); define('DB', 'contratos_rh'); $conexao = mysqli_connect(HOST, USUARIO, SENHA, DB) or die ('Não foi possível conectar'); Como poderia adaptá-lo para que funcione com o primeiro arquivo de conexão? Tentei por vários dias, mas como tenho pouca experiência com programação, não consegui.
      Desde já agradeço a ajuda de todos
       
    • By biza
      Viva pessoal, 
      Estou com um problema na execução de um filtro aos dados vindos da base de dados, sera que alguém me pode ajudar, os dados estão vindo para a pagina através do método $_POST,
      que são seleccionados através do carregamento de uma dropbox chamada 'select-segment', desta forma se o utilizador apertar o botão 'action' ele executa o filtro caso não aperte ele executa a seleção sem filtros, será que alguém me pode ajudar...
      O erro devolvido é o seguinte:
      Fatal error::  Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /Applications/MAMP/htdocs/cargeWebsite/carList.php:46
      Stack trace:
      #0 /Applications/MAMP/htdocs/cargeWebsite/carList.php(46): PDOStatement->execute()
      #1 /Applications/MAMP/htdocs/cargeWebsite/index.php(155): include('/Applications/M...')
      #2 {main}
        thrown in 
      $query .='SELECT * FROM tbl_vehicle AS v INNER JOIN tbl_brands AS b ON v.brand_id = b.id_brand INNER JOIN tbl_images AS i ON v.id_vehicle = i.vehicle_id INNER JOIN tbl_fuel AS f ON v.fuel_id = f.id_fuel WHERE v.active = :active'; if(isset($_POST['action'])){ if(isset($_POST['select-segment']) && $_POST['select-segment']!=''){ $segment_filter = $_POST['select-segment']; $query.= 'AND segment_id IN ("'.$segment_filter.'")'; } $query .='ORDER BY v.last_inser ASC'; }else{ $query .='ORDER BY v.last_inser ASC'; } if($_POST['lenght'] = -1){ $query_1 = 'LIMIT :inicio, :limite'; } $dbh = createPDO(); $statement = $dbh->prepare($query); $statement->bindValue(':active',$intermedio); $statement->execute(); $number_filter_row = $statement->rowCount(); $statement = $dbh->prepare($query . $query_1); $statement->bindValue(':inicio',(int)$init, PDO::PARAM_INT); $statement->bindValue(':limite',(int)$limite, PDO::PARAM_INT); $statement->execute(); foreach ($result as $row){ }  
×

Important Information

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