X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
> Авторизация php mysql
andrey_94
andrey_94
Topic Starter сообщение 10.11.2009, 5:24; Ответить: andrey_94
Сообщение #1


Помогите решить проблему с авторизацией....
Одни связки(логин и пароль) программа читает а другие нет.
Как решить проблему.
Вот код.

[PHP]<?php

if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} } //заносим введенный пользователем логин в переменную $login, если он пустой, то уничтожаем переменную
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
//заносим введенный пользователем пароль в переменную $password, если он пустой, то уничтожаем переменную
if (empty($login) or empty($password)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь <a href='enter.php'>назад</a> и заполните все поля!");
}
//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);
$password = stripslashes($password);
$password = htmlspecialchars($password);
//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);
// подключаемся к базе

$query = mysql_query("SELECT login, pass FROM users WHERE 1='1'", $connect); //извлекаем из базы все данные о пользователе с введенным логином
$row = mysql_fetch_array($query);

if ($login !== $row["login"])
{
//если пользователя с введенным логином не существует
exit ("Извините, введённый вами login или пароль неверный!<br>Вернитесь <a href='enter.php'>назад</a> чтобы повторить попытку.");
}
else {
//если существует, то сверяем пароли
if ($row['pass'] == $password) {
//если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
$_SESSION['login']=$row['login'];
$_SESSION['id']=$row['id'];
//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
echo "Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a><br>" ;

}
else {
//если пароли не сошлись

exit ("Извините, введённый вами login или пароль неверный.");
}
}



?>[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
andrey_94
andrey_94
Topic Starter сообщение 10.11.2009, 17:03; Ответить: andrey_94
Сообщение #2


никто не поможет?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 10.11.2009, 17:41; Ответить: Letmetouchyou
Сообщение #3


[PHP]do
{
if ($login == $row['login'] ) {
if ($row['pass'] == $password) {
//если пароли совпадают, то
$_SESSION['login']=$row['login'];
$_SESSION['id']=$row['id'];
echo "Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a><br>" ;
}
break;
} else {
exit ("Извините, введённый вами login или пароль неверный!<br>Вернитесь <a href='enter.php'>назад</a> чтобы повторить попытку.");
}
}
while ($row = mysql_fetch_array ($query)); [/PHP]
попробуйте так
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
сообщение 10.11.2009, 17:42; Ответить: Letmetouchyou
Сообщение #4


или
[PHP]$query = mysql_query("SELECT login, pass FROM users WHERE 1='1'", $connect); //извлекаем из базы все данные о пользователе с введенным логином
do {

if ($login != $row["login"])
{
//если пользователя с введенным логином не существует
exit ("Извините, введённый вами login или пароль неверный!<br>Вернитесь <a href='enter.php'>назад</a> чтобы повторить попытку.");
}
else {
//если существует, то сверяем пароли
if ($row['pass'] == $password) {
//если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
$_SESSION['login']=$row['login'];
$_SESSION['id']=$row['id'];
//эти данные очень часто используются, вот их и будет "носить с собой" вошедший пользователь
echo "Вы успешно вошли на сайт! <a href='index.php'>Главная страница</a><br>" ;

}
else {
//если пароли не сошлись

exit ("Извините, введённый вами login или пароль неверный.");
}
}
}
while($row = mysql_fetch_array($query));[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
andrey_94
andrey_94
Topic Starter сообщение 10.11.2009, 17:51; Ответить: andrey_94
Сообщение #5


первый код
Не работает.
Теперь при правильном вводе данных пишет:
Извините, введённый вами login или пароль неверный!
Вернитесь назад чтобы повторить попытку.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
andrey_94
andrey_94
Topic Starter сообщение 10.11.2009, 17:53; Ответить: andrey_94
Сообщение #6


Второй код выводит
Вы успешно вошли на сайт! Главная страница
Извините, введённый вами login или пароль неверный!
Вернитесь назад чтобы повторить попытку.

При этом сессия не началась
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Witu
Witu
сообщение 10.11.2009, 18:23; Ответить: Witu
Сообщение #7


andrey_94, чо за видео курс такой?)

WHERE login=******** AND pass=***********

это идиотизм селектить все данные и потом сравнивать

а если а базе тыщ 5 пользователей?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
r3ntg3n
r3ntg3n
сообщение 10.11.2009, 19:50; Ответить: r3ntg3n
Сообщение #8


Первое, для ребят, которые предлагали метод с сессией, перед тем, как писать данные в глобальный массив $_SESSION[], надо сессию начать функцией session_start();

Второе, при авторизации через мускул адекватнее сделать так:
[php]
session_start();
if (!$_SESSION['id']) { // проверяем, не была ли пройдена авторизация раньше, чтобы еще раз не посылать запрос в БД
$query = 'SELECT id FROM users WHERE login=\''.$login.'\' AND password=\''.$password;
$id_query = mysql_query($query);
if (!id_query) {
die ('Ошибка выполнения запроса');
} else {
if (0 == mysql_num_rows($id_query) {
die ('Логин/пароль неверный');
} else {
list($id) = mysql_fetch_row($id_query);
$_SESSION['id'] = $id; // запись переменной в сессию, для последующей проверки авторизации
echo ('Авторизация успешна');
}
}
} else {
echo ('Авторизация успешна'); // если в сессии есть ИД пользователя, значит авторизация была пройдена раньше, выводим сообщение
}
[/php]Переменные $login и $password конечно же получаете из $_POST, предварительно обработав от слешей и тегов функциями htmlspecialchars(stripslashes($_POST['login'])). не обязательно функции разделять, можно вложить одну в другую.

Еще можно в форму в поле hidden писать ИД сессии, повышаете уровень защиты формы от межсайтового скриптинга, а при отправке формы проверять полученное значение из формы с значением, которое вернет обработчик формы. В случае несовпадения - сообщение об ошибке.

И еще один совет - пароли не храните в чистом виде в базе, хэшируйте, хотя бы по MD5 алгоритму. Пусть там и говорят, что хэшах от MD5 находят коллизии на 4-8 часов. Можете експоудить строку с паролем, перемешать символы и тогда хешировать, можно даже несколько раз. И результирующий хэш писать в базу в поле пароля. при авторизации введенный пароль захэшировать таким же образом и сравнить с результатом из базы. Совпали - добро пожаловать. Для этой цели удобнее всего написать функцию хэширования, и апдейтить ее по мере того, как придумаете новые алгоритмы. Можно воспользоваться комбинацией из MD5 и SHA1, можно к паролю приписать несколько символов и тогда разбить по-символьно, перемешать и хэшировать. Все уже зависит от Вас, как Вам будет угодно ;)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
andrey_94
andrey_94
Topic Starter сообщение 10.11.2009, 19:51; Ответить: andrey_94
Сообщение #9


HTMLandPHP
Если вы про это:
[php]SELECT login, pass FROM users WHERE 1='1'[/php]Я по разному пытался сделать... изначально такого
WHERE 1='1' не было.
Я просто подумал что почему-то выбирается только первая запись в таблице... и создал поле 1, для всех записей по умолчанию 1, чтобы скрипт искал по всей таблице
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
andrey_94
andrey_94
Topic Starter сообщение 10.11.2009, 20:20; Ответить: andrey_94
Сообщение #10


r3ntg3n
Не работает
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
5 страниц V   1 2 3 4 5 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) СОЗДАНИЕ : / САЙтЫ / ЛЕНДЫ / БОТЫ ТГ / ВАЙТЫ / КРЕО / СОФТЫ / ДИЗАЙН [PHP, JS, HTML/CSS] и другое
5 CULA 3289 19.12.2023, 18:55
автор: CULA
Открытая тема (нет новых ответов) Услуги по созданию и доработке скриптов PHP, MySQL, JavaScript, jQuery
Разработка сайтов и сервисов под-ключ
0 alexey 1168 24.11.2023, 14:46
автор: alexey
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВеб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
56 qpPeW 44760 19.7.2023, 10:03
автор: qpPeW
Открытая тема (нет новых ответов) Есть спецы по php/laravel?
3 Mixatraider 1856 26.5.2023, 20:48
автор: Mixatraider
Открытая тема (нет новых ответов) Опытный PHP\Python разработчик в поиске интересных задач
6 daikzlex 3360 25.5.2023, 13:55
автор: daikzlex


 



RSS Текстовая версия Сейчас: 28.3.2024, 16:55
Дизайн