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");
}
}
?>
Eu tenho um CRUD, porem no insert eu quero verificar se os dados existem na tabela, se existir ele não insere os mesmos dados. Pois a minha intenção é fazer um sistema de Cadastro e Login. Segue o código abaixo.
<?php
require_once 'Crud.php';
class Usuarios extends Crud {
protected $table = 'usuarios';
private $usuario;
private $email;
private $senha;
public function setUsuario($usuario) {
$this->usuario = $usuario;
}
public function setEmail($email) {
$this->email = $email;
}
public function setSenha($senha) {
$options = [
'cost' => 11,
];
$this->senha = password_hash($senha, PASSWORD_BCRYPT, $options);
if(password_verify($senha, $this->senha)){
return true;
}
return false;
}
public function insert() {
$sql = "INSERT INTO $this->table (usuario, email, senha) VALUES (:usuario, :email, :senha)";
$stmt = DB::prepare($sql);
$stmt->bindParam(':usuario', $this->usuario);
$stmt->bindParam(':email', $this->email);
$stmt->bindParam(':senha', $this->senha);
return $stmt->execute();
}
public function update($id) {
$sql = "UPDATE $this->table SET usuario = :usuario, email = :email, senha = :senha WHERE id = :id";
$stmt = DB::prepare($sql);
$stmt->bindParam(':usuario', $this->usuario);
$stmt->bindParam(':email', $this->email);
$stmt->bindParam(':senha', $this->senha);
$stmt->bindParam(':id', $id);
return $stmt->execute();
}
}
Eu sei que tenho que dar um SELECT na tabela e verificar se existe com um rowCount... eu acho, não tenho certeza.
Como eu posso fazer isso? Ah, e também queria verificar se os dados estão preenchidos. Lá na página registro.php eu fiz assim.
<?php
$usuarios = new Usuarios();
if(isset($_POST["usuario"]) && isset($_POST["email"]) && isset($_POST["senha"]) && isset($_POST["checkregistro"])) {
if(empty($_POST["usuario"]) OR empty($_POST["email"]) OR empty($_POST["senha"]) OR empty($_POST["checkregistro"])) {
echo '<div id="register-erro" style="display:none;z-index:1000;">Ainda tem campos vazios.</div>';
}else {
if(isset($_POST['cadastrar'])) {
$usuario = $_POST["usuario"];
$email = $_POST["email"];
$senha = $_POST["senha"];
$usuarios->setUsuario($usuario);
$usuarios->setEmail($email);
$usuarios->setSenha($senha);
#Insert
if($usuarios->insert()) {
echo '<div id="registro-feito" style="display:none;z-index:1000;">Conta registrada com sucesso!</div>';
}
}
}
}
?>
O que devo fazer para verificar se existe os dados no banco? E como fazer, me da uma dica, por favor.