Login with validation system

1

In the login of my system, if the user has id and password registered the access is released. So far so good, but now I want to qualify this user in administrator (1) or simple user (0) so that when they log in, they are redirected to different pages.

For this, I created a "ativo" column to store the 0 or 1 in my user table and started writing a validation page that is not yet working:

<?php

// Primeiro verifica se o post não está vazio
if (!empty($_POST) AND !empty($_POST['identifiant']) OR !empty($_POST['senha'])) {
    mysql_connect('localhost', 'root', '', 'db_formacao') or trigger_error(mysql_error());
    // Tenta se conectar a um banco de dados MySQL
    $identifiant = mysql_real_escape_string($_POST['identifiant']);
    $senha = mysql_real_escape_string($_POST['senha']);
    $ativo = mysql_real_escape_string($_POST['ativo']);

    $sql = "SELECT 'id', 'identifiant', 'senha', 'ativo'  FROM 'usuarios' WHERE ('identifiant' = '". $identifiant ."') AND ('senha' = '". $senha ."')";
    $query = mysql_query($sql);
    if (mysql_num_rows($query) != 1) {
      // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
      echo "Login inválido!"; exit;
    } else {
      $resultado = mysql_fetch_assoc($query);
      // Verifica se o usuário é 0 ou 1

      if ($resultado['ativo'] == 0)) { header("Location: principalUSU.php"); } 
      else { header("Location: principal.php"); }

      exit;
    }
}
?>

The login page is where the form responsible for the login is and the action that links to the validation page:

<!--CONTENT-->
    <!--A parte do formulário-->
    <div class="container">
        <div class="row">
            <div class="col-md-4 col-md-offset-4">
                <div class="login-panel panel panel-default">
                    <div class="panel-heading" style="
    margin-top: 14px;">
                        <h3 class="panel-title">Login</h3>
                    </div>
                    <div class="panel-body" style="background: rgba(32, 40, 76, 0.59);">
                        <?php 
                        if(isset($erro)) 
                            if(count($erro) > 0){ ?>
                                <div class="alert alert-danger">
                                    <?php foreach($erro as $msg) echo "$msg <br>"; ?>
                                </div>
                            <?php 
                            }
                            ?>
                        <form method="post" action="validacao.php" role="form">
                            <fieldset style="background: #9498a9;">
                                <div class="form-group">
                                    <input  class="form-control" placeholder="Identifiant" name="identifiant">
                                </div>
                                <div class="form-group">
                                    <input class="form-control" required placeholder="Senha" name="senha" type="password" value="">
                                </div>
                                <div class="checkbox">
                                    <label>
                                        <input name="remember" type="checkbox" value="Remember Me">Lembrar-me
                                    </label>
                                </div>

                                <button type="submit" name="login" value="true" class="btn btn-success btn-block" style="background: #232b4f; border-color: #e2e2e2;">Login</button>
                            </fieldset>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

The table as in the database:

id  |  nome  |  senha  |  ativo  
 1     aaaa     12345       1
 2     bbbb     12345       0 

But when I try to run the page, it appears that erro 500 saying that the page is not working. Any idea why it does not work?

obs: I changed my code to what appears here in the answer, but it is still giving 500 error.

    
asked by anonymous 29.09.2017 / 13:42

3 answers

1

You have a problem with the first if / else, where you try to find the type of active variable before doing the SQL query, the line below is wrong:

('ativo' = 1)

It is not a variable and tbm does not use this type of accent outside the mysql query.

You have to make the query in the database first to identify the type of user and then yes open the page accordingly.

Something like this:

<?php

// Primeiro verifica se o post não está vazio, coloque um sinal ! de negação para verificar se identifiant ou senha também não estão vazios.
if (!empty($_POST) AND !empty($_POST['identifiant']) OR !empty($_POST['senha'])) {
  // Caso esteja preenchidos, vamos seguir com o codigo abaixo
    mysql_connect('localhost', 'root', '', 'db_formacao') or trigger_error(mysql_error());
    // Tenta se conectar a um banco de dados MySQL
    $identifiant = mysql_real_escape_string($_POST['identifiant']);
    $senha = mysql_real_escape_string($_POST['senha']);
    $ativo = mysql_real_escape_string($_POST['ativo']);

    // Na linha abaixo não coloque o ('ativo' = '". $ativo ."'), pq é essa informação que vc quer retornar para verificar o tipo de usuário.
    $sql = "SELECT 'id', 'identifiant', 'senha', 'ativo'  FROM 'usuarios' WHERE ('identifiant' = '". $identifiant ."') AND ('senha' = '". $senha ."')";
    $query = mysql_query($sql);
    if (mysql_num_rows($query) != 1) {
      // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
      echo "Login inválido!"; exit;
    } else {
      $resultado = mysql_fetch_assoc($query);
      // Agora sim, vc tem o resultado do banco de dados, é aqui q vc vai verificar se o seu usuário é ativo 0 ou 1;

      if ($resultado['ativo'] == 0)) { header("Location: principalUSU.php"); } 
      else { header("Location: principal.php"); }

      exit;
    }
}
?>

Now just two tips ...

1) Try to learn about MySQL, because the MySQL ciphers are old, and many servers do not use them anymore.

2) If your system contains very confidential information, I suggest you try to search better for login security, because this method is very simple and easy to hack.

I hope I have helped. Hugs

    
30.09.2017 / 04:02
3

Try this:

<?php

// Primeiro verifica se o post não está vazio
if (!empty($_POST) AND !empty($_POST['identifiant']) OR !empty($_POST['senha'])) {
    $conexao = mysqli_connect('localhost', 'root', '', 'db_formacao') or trigger_error(mysqli_error($conexao));
    // Tenta se conectar a um banco de dados MySQL
    $identifiant = mysqli_real_escape_string($conexao, $_POST['identifiant']);
    $senha = mysqli_real_escape_string($conexao,$_POST['senha']);
    $ativo = mysqli_real_escape_string($conexao,$_POST['ativo']);

    $sql = "SELECT 'id', 'identifiant', 'senha', 'ativo'  FROM 'usuarios' WHERE ('identifiant' = '". $identifiant ."') AND ('senha' = '". $senha ."')";
    $query = mysqli_query($sql);
    if (mysqli_num_rows($query) != 1) {
      // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
      echo "Login inválido!"; exit;
    } else {
      $resultado = mysqli_fetch_assoc($query);
      // Verifica se o usuário é 0 ou 1

      if ($resultado['ativo'] == 0)) { header("Location: principalUSU.php"); } 
      else { header("Location: principal.php"); }

      exit;
    }
}
?>
    
03.10.2017 / 20:00
1

Error 500 is a programming problem, in which case you should check the apache log to see error messages or enable them to be displayed only in the script with the lines, they are placed at startup.

ini_set('display_errors', true);
error_reporting(E_ALL);

How are you using the old mysql_ functions (which have already been removed from php7). The problem seems to be in the connection, it is not possible to pass the name of the bank as the fourth argument the correct only for the functions mysql_ * is to call mysql_select_db()

Change:

 mysql_connect('localhost', 'root', '', 'db_formacao') or trigger_error(mysql_error());

To:

 $link = mysql_connect('localhost', 'root', '');
 mysql_select_db('db_formacao');

Another detail, be careful with the operators && and AND , || and OR are not synonyms.

Related:

What's the difference between "& &" and "||" and "and" and "or" in PHP ? Which one to use?

    
03.10.2017 / 20:08