Записва една парола, при лога използва друга.

metal_head

Registered
Здравейте, имам малък проблем...по-скоро голям с логин системата ми. Почти всичко е супер. Потребителите се регистрират и всичко е наред, докато някой не опита да се логне. При опит за логин казва, че паролата му е грешна. Използвал съм md5 хеширане при записа в базата данни и също при логин md5 хеширане за сверяване на паролата.

Това ми е проверката на въведеното от формата при регистрация и съшо записа в базата данни, ако всичко е наред записва в базата данни:
Код:
$errorvar = false;
if(empty($username)){ echo"<br><font size='3' color='ff6464'>- Липсва потребителско име.</font>"; $errorvar = true; }
if(empty($password)) {echo"<br><font size='3' color='ff6464'>- Липсва парола.</font>"; $errorvar = true; } 
if(empty($_POST['conf_password'])){echo"<br><font size='3' color='ff6464'>- Паролата не е потвърдена.</font>"; $errorvar = true;}
if(empty($email)){echo"<br><font size='3' color='ff6464'>- Липсва e-mail.</font>"; $errorvar = true; }
if(preg_match("/[^-a-z0-9_.-]/i", $username) == true){ echo"<br><font size='3' color='ff6464'>- Потребителското име не може да съдържа такива символи.</font>"; $errorvar=true;}

if($number_reg_users > 0) {echo"<br><font size='3' color='ff6464'>- Вече имаме потребител с такова име.</font>"; $errorvar = true;}
if($number_reg_emails > 0) {echo"<br><font size='3' color='ff6464'>- Този e-mail е вече регистриран при нас.</font>"; $errorvar = true;}

if(validate_mail($email) == false) {echo"<br><font size='3' color='ff6464'>- Въведеният имейл не е валиден.</font>"; $errorvar = true;}
if($password != $_POST['conf_password']) {echo"<br><font size='3' color='ff6464'>- Въведените пароли не съвпадат.</font>"; $errorvar = true;}

if (empty($_SESSION['captcha']) || trim(strtolower($_REQUEST['captcha'])) != $_SESSION['captcha']) {
echo"<br><font size='3' color='ff6464'>- Кодът за сигурност не съвпада с този от картинката.</font>"; $errorvar = true;
}


if($errorvar){
$_GET['done'] = false;
 die("<br><font size='3'>Моля, поправи си грешките и опитай пак");
 }
$crypted_password = md5($password);
if ($_SERVER['HTTP_X_FORWARD_FOR']) {
$ip = $_SERVER['HTTP_X_FORWARD_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$insert = mysql_query("INSERT INTO users (username, password, email, hidemail, birthday, location, webpage, register_date, ip) VALUES ('$username', '$crypted_password', '$email', '$hm', '$birthdate', '$location', '$website', '$register_date', '$ip')"); 
if(!$insert) die("Има пробем: ".mysql_error()); 
else{
	 echo"Регистриран си";
	 $_GET['regsuccess'] = true;
}



Това пък е частта от логин файла, която взима името и паролата и търси за записи в базата данни:

Код:
$logname = $_POST['username'];
$logpassword = md5($_POST['password']);
$result = mysql_query("SELECT * FROM users WHERE username='$logname' AND password='$logpassword'"); 
$rows = mysql_num_rows($result); 

if($rows == 0){
echo"<br><center><font size='3' color='ff6464'>Невалидно потребителско име или парола.</font></center>";
echo "<br>".$logpassword;

Както казах, излиза ми това отгоре, че не е валидна и също съм сложил да ми изкарва криптираната въведена парола. Ако я хвана тая криптирана парола, която ми извежда при грешката и я заместя ръчно в базата данни, после потребителя няма проблеми с логин-а.

Какво не е наред? Гледах, гледах....всичко е ок според мен.
 
Провери при регистрацията чрез echo $password (и сложи // преди query-то та да не записва в дб) и провери какъв е резултата от паролата.
Щото не си дал променливата $password на какво е равна нито името на input-a и т.н. ;)
 
Ето password и username:

Код:
$username = $_POST['user_name'];
$password = $_POST['user_password'];

Ето ги и във формата:

Код:
<input type='text' value='$username' maxLength='18' size='40' name='user_name' id='user_name' /> 
   <input type='password' maxLength='40' size='40' name='user_password' id='password' />

Като изкоментирах query-то и сложих echo с криптираната парола и пак беше грешна. После сложих echo с некриптираната и си беше същата, каквато я бях въвел. Интересното е, че хеш кода...разбирам да в базата данни полето да беше за по-малко символи, но този, който ми го показва при грешката с логин-а е тотално различен от този, който се записва в базата...
 
Сега го промених, казваше се password и го взимах с $_POST['password'], но реших, че понеже е type='password' може да се бърка и ги смених на "pswd".

Ето най - новото:

Успях да го направя. Не знам какво направих (тъй като нищо почти не съм променял...само един литерал в html-а, но не беше при name-а) но в момента записва паролата и при логин-а я показва същата, каквато е записана в базата данни, но все пак не иска да ме пусне.

Ето я функцията на логин-а

Код:
function log_user(){
$logname = $_POST['username'];
$logpassword = $_POST['pswd'];
$result = mysql_query("SELECT * FROM users WHERE username='$logname' AND password='$logpassword'"); 
$rows = mysql_num_rows($result); 
$crypted_password = md5($logpassword);
echo $logpassword."<br>";
echo $crypted_password."<br>";


if($rows == 0){
echo"<br><center><font size='3' color='ff6464'>Невалидно потребителско име или парола.</font></center>";
echo "<br>".$logpassword;
} 
else{
$_SESSION['username'] = $logname;
$_SESSION['password'] = $logpassword;
if ($_SERVER['HTTP_X_FORWARD_FOR']) {
$ip = $_SERVER['HTTP_X_FORWARD_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
mysql_query("UPDATE users SET ip='$ip' WHERE username='$logname' AND password='$logpassword'");

echo "<br>Добре дошъл, ".$logname; 
}
}

Пробвах с няколко различни регистрации и пароли, все същото. Поне сега записа в базата данни отговаря на това, което ми показва при грешка в логина
 
принтни $rows най вероятно брояча на редове брави номера.
след което дай echo $result и виж дали заявката ти е наред ако се съмняваш тествай е (копирай принтнатата заявка) в phpmyadmin в sql полето и виж какво ще каже sql-a
 
Благодаря. Това ми помогна. Оправих се. Показваше нула и се усетих, че съм смъкнал задаването на променливата с паролата след заявката. И двамата ми помогнахте много и ви благодаря, ще дам точка на този с по-малкото точки, но и двамата заслужавате :D
 

Back
Горе