самый простой вариант авторизации. помогите реализовать

Pawell

Новичок
самый простой вариант авторизации. помогите реализовать

пользователь заполняет имя пользователя и пароль - это мы реальизуем через form в которой есть input

PHP:
echo '<FORM ACTION="index1.php" METHOD="POST">'."\n";
echo '<center>Пожалуйста, введите Ваши имя пользователя и пароль'."\n";
echo '<P>'."\n";
echo 'Пользователь:<BR> <INPUT TYPE="text" NAME="Ulogin" SIZE="20" MAXLENGTH="30">'."\n";
echo '<P>'."\n";
echo 'Пароль:<BR> <INPUT TYPE="password" NAME="Upassw" SIZE="20" MAXLENGTH="30">'."\n";
echo '<P>'."\n";
echo '<INPUT TYPE="submit" VALUE="Войти"></center>'."\n";
echo '</FORM>'."\n";
echo '<div align="center"><a href="reminder.php">Забыли пароль?</a></div align>'."\n";
жмём submit и переходим на страничку 2, там получаем через POST там ищём в базе логин и пароль так:

PHP:
$query_user = "SELECT name FROM base WHERE username=$_POST['Ulogin'] and password=$_POST['Upassw']";
$result_user = pg_query($query_user) or die('Query failed: ' . pg_last_error());

$login = pg_fetch_array($result_user, null, PGSQL_ASSOC)
т.е. если логин который ввёл человек есть в базе с таким паролем который ввёл человек, то в $login окажется имя пользователя, если нет, то $login будет пустая

далее в том же втором файле надо сделать так, чтобы если $login=$_POST['Ulogin'] то скрипт продолжался, а если нет, то выводилось сообщение о том что пароль неверный и юзера обратно кидало на ввод пароля (ну или хотя бы давало ссылку для возврата)... такое можно сделать без наворотов? как? по-моему это самый простой вариант авторизации - проще некуда... защита высокая не нужна
 

Pawell

Новичок
потом по ходу буду усложнять, но пока и так хорошо бы сделать
 

Pawell

Новичок
а всё-таки по поводу того как реализовать чтобы если что-то равно тому-то, то продолжать выполнять скрипт, если нет, то вывести сообщение об ошибки это можно сделать???
 

Pawell

Новичок
PHP:
if($a=$b) $flogstop = TRUE;
if($flogstop) {
echo '<meta http-equiv="refresh" content="5; URL=index.php">';
exit();
                    }
если такая штука будет работать? я с синтаксисом не могу никак разобраться?
 

Pawell

Новичок
PHP:
if($login!=$_POST['Upassw'])

{
echo '<meta http-equiv="refresh" content="5; URL=index.php">';
exit();
}
а проверяется равны ли юзер и пароль так:

PHP:
$query_user = "SELECT name FROM base WHERE username=$_POST['Ulogin'] and password=$_POST['Upassw']";
$result_user = pg_query($query_user) or die('Query failed: ' . pg_last_error());

$login = pg_fetch_array($result_user, null, PGSQL_ASSOC);
в $login будет тот самый $_POST['Upassw'] если логин и пароль были в таблице, либо пусто, есть не было, так?

потом сравниваем и если всё ок, то продолжаем, иначе выбрасываем на index.php вроде всё правильно только пока не работает... сейчас пытаюсь понять почему, пока безуспешно :(
 

Pawell

Новичок
эээ... вроде смотрит если содержание переменной $login не равно содержанию перемннной $_POST['Ulogin'] то выполняется {} если нет, то идём дальше... или надо лучше так сделать:

PHP:
$Ulogin=$_POST['Ulogin']
if($login!=$Ulogin)

{
echo '<meta http-equiv="refresh" content="5; URL=index.php">';
exit();
}
 

Фанат

oncle terrible
Команда форума
у тебя там, вообще-то, написано не Ulogin
ты бы определился
 

Acabar

Новичок
если текст не посылался, то лучше header("Location: index.php"); используй.
Так же пароль надо шифровать с помощью функции md5(); А вообще, как более менее делать правильно авторизацию найдёшь в любой книге по php.
 

Pawell

Новичок
это да косяк был... сравнивать Upassw и login глуповато, теперь исправился

PHP:
$query_user = "SELECT name FROM base WHERE username=$_POST['Ulogin'] and password=$_POST['Upassw']";
$result_user = pg_query($query_user) or die('Query failed: ' . pg_last_error());

$login = pg_fetch_array($result_user, null, PGSQL_ASSOC);
у меня эта штука ну никак не хочет возвращать конкретное значение имени пользователя в переменную $login

А вообще, как более менее делать правильно авторизацию найдёшь в любой книге по php.
ню не знаю... мне нужно чтобы всё было в веб-интерфейсе чтобы можно было кликнуть забыл пароль, а в книжке все случаи, в которых я смог разобраться просто диалоговое окно выводят...
+ в примере для header я ну никак не могу понять, откуда он берёт пароль и логин чтобы сравнивать
PHP:
<?php
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Текст, отправляемый в том случае,
    если пользователь нажал кнопку Cancel';
    exit;
  } else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>Вы ввели пароль {$_SERVER['PHP_AUTH_PW']}.</p>";
  }
?>
с md5() пока не заморачиваюсь - пока не суть важно, потом это сделать 5 минут
 

Фанат

oncle terrible
Команда форума
как интересно.
а с чего ты решил, что "эта штука" должна возвращать конкретное значение имени польщователя?
 

Acabar

Новичок
$query_user = "SELECT name FROM base WHERE username=$_POST['Ulogin'] and password=$_POST['Upassw']";
поменяй на:
PHP:
$query_user = "SELECT name FROM base WHERE username='" . $_POST['Ulogin'] . "' and password='" . $_POST['Upassw'] . "'";
 

Pawell

Новичок
это как я понимаю он должен до 1 слова отрезать всё, т.е. всё кроме пробела отсечь, так?
 

Pawell

Новичок
Фанат
а с чего ты решил, что "эта штука" должна возвращать конкретное значение имени польщователя?
эээ... ну вроде как я делаю поиск по базе результат сначение конкретного столбци в конкретной строчке, потом я это линеаризирую и должно получаться вроде как значение имени пользователя... делаю по аналогии с примером из мануала:

PHP:
// Selecting Fields
$query = 'SELECT tid, name, email FROM accounts WHERE del=TRUE';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());

// Printing results
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
    echo "\t<tr>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "</table>\n";
Acabar
Я ничего не понимаю! Кто кому должен отсеч и что?
" . $_POST['Ulogin'] . " ну... вроде такая штука оставляет только первое слово из нескольких, если в переменной было неск. слов, или она что-то ещё делает в отличии от просто $_POST['Ulogin']
 

Фанат

oncle terrible
Команда форума
делаю по аналогии с примером из мануала:
вот нифига ты по аналогии не делаешь.
когда сделаешь по аналогии - тогда и заработает
ну... вроде такая штука оставляет только первое слово из нескольких,
Паша.
у тебя просто чудовищные представления о синтаксисе пхп.
 

Pawell

Новичок
такой вопрос: если использовать в качестве логина email то как-то не прокатывает query:

например мы ввели email: pawell@localhost пароль 123456

$email = $_POST['currusername'];
$c_servpassword = $_POST['curruserpassw'];

PHP:
$query_com = "SELECT id FROM contactperson WHERE email=$email and del='f'";
$result_com = pg_query($query_com) or die('Не могу найти пользователя в базе!');
<<< это НЕ работает
PHP:
$query_com = "SELECT id FROM contactperson WHERE c_servpassword=$c_servpassword and del='f'";
$result_com = pg_query($query_com) or die('Не могу найти пользователя в базе!');
<<< это отлично работает, говорит, что арибут pawell не найден

может ему (at) не нравится? как его заставить @ скушать??
 

rob72

Новичок
WHERE email='$email'
WHERE c_servpassword='$c_servpassword'
И так всегда, если только у тебя не гарантированно число
А перед INSERTом обрабатывай addslashes()
это отлично работает, говорит, что арибут pawell не найден
А говорит не то, что не найден, а что таких запросов не обслуживаю
В die поставь MYSQL_ERROR() (Или что там вместо нее)
И посмотри, что напишет
 
Сверху