Prohibit user to register 2 users with equal emails and matriculations

Asked

Viewed 80 times

1

I wanted that when the users went to register, if they informed an existing email or enrollment in the bank give a message and it was forbidden to register in the system, in the code below it continues to register the user even with the email fields and matricula already existing in the database.

<?php 

include("includes/conexao.php");//conexão com o banco

if(isset($_POST["registrar"])) {
    //Busca no banco a quantidade de usuarios que tenham a mesma matricula OU o mesmo email
    $querySelect = "SELECT count(*) total FROM usuarios WHERE matricula = {$_POST['matricula']} or email = {$_POST['email']}";


     //prepara a query
    $statement = $connection->prepare($querySelect);

    //executar o comando sql
    $result = $statement->execute();

    //juntar todos os resultados do select em um vetor de arrays
    $result = $statement->fetch(PDO::FETCH_ASSOC);

    //Verificase o valor retornado é 0 (Nenhum usuário igual cadastrado)
    if($result['total'] == 0){

        $senha           = $_POST['senha'];
        $confirma_senha  = $_POST['confirma_senha'];
        if (empty($senha)) {
            $mensagem = "<span class='aviso'><b>Aviso</b>: Senha não foi alterada!</span>";
        } else if ($senha == $confirma_senha) {
            $query = "INSERT INTO usuario (nome, sobrenome, matricula, email, senha) 
                  VALUES (:nome, :sobrenome, :matricula, :email, :senha)";

            $statement = $connection->prepare($query);


            $valores = array();
            $valores[':nome'] = (isset($_POST['primeiroNome']) ? $_POST['primeiroNome'] : '');
            $valores[':sobrenome'] = (isset($_POST['sobrenome']) ? $_POST['sobrenome'] : '');
            $valores[':matricula'] = (isset($_POST['matricula']) ? $_POST['matricula'] : '');
            $valores[':email'] = (isset($_POST['email']) ? $_POST['email'] : '');
            $valores[':senha'] = (isset($_POST['senha']) ? $_POST['senha'] : '');

            $result = $statement->execute($valores);
            if(!empty($result)){
                $mensagem = "<span class='aviso'><b>Sucesso</b>: deu certo!</span>";
            }
        } else {
             $mensagem = "<span class='aviso'><b>Aviso</b>: Senha e repetir senha são diferentes!</span>";

        }

    }else{
        $mensagem = "<span class='aviso'><b>Erro</b>: Email ou matricula ja cadastrado!</span>";
    }

}


?>

In case you want to check my application.

<form method="POST" action="registro.php" onsubmit="return validarSenha()"name="formulario">
            <div class="form-group">
               <div class="form-row">
                  <div class="col-md-6">
                     <label for="primeiroNome">Primeiro nome</label>
                     <input type="text" class="form-control" id="primeiroNome" name="primeiroNome" placeholder="Digite seu primeiro nome" required="required">
                  </div>
                  <div class="col-md-6">
                     <label for="Sobrenome">Sobrenome</label>
                     <input type="text" class="form-control" id="Sobrenome" name="sobrenome" placeholder="Digite seu Sobrenome" required="required" autofocus="autofocus">
                  </div>
               </div>
            </div>
            <div class="col-md-6" id="matricula">
               <label for="primeiroNome">Matrícula</label>
               <input type="text" class="form-control"  name="matricula" placeholder="Digite sua matrícula" required="required" autofocus="autofocus">
            </div>
            <div class="form-group">
               <label for="email">E-mail</label>
               <input type="email" class="form-control" id="email" name="email" placeholder="Digite seu email" required="required" autofocus="autofocus">
            </div>
            <div class="form-group">
               <div class="form-row">
                  <div class="col-md-6">
                     <label for="senha">Senha</label>
                     <input type="password" class="form-control" id="senha" name="senha" placeholder="Digite sua senha" required="required" autofocus="autofocus">
                  </div>
                  <div class="col-md-6">
                     <label for="confirma_senha">confirmar senha</label>
                     <input type="password"  class="form-control" id="confirmaSenha" name="confirma_senha" placeholder="Confirme sua senha" required="required" autofocus="autofocus">
                  </div>
               </div>
            </div>
            <div>
               <input type="submit" class="btn btn-primary btn-block" name="registrar" value="Registra-se"/>
            </div>
            <div class="text-center">
               <a href="#" class="d-block small mt-3">Esqueceu sua senha?</a>
               <a href="login.php" class="d-block small mt-3">Login?</a>
            </div>
         </form>

1 answer

1

I believe the result['total'], is returning an array. use a Count() to compare

 if(count($result) == 0){
  • Warning: Count(): Parameter must be an array or an Object that Implements Countable in C: xampp htdocs nsi registro.php on line 20

  • 1

    Then do without Count in sql and use the in a Rows like : $querySelect = "SELECT * FROM usuarios WHERE matricula = {$_POST['matricula']} or email = {$_POST['email']}"; then $result = $statement->execute(); $result = $result->fetchColumn()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.