Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: проблема с "=" и "==" при авторизации
 
 автор: amsun   (14.12.2005 в 06:58)   письмо автору
 
 

В базе хранится зашифрованный пароль (md5). Делаю авторизацию:

<?php
if (empty($_POST['login']) || empty($_POST['password']))
 {
  echo 
"error";
  exit;
 }
else
 {
 
$login=$_POST['login']
 
$password=$_POST['password']
 
$md5pass=md5($password);

 include (
"config.cfg");
 
mysql_connect($hostname$username$password) or die;
 
mysql_select_db('DB') or die;
 
$result=mysql_query("select password FROM table WHERE login='$login'");
 
$password_from_database=mysql_fetch_array($result);
 
 if(!
$password_from_database
  {
  exit(
"Таких пользователей нет");
  } 
elseif (
$password_from_database['password']==$md5pass)
  { 
  
session_start();
  
$_SESSION['logged_user']=$login;
  
$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
  
header("Location: secret_place.php");
  exit;
  }
  else
  {
  echo 
"Неверный пароль...";
  exit;
  }
 }
?>

Проблема в том, что если в строчке сверки пароля пишу знак "=", то скрипт при правильном пароле типа виснет (то есть не выводит ни ошибку, ни страницы, ничего). А если ставлю "==", то пускает при любом непустом пароле (конечно, если пользователь есть в базе). Ничего не могу разобрать, помогите

   
 
 автор: Loki   (14.12.2005 в 10:02)   письмо автору
 
   для: amsun   (14.12.2005 в 06:58)
 

Использовать надо ==, так как = это присвоение значения, а не сравнение.
А косяк у вас скорее всего из-за того, что соединения с базой не происходит: для соединения с базой вы используете тот же пароль что и для авторизации.

   
 
 автор: amsun   (14.12.2005 в 10:18)   письмо автору
 
   для: Loki   (14.12.2005 в 10:02)
 

проблема осталась, при установке "==" даже при правильном пароле - выдает, что пароль неверен, перед сравнением делаю шифрование md5, что делать?

   
 
 автор: Loki   (14.12.2005 в 10:27)   письмо автору
 
   для: amsun   (14.12.2005 в 10:18)
 

попробуйте вывести на экран перед сравнением массив $password_from_database

print_r($password_from_database);

сдается мне, он у вас пустой.

   
 
 автор: Евгений Петров   (14.12.2005 в 13:22)   письмо автору
 
   для: amsun   (14.12.2005 в 06:58)
 

Я заметил что пароль принимаемый от пользователей имеет имя $password и к базе данных вы подключаетесь с этим же паролем (который по всей видимости находится в config.cfg (кстати у вас это расширение интерпретируется?)). Измените имена переменных.

... хотя только что пересмотрел ещё раз, вроде должно работать.

   
 
 автор: amsun   (14.12.2005 в 17:04)   письмо автору
 
   для: Евгений Петров   (14.12.2005 в 13:22)
 

пароль не пустой, а то, который в базе (проверил), с конфигурационным файлом все нормально, в соседнем скрипте он работает, совпаденй имен нет, ничего не понимаю

   
 
 автор: Loki   (14.12.2005 в 17:23)   письмо автору
 
   для: amsun   (14.12.2005 в 17:04)
 

да вам уже два человека сказали:

<?
$password
=$_POST['password'
$md5pass=md5($password); 

include (
"config.cfg"); 
mysql_connect($hostname$username$password) or die; 
?>

в конфиге ваш $password каждый раз переопределяется. Так что данные пост до проверки даже не доходят.

   
 
 автор: amsun   (14.12.2005 в 17:48)   письмо автору
 
   для: Loki   (14.12.2005 в 17:23)
 

у меня уже давно такой код:

$passw=$_POST['passw'] 
$md5pass=md5($passw); 

include ("config.cfg"); 
mysql_connect($hostname, $username, $password) or die;


то есть нигде не переопределяется, однако, работать не хочет

   
 
 автор: Евгений Петров   (14.12.2005 в 18:14)   письмо автору
 
   для: Loki   (14.12.2005 в 17:23)
 

Да нет, он не переопределяется, точнее переопределяется, но там сразу же хеш находится и сохраняется в др. переменную, дальше он не нужен, поэтому проблема не в этом.

   
 
 автор: Loki   (14.12.2005 в 20:24)   письмо автору
 
   для: Евгений Петров   (14.12.2005 в 18:14)
 

Да действительно... это я как-то упустил:)

Ну остается проверить совпадает ли хэш с тем что в базе. если не совпадает, то можно прогнать $passw через trim(). Иногда дело в этом бывает.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования