Ir para conteúdo
Fórum Script Brasil
  • 0

Tá tudo certo (eu acho), mas não grava no DB


Edilson Santiago

Pergunta

Amigos, estou criando um sistema de login com PHP e PDO. Já revirei de ponta a ponta o código. Ele está lendo o BD, porque quando tento cadastrar um e-mail já cadastrado, ele retorna o echo "email já cadastrado". Então, tudo indica que está conectando, mas quando tento cadastrar um novo, ele retorna echo "cadastro realizado com sucesso", mas não grava nada. Vou no BD, e não está lá. Vou postar o código. Se alguém puder dar uma força para encontrar o erro... abraços e muito obrigado.

Minha página de Cadastro:

<?php
   require_once 'classes/usuarios.php';
   $u = new Usuario;
?>
 
<htm lang="pt-br">
    <head>
        <meta charset="utf-8">
        <title>SGI - CADASTRO DE USUÁRIO</title>
        <link rel="stylesheet" href="css/stilo.css">
        <body>
            <div id="corpo-form">
            <h2>SGI - CADASTRO DE USUÁRIO</h2>
                <form method="POST">
                    <input type="text" name="nome" placeholder="Nome Completo" maxlength="220">
                    <input type="email" name="email" placeholder="Usuário" maxlength="520">
                    <input type="password" name="senha" placeholder="Senha"maxlength="12">
                    <input type="password" name="confsenha" placeholder="Confirmar Senha">
                    <input type="submit" name="postar" value="INSERIR">
 
            </form>
            </div>
            <?php 
           if(isset($_POST['postar']))
            {
                $nome = addslashes($_POST['nome']);
                $email = addslashes($_POST['email']);
                $senha = addslashes($_POST['senha']);
                $confsenha = addslashes($_POST['confsenha']);
                 
                if(!empty($nome) && !empty($email) && !empty($senha) && !empty($confsenha))
                {
                   $u->conectar("nome_do_meu_BD","localhost","usuario_do_meu_BD","senha_do_meu_BD"); 
                   if($u->msgErro == "")
                   {
                       if($senha == $confsenha){
                           if($u->cadastrar($nome, $email, $senha))
                           {
                                echo "Cadastro realizado com sucesso!";
                           }
                           else
                           {
                               echo "Email já cadastrado no sistema!";
                           }
                       }
                       else
                       {
                           echo "Senhas digitadas não correspondem.";
                       }
                   }
                   else
                   {
                       echo "Erro:" .$u->msgErro;
                   }
                }
                else
                {
                    echo "Por favor, preencha todos os campos.";
                }
            }
             
            ?>
        </body>
    </head>
     
     
</html>

Classes de Usuário:

<?php 
 
Class Usuario
{   
    private $pdo;
    public $msgErro = "";
     
    public function conectar($nome, $host, $usuario, $senha) {
        global $pdo;
        try
    {
        $dsn = 'mysql:host=' . $host . '; dbname=' . $nome;
        $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];
        $pdo = new PDO($dsn, $usuario, $senha, $options);
         
    } catch(PDOException $e) {
        $msgErro = $e->getMessage();
    }
    }
     
    public function cadastrar($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified)
    {
        global $pdo;
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e");
        $sql->bindValue(":e",$email);
        $sql->execute();
        if($sql->rowCount() > 0)
        {
            return false;
        }
        else
        {
            $created = date('d/m/y');
            $modified = date('d/m/y');
            $sql = $pdo->prepare("INSERT TO usuarios ($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified) VALUES (:n, :a, :p, :s, :n, :c, :m)");
                $sql->bindValue(":n",$nome);
                $sql->bindValue(":a",$email);
                $sql->bindValue(":p",md5($senha));
                $sql->bindValue(":s",1);
                $sql->bindValue(":n",1);
                $sql->bindValue(":c",$created);
                $sql->bindValue(":m",$modified);
                $sql->execute();
                return true;
        }
    }
     
    public function logar($email, $senha)
    {
        global $pdo;      
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e AND senha = :p");
        $sql->bindValue(":e",$email);
        $sql->bindValue(":p",md5($senha));
        $sql->execute();
        if($sql->rowCont() > 0)
        {
            $dado = $sql->fetch();
            session_start();
            $_SESSION["id"] = $dado["id"];
            return true;
        }
        else
        {
            return false;
        }
    }
     
}
?>

 

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Bom dia @Edilson Santiago

Quando fui fazer o teste aqui notei que você colocou variáveis para o comando INSERT no SQL:

$sql = $pdo->prepare("INSERT TO usuarios ($nome, $email, $senha, $situacoe_id, $niveis_acesso_id, $created, $modified) VALUES (:n, :a, :p, :s, :n, :c, :m)");

Eu troquei, para os possíveis nomes da tabela, ficando dessa maneira:

$sql = $pdo->prepare("INSERT TO usuarios ('nome', 'email', 'senha', 'situacoe_id', 'niveis_acesso_id', 'created', 'modified') VALUES (:n, :a, :p, :s, :n, :c, :m)");

Essa alteração mostrou que o cadastra precisava de mais parâmetros para realizar a função.

image.thumb.png.77a3f667794da3f001083db6c6165412.png

Olha se essas observações te ajudam.

Link para o comentário
Compartilhar em outros sites

  • 0

*Outra correção:

Notei que o SQL que faz o cadastro estava com uma palavra errada "TO usuarios" mudei para "INTO usuarios":

$sql = $pdo->prepare("INSERT INTO usuarios (nome, email, senha, situacoe_id, niveis_acesso_id, created, modified) VALUES (:n, :a, :p, :s, :n, :c, :m)");

 

usuarios.php

<?php 
 
Class Usuario
{   
    private $pdo;
    public $msgErro = "";
     
    public function conectar($nome, $host, $usuario, $senha) {
        global $pdo;
        try
    {
        $dsn = 'mysql:host=' . $host . '; dbname=' . $nome;
        $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'];
        $pdo = new PDO($dsn, $usuario, $senha, $options);
         
    } catch(PDOException $e) {
        $msgErro = $e->getMessage();
    }
    }
     
    public function cadastrar($nome, $email, $senha)//, $situacoe_id, $niveis_acesso_id, $created, $modified)
    {
        global $pdo;
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e");
        $sql->bindValue(":e",$email);
        $sql->execute();
        if($sql->rowCount() > 0)
        {
            return false;
        }
        else
        {
            
            $created = date('d/m/y');
            $modified = date('d/m/y');
            $sql = $pdo->prepare("INSERT INTO usuarios (nome, email, senha, situacoe_id, niveis_acesso_id, created, modified) VALUES (:n, :a, :p, :s, :n, :c, :m)");
                $sql->bindValue(":n",$nome);
                $sql->bindValue(":a",$email);
                $sql->bindValue(":p",md5($senha));
                $sql->bindValue(":s",1);
                $sql->bindValue(":n",1);
                $sql->bindValue(":c",$created);
                $sql->bindValue(":m",$modified);
                $sql->execute();
                return true;
        }
    }
     
    public function logar($email, $senha)
    {
        global $pdo;      
        $sql = $pdo->prepare("SELECT id FROM usuarios WHERE email = :e AND senha = :p");
        $sql->bindValue(":e",$email);
        $sql->bindValue(":p",md5($senha));
        $sql->execute();
        if($sql->rowCont() > 0)
        {
            $dado = $sql->fetch();
            session_start();
            $_SESSION["id"] = $dado["id"];
            return true;
        }
        else
        {
            return false;
        }
    }
     
}
?>

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...