+ Responder ao Tópico



  1. #1

    Padrão O que há de errado nesta validação de login

    Olá.

    Criei uma validação de login onde chega se a senha digitada é igual à criptografada no banco de dados.
    Mas ultimamente notei que não está retornando a mensagem de erro da senha não digitada.

    Também tentei encontrar uma forma de não usar alertas para validações, mas dentro do teste if($err=="") não existe um mode de adicionar outros teste usando a variável, então não consegui eliminar o alerta dos testes =/

    Código utilizado:
    Código :
    //session_start();
    if (isset($_POST['acessar'])) {
    // clean and check form inputs including the secure image code
        //$name = trim(strip_tags($_POST['name']));
        //$pwd = trim(strip_tags($_POST['pwd']));
     
        // Recupera o login
        $name = isset($_POST["name"]) ? addslashes(trim($_POST["name"])) : FALSE;
     
        // Recupera a senha, a criptografando em MD5
        $pwd = isset($_POST["pwd"]) ? md5(trim($_POST["pwd"])) : FALSE;
     
        $secure = strtoupper(trim(strip_tags($_POST['secure'])));
        $match = $_SESSION['captcha']; // the code on the image
     
    // input error checking
        if ($name=="") {
            $err.= "Informe seu nome!<br/>";
        }
        if ($pwd=="") {
            $err.= "Informe sua senha!<br/>";
        }
        if (!$secure) {
            $err.= "Informe o código de segurança!<br/>";
        }
        if (($secure!=$match) && ($secure!="")) {
            $err.= "Código de segurança inválido!<br/>";
        }
        if ($err=="") {
        // success - input passed all tests
        // criando sessao e entrando
        /**
    * Executa a consulta no banco de dados.
    * Caso o número de linhas retornadas seja 1 o login é válido,
    * caso 0, inválido.
    */
    $SQL = "SELECT name001, pass001 FROM admin001 WHERE name001 = '" . $name . "'";
    $result_id = @mysql_query($SQL) or die("<script>location.href='?loadpg=site_login'; alert('Erro no banco de dados!');</script>");
    $total = @mysql_num_rows($result_id);
     
    // Caso o usuário tenha digitado um login válido o número de linhas será 1..
    if($total) {
        // Obtém os dados do usuário, para poder verificar a senha e passar os demais dados para a sessão
        $dados = @mysql_fetch_array($result_id);
     
        // Agora verifica a senha
        if(!strcmp($pwd, $dados["senha"])) {
            // TUDO OK! Agora, passa os dados para a sessão e redireciona o usuário
            $_SESSION["user_logado"] = stripslashes($dados["name"]);
            header("Location: admin.php");
            exit;
        } else {
        // se for diferente da do banco de dados
            echo "<script>location.href='?loadpg=site_login'; alert('Senha inválida!');</script>";
            exit;
        }
    }
     
    else {  // se o login for inválido com o do banco de dados
        echo "<script>location.href='?loadpg=site_login'; alert('O login fornecido por você é inexistente!');</script>";
        exit;
    }
        exit();
        }
    }
    ?>
    Agora o formulário:
    Código :
    <form name="captcha" action="?loadpg=site_login" method="post">
                                    <table border="0">
                                       <tr>
                                           <td>Nome:</td>
                                           <td style="padding-right:15px;"><input type="text" name="name" value="<?= $_POST['name'];?>" maxlength="10" autocomplete="off"></td>
                                       </tr>
                                       <tr>
                                           <td>Senha:</td>
                                           <td><input type="password" name="pwd" maxlength="10" autocomplete="off"></td>
                                       </tr>
                                       <tr>
                                           <td>Código:</td>
                                           <td><input type="text" name="secure" size="10" maxlength="5" autocomplete="off"></td>
                                       </tr>
                                       <tr>
                                           <td></td>
                                           <td><img src="captcha/captcha_image" alt="security image" border="0"/></td>
                                       </tr>
                                       <tr>
                                           <td></td>
                                           <td style="padding-right:15px; padding-bottom:10px;">
                                               <input type="submit" name="acessar" value="Acessar">
                                           </td>
                                       </tr>
                                     </table>
                                 </form>
                              </td>
                              <td><?php
                              if ($err!="") {
                                echo "<div style=\"padding-left:15px; padding-right:15px;\"><strong>Erros encontrados</strong><br/>";
                                echo "<font color='#cc3300'>". nl2br($err). "</font><br/></div>";
                              }
                              ?></td>

    Aguardo ajuda e/ou explicações.
    Grato.

  2. #2

    Padrão

    Ufa, finalmente resolvi pessoal.

    Código :
    $pwd = trim(strip_tags($_POST['pwd']));
    $pwd ? md5(trim($_POST["pwd"])) : FALSE;

    Bom, resolvi o primeiro problema.
    Agora resta fugir dos alertas de javascript, que não consegui add na sessão de erro.