Скрипт авторизации
<?php
session_start();
require_once ("connect.php");
if (isset($_POST['name']) && isset($_POST['pass']))
{
$name = mysql_real_escape_string($_POST['name']);
$pass = md5($_POST['pass']);
// делаем запрос к БД
// и ищем юзера с таким логином и паролем
$query = "SELECT `id`
FROM `USERS`
WHERE `name`='{$name}' AND `pass`='{$pass}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
// если такой пользователь нашелся
if (mysql_num_rows($sql) == 1)
{
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
$_SESSION['user_name'] = $row['name'];
echo "Авторизация Успешна";
}
else
{
die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию.');
}
}
?>
<center>
АВТОРИЗАЦИЯ<br>
<form action="game.php" method="post">
Имя:<input type="text" name="name" value=""><br>
pass:<input type="password" name="pass"><br>
<input type="submit" name=‘enter’ value="Войти">
</form></center>
Этот скрипт на главной страничке.
<?php
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_id']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$SESSION['name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>
Так вот. Ошибка заключается в том, что авторизация не проходит. Точнее Проходит, но в сессию ничего не пишется. Соответсвенно выполняется только вот этот кусок кода:
if (!isset($_SESSION['user_id']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
Спустя 3 минуты, 2 секунды (25.07.2011 - 17:04) ADiel написал(а):
Простите за нивный вопрос, но что выдает echo mysql_num_rows($sql) и var_dump($row) ?
Спустя 26 минут, 54 секунды (25.07.2011 - 17:30) Druids написал(а):
1
array(1) { ["id"]=> string(1) "1" }
Прописывал вот в это условие:
array(1) { ["id"]=> string(1) "1" }
Прописывал вот в это условие:
if (mysql_num_rows($sql) == 1)
{
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
echo mysql_num_rows($sql);
echo var_dump($row);
}
Спустя 5 минут, 3 секунды (25.07.2011 - 17:35) m4a1fox написал(а):
Druids
Потому что из БД вот тут
Вытаскиваете только id а надо?
Потому что из БД вот тут
SELECT `id`
Вытаскиваете только id а надо?
Спустя 5 минут, 5 секунд (25.07.2011 - 17:41) Druids написал(а):
Цитата (m4a1fox @ 25.07.2011 - 14:35) |
Druids Потому что из БД вот тут
Вытаскиваете только id а надо? |
не много не понял вас =( В данном случае 1 id мало будет? что ещё необходимо будет прописать?
<?php
session_start();
if (!isset($_SESSION['user_id']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
Спустя 1 минута, 14 секунд (25.07.2011 - 17:42) ADiel написал(а):
$row['name']. Вот я и гворю var_dump($row)
Не хотел прямо говорить, пусть человек мозгами шевелит
но id будет достоточно для проверки
Не хотел прямо говорить, пусть человек мозгами шевелит
но id будет достоточно для проверки
Спустя 2 минуты, 50 секунд (25.07.2011 - 17:45) Druids написал(а):
Благодарю =) Весь день промучился. не знал, в чем ошибка =)
Спустя 5 секунд (25.07.2011 - 17:45) m4a1fox написал(а):
Цитата |
но id будет достоточно для проверки |
Для проверки - вполне!
но скажи Druids, как у тебя это условие выполнится
$_SESSION['user_name'] = $row['name'];
Если ты выбрал только id?
Спустя 46 секунд (25.07.2011 - 17:45) ADiel написал(а):
какое условие? Я вижу присваивание. Масимум выдаст undefined index 'name'
Фишка в том, что действительно какой то глюк.. id он должен сессии присваиваться. МОжет быть где то есть if ($_SESSION['user_id'] = какое то значение?)
Даже не знаю, что еще предположить
Фишка в том, что действительно какой то глюк.. id он должен сессии присваиваться. МОжет быть где то есть if ($_SESSION['user_id'] = какое то значение?)
Даже не знаю, что еще предположить
Спустя 1 минута, 51 секунда (25.07.2011 - 17:47) Invis1ble написал(а):
Цитата |
$SESSION['name'] |
вот тут тоже ошибка ($_SESSION)
Спустя 1 минута, 5 секунд (25.07.2011 - 17:48) ADiel написал(а):
Ну не влияет это на user_id! Тут что то другое, таинственное =)
Спустя 2 минуты, 13 секунд (25.07.2011 - 17:51) Invis1ble написал(а):
Собственно, нужно определить:
1. Выполняется ли блок:
1. Выполняется ли блок:
Цитата |
if (mysql_num_rows($sql) == 1) { // то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя) $row = mysql_fetch_assoc($sql); $_SESSION['user_id'] = $row['id']; $_SESSION['user_name'] = $row['name']; echo "Авторизация Успешна"; } |
?
2. Выполняется ли блок:
Цитата |
else { echo "Вы авторизованы как" .$SESSION['name']."<br>"; echo "<a href='logout.php'>Выход</a>"; } |
?
Спустя 1 минута, 39 секунд (25.07.2011 - 17:52) Invis1ble написал(а):
У меня подозрение, что все работает, но "ошибка" в $SESSION['name'], поэтому ТС думает, что в сессию не пишутся данные
При этом, естественно, нужно еще записать при авторизации имя юзверя, выбрав его из БД
При этом, естественно, нужно еще записать при авторизации имя юзверя, выбрав его из БД
Спустя 46 секунд (25.07.2011 - 17:53) Druids написал(а):
дабы вас ен смущать и самого себя...
$_SESSION['user_name'] = $row['name']; -убрал эту строчку.
Не поработало, ссылался не на ту страничку.
$_SESSION['user_name'] = $row['name']; -убрал эту строчку.
Не поработало, ссылался не на ту страничку.
Спустя 1 минута, 10 секунд (25.07.2011 - 17:54) Invis1ble написал(а):
Druids
Я ж говорю, напиши какие блоки выполняются.
Я ж говорю, напиши какие блоки выполняются.
Спустя 4 минуты, 30 секунд (25.07.2011 - 17:59) Invis1ble написал(а):
Свернутый текст
<?php
session_start();
require_once ("connect.php");
if (isset($_POST['name'], $_POST['pass']))
{
$name = mysql_real_escape_string($_POST['name']);
$pass = md5($_POST['pass']);
// делаем запрос к БД
// и ищем юзера с таким логином и паролем
$query = "SELECT COUNT(`id`)
FROM `USERS`
WHERE `name`='{$name}' AND `pass`='{$pass}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
// если такой пользователь нашелся
if (mysql_result($sql, 0))
{
$_SESSION['user_name'] = $_POST['name'];
echo "Авторизация Успешна";
}
else
{
die('Такой логин с паролем не найдены в базе данных. И даём ссылку на повторную авторизацию.');
}
}
?>
<center>
АВТОРИЗАЦИЯ<br>
<form action="game.php" method="post">
Имя:<input type="text" name="name" value=""><br>
pass:<input type="password" name="pass"><br>
<input type="submit" name=‘enter’ value="Войти">
</form></center>
Свернутый текст
<?php
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>
Спустя 43 секунды (25.07.2011 - 17:59) m4a1fox написал(а):
Тупичок????
Спустя 2 минуты, 45 секунд (25.07.2011 - 18:02) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 14:59) |
Свернутый текст <?php Свернутый текст <?php |
Не выполняется, таже самая реакция =(
Спустя 2 минуты, 52 секунды (25.07.2011 - 18:05) Invis1ble написал(а):
Druids
Хм... А пишет "Авторизация Успешна" ?
Хм... А пишет "Авторизация Успешна" ?
Спустя 1 минута, 46 секунд (25.07.2011 - 18:07) ADiel написал(а):
Хах, а если в бд неверный хеш? =)) ИЛи размер поля с паролем на несколько символов меньше?
Спустя 6 секунд (25.07.2011 - 18:07) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 15:05) |
Druids Хм... А пишет "Авторизация Успешна" ? |
Да. Выводит надпись, если убрать из формы action
Спустя 1 минута, 46 секунд (25.07.2011 - 18:09) m4a1fox написал(а):
Может просто не правильно данные ТС вводит в форму?
Спустя 32 секунды (25.07.2011 - 18:09) Invis1ble написал(а):
Druids
А ты до этого писал скрипты, использующие сессии? Т.е. сами сессии в принципе работают?
А ты до этого писал скрипты, использующие сессии? Т.е. сами сессии в принципе работают?
Спустя 13 секунд (25.07.2011 - 18:09) m4a1fox написал(а):
А если action пустым оставить?
Спустя 3 минуты, 37 секунд (25.07.2011 - 18:13) Druids написал(а):
А теперь самое интересное. Зашёл в базу, поставил на дилну пароля не 32 символа, а 64, ну так ради интереса, регнул нового пользователя с таким же паролем как и а старом. зашёл под ним - всё удачно. Далее вышел - зашёл под старым пользователем и тоже удачно. что произошло я не понял.. пароли в базе до и после изменения кол-ва символов - не изменились.
По идеи 32 символа должно было хватить?
По идеи 32 символа должно было хватить?
Спустя 1 минута, 33 секунды (25.07.2011 - 18:15) Invis1ble написал(а):
Druids
Цитата |
Зашёл в базу, поставил на дилну пароля не 32 символа, а 64 |
а смысл? md5-хэш имеет длину 32.
ты не ответил на вопрос по поводу работы сессий вообще.
Спустя 1 минута, 14 секунд (25.07.2011 - 18:16) Druids написал(а):
УРА, Нашёл. action - надо было делать пустым =)
Спустя 1 минута, 29 секунд (25.07.2011 - 18:17) m4a1fox написал(а):
Пожалуйста!
Спустя 9 секунд (25.07.2011 - 18:17) Invis1ble написал(а):
Druids
а причем тут action ? ты же пишешь, что пишет "Авторизация успешна"....
Вобщем совет - пиши неработающие скрипты как есть, а не выдумывай сферические в вакууме
а причем тут action ? ты же пишешь, что пишет "Авторизация успешна"....
Вобщем совет - пиши неработающие скрипты как есть, а не выдумывай сферические в вакууме
Спустя 54 секунды (25.07.2011 - 18:18) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 15:15) | ||
Druids
а смысл? md5-хэш имеет длину 32. ты не ответил на вопрос по поводу работы сессий вообще. |
Писал, почти такой-же тоже тут на форуме спрашивал. Ошибка была тогда в длине у меня 16 стояла а надо было 32... Сейчас того скрипта нет на компе =(
Спустя 1 минута, 23 секунды (25.07.2011 - 18:20) Druids написал(а):
Цитата (Invis1ble @ 25.07.2011 - 15:17) |
Druids а причем тут action ? ты же пишешь, что пишет "Авторизация успешна".... Вобщем совет - пиши неработающие скрипты как есть, а не выдумывай сферические в вакууме |
Честно, сам не понял =)
Спустя 29 секунд (25.07.2011 - 18:20) Invis1ble написал(а):
Druids
Цитата |
Сейчас того скрипта нет на компе =( |
Я помню этот топик
Спустя 47 секунд (25.07.2011 - 18:21) Invis1ble написал(а):
Druids
Цитата |
Честно, сам не понял |
зато я понял, ты привел видоизмененный скрипт, т.е. не такой, как есть на самом деле
Спустя 3 минуты, 24 секунды (25.07.2011 - 18:24) m4a1fox написал(а):
Цитата |
Честно, сам не понял =) |
А я говорю - незачто!
Спустя 10 часов, 29 минут, 7 секунд (26.07.2011 - 04:54) Druids написал(а):
<?php
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
}
?>
как вот сюда дописать проверку пользователя на права?
в Базе есть поле role имеющее всего 2 значения, Admin или user. Как такое реализовать. Скажем мы уже авторизовались, и на страничке делается проверка - если права Админа, то выводим форму, если мы юзер, то выводим просто текст.
Спустя 8 часов, 25 минут, 3 секунды (26.07.2011 - 13:19) Winston написал(а):
Ну примерно так
Свернутый текст
<?php
session_start();
require_once ('connect.php');
if (!isset($_SESSION['user_name']))
{
echo "<a href='login.php'>авторизация</a><br>";
echo "<a href='reg.php'>Регистрация</a><br>";
}
else
{
echo "Вы авторизованы как" .$_SESSION['user_name']."<br>";
echo "<a href='logout.php'>Выход</a>";
$result = mysql_fetch_assoc(mysql_query("SELECT `role` FROM `имя_таблицы` WHERE `user_name` = '" . $_SESSION['user_name'] . "'"));
if($result['role'] == 'admin')
{
//виводим форму
}
elseif($result['role'] == 'user')
{
//виводим текст
}
}
?>
Спустя 13 дней, 1 час, 25 минут, 58 секунд (9.08.2011 - 14:45) HAKIM написал(а):
$query = "SELECT `id`
FROM `USERS`
WHERE `name`='{$name}' AND `pass`='{$pass}'
LIMIT 1";
Вставь ещё name и не парся
$query = "SELECT `id`, `name`
FROM `USERS`
WHERE `name`='{$name}' AND `pass`='{$pass}'
LIMIT 1";
Спустя 3 минуты, 40 секунд (9.08.2011 - 14:48) HAKIM написал(а):
эмм дату не глянул(( сори офф