Jump to content

[Resolvido] Validação de login


Recommended Posts

Posted

Bom dia,

Desculpem desde já a minha noobice, é que estou aqui "bloqueado" com uma situação que tem a ver com o assunto do tópico, e não tenho ninguem com quem discutir este assunto:

O comportamento bizarro é;

credenciais inválidas: entra no if (isset($_POST['submit'])) e faz a validação e dá mensagem de erro "credenciais inválidas".

credenciais válidas: nem entra no if.

Já não sei o q fazer =(

include_once("includes/form_functions.php");
echo $_SESSION['user_id'];
// START FORM PROCESSING
if (isset($_POST['submit'])) { // Form has been submitted.

$errors = array();

// perform validations on the form data
$required_fields = array('username', 'password');
$errors = array_merge($errors, check_required_fields($required_fields, $_POST));
$fields_with_lengths = array('username' => 30, 'password' => 30);
$errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST));
$username = trim(mysql_prep($_POST['username']));
$password = trim(mysql_prep($_POST['password']));
$hashed_password = sha1($password);

if ( empty($errors) ) {
// Check database to see if username and the hashed password exist there.
$query = "SELECT user_id, username, name, user_lang, isadmin ";
$query .= "FROM user ";
$query .= "WHERE username = '{$username}' ";
$query .= "AND password = '{$hashed_password}' ";
$query .= "AND isactive = '1' ";
$query .= "LIMIT 1";
echo $query;
$result_set = mysql_query($query);
confirm_query($result_set);
if (mysql_num_rows($result_set) == 1) {
// username/password authenticated
//and only 1 match
$found_user = mysql_fetch_array($result_set);
$_SESSION['user_id'] = $found_user['id'];
$_SESSION['username'] = $found_user['username'];
$_SESSION['name'] = $found_user['name'];
$_SESSION['user_lang'] = $found_user['user_lang'];
$_SESSION['isadim'] = $found_user['isadmin'];
redirect_to("index.php");
} else {
// username/password combo was not found in the database
$message = "Username/password combination incorrect.<br />
 Please make sure your caps lock key is off and try again.";
}
} else {
 if (count($errors) == 1) {
 $message = "There was 1 error in the form.";
 } else {
 $message = "There were " . count($errors) . " errors in the form.";}
}
}else{ // Form has not been submitted.
 if(isset($_GET['logout']) == 1){$message = "You are now logged out.";echo "nao validou";
 }else{$username = ""; $password = "";}
}



?>
<?php include("includes/header.php"); ?>

</div>
<div style="background-color:#F6F6F0; border: 15px solid #FFFFFF; margin: 0 auto; overflow: hidden; padding: 10px 20px 20px; width:300px; ">

 <div style="padding:0; text-align: left; width:100%;">
 <h1>Administration</h1>
 <?php if (!empty($message)) {echo "<p class=\"message\">" . $message . "</p>";} ?>
<?php if (!empty($errors)) { display_errors($errors); } ?>
	 <form action="login.php" method="post">
	 <div class="form_settings">
	 <span><?php echo $lang[$default]['tbloginusername'];?></span><br>
	 <input type="text" name="username" maxlength="30" value="<?php echo htmlentities($username); ?>" /><br>
<br>
	 <span><?php echo $lang[$default]['tbloginuserpassword'] ; ?></span><br>
	 <input type="password" name="password" maxlength="30" value="<?php echo htmlentities($password); ?>" /><br>
	 <br>
	 <input class="submit" type="submit" name="submit" value="Login" />
	 <br>
	 <div align="center" ><a href="user.php">registar </a> | <a href="recover_pass.php">Recuperar Password</a></div>

Posted (edited)

Não entra no if isset($_POST['submit'])

<?php
include_once("includes/form_functions.php");

   // START FORM PROCESSING
if (isset($_POST['submit'])) { // Form has been submitted.

   $errors = array();

   // perform validations on the form data
   $required_fields = array('username', 'password');
   $errors = array_merge($errors, check_required_fields($required_fields, $_POST));

   $fields_with_lengths = array('username' => 30, 'password' => 30);
   $errors = array_merge($errors, check_max_field_lengths($fields_with_lengths, $_POST));

   $username = trim(mysql_prep($_POST['username']));
   $password = trim(mysql_prep($_POST['password']));
   $hashed_password = sha1($password);

       if ( empty($errors) ) {
       // Check database to see if username and the hashed password exist there.
       $query = "SELECT user_id, username, name, user_lang, isadmin ";
       $query .= "FROM user ";
       $query .= "WHERE username = '{$username}' ";
       $query .= "AND password = '{$hashed_password}' ";
       $query .= "AND isactive = '1' ";
       $query .= "LIMIT 1";
       echo $query;
       $result_set = mysql_query($query);
       confirm_query($result_set);
           if (mysql_num_rows($result_set) == 1) {
           // username/password authenticated
           //and only 1 match
               $found_user = mysql_fetch_array($result_set);
               $_SESSION['user_id'] = $found_user['id'];
               $_SESSION['username'] = $found_user['username'];
               $_SESSION['name'] = $found_user['name'];
               $_SESSION['user_lang'] = $found_user['user_lang'];
               $_SESSION['isadim'] = $found_user['isadmin'];
               redirect_to("index.php");
           }else{
               // username/password combo was not found in the database
               $message = "Username/password combination incorrect.<br />
               Please make sure your caps lock key is off and try again.";
           }
       }else{
           if (count($errors) == 1) {
           $message = "There was 1 error in the form.";
           } else {
           $message = "There were " . count($errors) . " errors in the form.";}
       }

}
// Form has not been submitted.    
$username;
$password;
   if(isset($_GET['logout']) == 1)
       {$message = "You are now logged out."; $username = ""; $password = "";} 
   else{$username = ""; $password = "";}


?>
<?php include("includes/header.php"); ?>


   </div>
   <div style="background-color:#F6F6F0; border: 15px solid #FFFFFF; margin: 0 auto; overflow: hidden; padding: 10px 20px 20px; width:300px; ">

     <div style="padding:0; text-align: left; width:100%;">
       <h1>Administration</h1>
       <?php if (!empty($message)) {echo "<p class=\"message\">" . $message . "</p>";} ?>
           <?php if (!empty($errors)) { display_errors($errors); } ?>
        <form action="login.php" method="post">
         <div class="form_settings">
           <span><?php echo $lang[$default]['tbloginusername'];?></span><br>
           <input type="text" name="username" maxlength="30" value="<?php echo htmlentities($username); ?>" /><br>
               <br>
           <span><?php echo $lang[$default]['tbloginuserpassword'] ; ?></span><br>
           <input type="password" name="password" maxlength="30" value="<?php echo htmlentities($password); ?>" /><br>
           <br>
           <input class="submit" type="submit" name="submit" value="Login" />
           <br>
           <div align="center" ><a href="user.php">registar </a> | <a href="recover_pass.php">Recuperar Password</a></div> 




         </div>
       </form>
     </div>
   </div>
   <?php require("includes/footer.php"); ?> 
<?php include("includes/credits.php"); ?>  

Edited by t0ze
Posted

Quando colo perde a indentação =(

Ah pois... Eu conheço isso...

Usa o editor de texto normal (botão mais à esquerda mais em cima no editor. Parece um botão como os antigos para ligar e desligar a luz).

Depois colas o código entre as tags code. o IP.B tem isto como editor WYSIWYG. Se queriam um, deviam de ter usado um como deve ser!

  • Vote 1

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Posted

a indentação não é claramente a das melhores, até é bem fraquinha.

a única coisa que o código apresenta para não entrar no primeiro if é a variável $_POST.

altera o código desta maneira e diz que informação foi apresentada:

print_r($_POST);
if (isset($_POST['submit'])) { // Form has been submitted.
 echo "<br />\nif was successfull<br />\n";
IRC : sim, é algo que ainda existe >> #p@p
Posted

fazendo o teste e usando credenciais erradas para o user admin

Array ( [username] => admin [password] => 123456 [submit] => Login )

fazendo o teste e usando credenciais correctas

Array ( )

Posted (edited)

o problema ou está na maneira como estás a carregar a página, como estás a testar com a informação correcta ou em código carregado antes do código apresentado aqui.

por outras palavras : ou és tu ou é algo que não apresentaste

se tiveres isso online disponibiliza o url assim como informação para testar


ok, já vi online

o comportamento não tem nada de bizarro.

o erro está claramente em código que não foi apresentado. o código de login está correcto e sem problemas.

tem é de verificar o processo de sessão (inicialização/recuperação).

o que está a acontecer é que ao colocar a informação de autenticação correcta, o script de validação de utilizador é executado sem problemas redireccionando no final para o index.php. o problema é que nessa página, de alguma forma não está a conseguir verificar a informação de sessão e volta a redireccionar para o login.php.

é essa a razão porque quando inseres a informação correcta, o array de $_POST aparece vazio.

Edited by brunoais
2x post junto (posts com 30 mins de diferença)
IRC : sim, é algo que ainda existe >> #p@p
Posted

Muito muito obr, eu não estava a fazer ideia de onde estava a vir o erro. Agora vou me focar no include das sessions. na pagina de index tinha a função confirm_logged_in(); que me estava a enviar para o login de novo.


<?php

session_start();

function logged_in(){
return isset($_SESSION['user_id']);
return isset($_SESSION['user_lang']);
return isset ($_SESSION['username']);
return isset ($_SESSION['name']);
return isset ($_SESSION['isadim']);
}

function confirm_logged_in(){
if(!logged_in()){
redirect_to("login.php");
}

}


?>

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.