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 Guss
      A programadora Cafiaspirina Cruz deseja que todos os elementos <h2> de sua página ganhassem a classe "titulo", para que depois a fonte dos <h2> pudesse ser modificada por um CSS,  deixando-os com um destaque específico. Escreva abaixo um código em Javascript para que todos os <h2> da página ganhem a classe "titulo" de uma única vez?
    • By Guss
      Agradeço quem puder me ajudar a responder essa questão de PHP <3.
      Desenvolva um programa utilizando PHP e  exibir os resultados desse programa que tenha todas as classes suficientes para que:
       
      Represente o nome completo de uma pessoa, composto de três strings (nome próprio, nome do meio e nome da família). 
       
      Escreva nessa classe o método rubrica que retorna somente as iniciais do nome completo em caracteres minúsculos,  Escreva nessa classe o método assinatura que retorna as iniciais dos nomes próprio e do meio (com pontos)  Escreva nessa classe um método que retorne o nome de família completo.  Por exemplo, se o nome da pessoa representado por essa classe for “Marijuana Pepsi Jackson”, o método rubrica deve retornar ”mpj” e o método assinatura deve retornar ”M.P.Jackson”. Para facilitar, considere armazenar os três nomes em strings separadas.
    • By Guss
      Boa noite galera, to com um trabalho para entregar daqui a pouco e gostaria da ajuda de vocês a me ajudar a resolver essa questão:
      Desenvolva um programa utilizando PHP para exibir os resultados desse programa que tenha todas as classes suficientes para que:
       
      Exista uma classe DiferencaData, que possui um método chamado calculaDias, que recebe como parâmetro duas datas e calcula a diferença em dias entre essas datas. Considere que sempre a primeira data fornecida é maior do que a segunda. Considere para efeitos de simplificação que todo mês tem 30 dias e um ano com 365 dias
    • By afetur
      Olá,
      Estou precisando inserir alguns dados diretamente no banco saindo dos campos inputs. Preciso que cada item do array seja
      cadastrado no banco, por exemplo o cliente vai comprar 3 ingressos, que os nomes dos 3 ingressos apareçam um a um nos registros.
       Ajustei os códigos abaixo, mas não funciona. Primeiro veja como está o html:
      <label for="nomeingresso">Ingresso:</label> <input type="text" id="ingresso" name="ingresso[]" placeholder="Ex.: Ingresso Conferência" class="form-control name_list" value="<?php echo $row_ingressos['ingresso'];?>" readonly required /> <label for="valoringresso">Valor:</label> <input type="text" class="form-control" id="valor" name="valor[]" placeholder="Ex.: 1.150,00" value="<?php echo $row_ingressos['valor'];?>" readonly required> <label for="nomeingresso">Quantidade:</label> <input type="number" id="quantidade" name="quantidade[]" class="form-control name_list" value="" min="0" required /> <input name="idingresso[]" type="hidden" id="idingresso" value="<?php echo $row_ingressos['id_ingresso']; ?>">  
      Bom, no código abaixo só funciona se eu tirar o foreach, com ele o código não insere os dados no banco. Estou testando o cadastro
      apenas com o campo ingresso para ver se funciona para depois adicionar os campos valor e quantidade, portanto não insere.
       
      function salvarIngresso(){ $ingresso = $_POST['ingresso']; $valor = $_POST['valor']; $quantidade = $_POST['quantidade']; try { // begin the transaction $this->pdo->beginTransaction(); // our SQL statements foreach($ingresso as $key => $ing){ $this->pdo->exec("INSERT INTO evn_pedidos_ing (ing) VALUES ('$ing');"); } // commit the transaction $this->pdo->commit(); echo "New records created successfully"; } catch(PDOException $e) { // roll back the transaction if something failed $this->pdo->rollback(); echo "Error: " . $e->getMessage(); } }  
      A função de conexão é esta abaixo:
       
      function __construct(){ $this->pdo = new PDO('mysql:host='.$this->host.';dbname='.$this->db, $this->usuario, $this->senha); }
      Para entender melhor qual é o passo a passo do que estou tentando fazer tem um link abaixo. Ao clicar no botão "Inscrever" surge
      o lightbox do Pagseguro, então ele automaticamente insere no banco. Vale ressaltar que só não funciona com o FOREACH, sem esta
      função o código cadastra normalmente, porém só leva o primeiro item do array.

      Agradeço pela ajuda.
×

Important Information

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