[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверить пользователя на существование.
DarkStalker
Здравствуйте. Подскажите как в скрипте регистрации сделать сделать проверку на существование логина? Чтобы не было пользователей с одинаковым логином. И как зашифровать пароль?


<?
include ('header.php');
if(empty($_POST['login']) || empty($_POST['pass'])) {
echo "Не заполнено одно или несколко полей!<br><a href=http://$url>Вернуться</a>"; include ('footer.php'); exit(); }
else {
$login = htmlspecialchars ($_POST['login']);
$pass = htmlspecialchars ($_POST['pass']); }
$login = trim($login);
$pass = trim($pass);
$sql = mysql_query("INSERT INTO user (`login`, `pass`, `admin`) VALUES ('$login', '$pass', '0')");
include ('footer.php');
?>


я проверил поля на пустоту, применил htmlspecialchars, убрал пробелы. Теперь надо проверить логин и зашифровать пароль. Как это сделать?



Спустя 11 минут, 43 секунды (9.04.2011 - 15:06) neadekvat написал(а):
Посмотрите здесь, пункт "Обработка данных".

Пароль не шифруется, а хэшируется функцией md5.

Спустя 1 минута, 23 секунды (9.04.2011 - 15:08) quickxyan написал(а):
а ты сначала не вставляй нового пользователя, а сделай выборку по полю логин. если ничего не найдено, то можешь вставлять smile.gif

Спустя 2 минуты, 55 секунд (9.04.2011 - 15:11) DarkStalker написал(а):
neadekvat, посмотрел "Как обрабатывать данные, приходящие от пользователя?", "А как обрабатывать данные, отдаваемые пользователю?", но не нашёл там ничего полезного по данной теме.

Спустя 4 минуты, 24 секунды (9.04.2011 - 15:15) neadekvat написал(а):
DarkStalker, да прямо? Как ж вы читали. Вот смотрю на ваш код - а вы берете и перед добавлением в бд модифицируете данные пользователя. А по ссылке что написано?

Спустя 10 секунд (9.04.2011 - 15:15) DarkStalker написал(а):
quickxyan, я так и хочу.
выборку делаем так:

$proverka = ("SELECT * FROM firma WHERE login = '$login'", $db);

а как проверить теперь $proverka?

Спустя 33 секунды (9.04.2011 - 15:16) DarkStalker написал(а):
neadekvat, а я у вас в теме что спросил?

Спустя 4 минуты, 9 секунд (9.04.2011 - 15:20) neadekvat написал(а):
Цитата (DarkStalker @ 9.04.2011 - 16:16)
а я у вас в теме что спросил?

А я разве счет за услуги выставляю? Не хотите - не надо. Удачи.

Спустя 2 минуты, 27 секунд (9.04.2011 - 15:22) DarkStalker написал(а):
neadekvat, просто я в теме попросил подсказать как проверить наличие логина в базе, а не то как мне обработать данные от пользователя.

Спустя 6 минут, 18 секунд (9.04.2011 - 15:29) neadekvat написал(а):
DarkStalker, а я увидел у вас довольно грубую ошибку и указал на нее.
Плюс ответил на часть вопроса - про пароль. Ведь именно этот вопрос стоит в конце? А то, что было в начале.. я уже и забыл к концу поста.

$query = mysql_query("SELECT user_id FROM tbl WHERE user_login = '$login'");
$num_rows = mysql_num_rows($query);
if ($num_rows > 0)
echo 'Пользователь с таким логином уже есть';

Спустя 3 минуты, 45 секунд (9.04.2011 - 15:32) DarkStalker написал(а):
neadekvat, спасибо большое. А в чём моя ошибка?

Спустя 2 минуты, 27 секунд (9.04.2011 - 15:35) neadekvat написал(а):
Цитата (DarkStalker @ 9.04.2011 - 16:32)
А в чём моя ошибка?

Вы обрабатываете данные пользователя функцией, которая эти данные коверкает. Пользователь введет "<>", а в базе будет хранится "&lt;&gt;" - это неправильно. В базе должно хранится именно "<>", а уж при выводе на экран применяйте htmlspecialchars.
Ровно то же самое написано по ссылке. Серьезно.

Спустя 2 минуты, 31 секунда (9.04.2011 - 15:37) XCross написал(а):
<?php
include 'header.php';
if(
empty($_POST['login'])
or
empty($_POST['pass']))

{
echo ("Не заполнено одно или несколко полей!
<br>
<a href=http://
$url>Вернуться</a>");

include 'footer.php';
exit();
}
else
{
$login = trim($_POST['login']);
$pass = md5($_POST['pass']);
$find_user=mysql_query("SELECT * FROM `user` WHERE `login` = '$login'") or die(mysql_error());
if($find_user == 0)
{
mysql_query("INSERT INTO `user` (`login`, `pass`, `admin`) VALUES ('$login', '$pass', '0')") or die(mysql_error());
include 'footer.php';
}
?>


Где то в районе такого, но еще надо дофиха делать...
Гы....на до мной ток не смейтесь плиз..сами знаете...

Спустя 4 минуты, 56 секунд (9.04.2011 - 15:42) neadekvat написал(а):
kmaks, вот только or die(mysql_error()) в рабочем скрипте недопустимо оставлять - пользователю надо показывать нормальные ошибки, а не пугать его всякой фигней или белым экраном. К тому же, в ошибке от БД можно разузнать структуру базы.

И, да: если в бд нет строк, удовлетворяющих запросу, все равно вернется ресурс.
Т.е. ваше последнее условие выполнится только в случаи, если в запросе есть ошибка синтаксиса.

Спустя 2 минуты, 3 секунды (9.04.2011 - 15:44) DarkStalker написал(а):
neadekvat, спасибо ещё раз. Я упусти это из виду. Значит в моём случае htmlspecialchars вообще не нужно?

Спустя 15 секунд (9.04.2011 - 15:45) XCross написал(а):
Се понял, молчу biggrin.gif

Тогда вопрос...

Можно так:

блаблабла....or die($error="Ошибка такая то такая то");
А потом, где нужно отобразить ошибку там и echo($error); ???

Спустя 17 минут, 16 секунд (9.04.2011 - 16:02) Trianon написал(а):
после die() никакого "где" уже не настанет.
Процесс завершится.

Спустя 3 минуты, 3 секунды (9.04.2011 - 16:05) neadekvat написал(а):
Цитата (DarkStalker @ 9.04.2011 - 16:44)
Значит в моём случае htmlspecialchars вообще не нужно?

В приведенном куске кода - нет.

Спустя 6 минут, 27 секунд (9.04.2011 - 16:11) DarkStalker написал(а):
neadekvat, ещё вопрос. пароль у меня теперь в md5. А при авторизации пароль из БД нужно привести же будет к исходному состоянию? если да, то как?

Спустя 1 минута, 35 секунд (9.04.2011 - 16:13) neadekvat написал(а):
Хэшированные строки к исходному уже никак не привести.
Надо наоборот - захэшировать введенный пользователем пароль и сравнить хэши.

Спустя 16 минут (9.04.2011 - 16:29) DarkStalker написал(а):
Попробывал написать скрипт авторизации. Выдаёт белый лист.
<?
include ('header.php');
if(empty($_POST['login']) || empty($_POST['pass'])) {
echo "Не заполнено одно или несколко полей!<br><a href=http://$url>Вернуться</a>"; include ('footer.php'); exit(); }
else {
$login = mysql_real_escape_string($_POST['login']);
$pass = mysql_real_escape_string($_POST['pass']);
$login = trim($login);
$pass = trim($pass);
$pass = md5($pass);
}
$proverka = mysql_query("SELECT * FROM user WHERE login = '$login' AND '$pass'", $db);
$num_rows = mysql_num_rows($proverka);
if ($num_rows > 0) {
echo "Вы успешно авторизованы!";}
else { "Ошибка!"; }
include ('footer.php');
?>


Почему?

Спустя 5 минут, 12 секунд (9.04.2011 - 16:34) neadekvat написал(а):
Теоретическое общение. Проблема была ровно такая же - белый лист.

Спустя 5 минут, 12 секунд (9.04.2011 - 16:39) DarkStalker написал(а):
neadekvat, отображение ошибок включено, так как раньше выводились ошибки.

Спустя 3 минуты, 43 секунды (9.04.2011 - 16:43) neadekvat написал(а):
Попробуйте в htaccess прописать его. Если скрипт должен что-то вывести, но не выводит - значит должна быть ошибка.

Спустя 5 минут, 14 секунд (9.04.2011 - 16:48) DarkStalker написал(а):
neadekvat, в php.ini есть строка error_reporting = E_ALL & ~E_NOTICE. Это попробывать записать в .htaccess?

Спустя 3 минуты, 56 секунд (9.04.2011 - 16:52) neadekvat написал(а):
Хм, не надо пока что.. Попробуйте такой метод:
берете код, например, die('ok'); и вставляете его через строку, начиная с перой. Там, где пропадет сообщение "ok" и есть глюк:
<?
die('ok');
include ('header.php');
if(empty($_POST['login']) || empty($_POST['pass'])) {

Выводит ok
<?
include ('header.php');
die('ok');
if(empty($_POST['login']) || empty($_POST['pass'])) {

Белый экран - ошибка в строке include ('header.php'); то есть скорее в файле 'header.php'
Если же ok - смотрите дальше.

Спустя 11 минут, 33 секунды (9.04.2011 - 17:04) DarkStalker написал(а):
neadekvat, спасибо, нашёл ошибку, кое-где не поставил echo. а если мне надо занести логин в куки, то мне нужно прописать только
setcookie ("login", "$login");
? Только вот как потом вывести логин из куков?

Спустя 4 минуты, 34 секунды (9.04.2011 - 17:08) neadekvat написал(а):
Как минимум надо установить время, но я обычно использую и четвертый параметр - путь, чтобы кукисы были доступны по всему сайту в пределах домена:
setcookie ("login", $login, time() + 3600 * 24 * 30, '/'); // Куки на месяц

Спустя 3 минуты, 50 секунд (9.04.2011 - 17:12) DarkStalker написал(а):
3600 * 24 * 30 - а что значат эти цифры? Я знал, что время задаётся в сек, но, что значат остальные?
'/' - я так понял это чтобы кукисы были доступны по всему сайту в пределах домена?

Спустя 2 минуты, 1 секунда (9.04.2011 - 17:14) neadekvat написал(а):
Цитата (DarkStalker @ 9.04.2011 - 18:12)
3600 * 24 * 30 - а что значат эти цифры? Я знал, что время задаётся в сек, но, что значат остальные?

Собственно секунды и значат smile.gif 3600 - это час. 3600 * 24 - это сутки.

Цитата (DarkStalker @ 9.04.2011 - 18:12)
'/' - я так понял это чтобы кукисы были доступны по всему сайту в пределах домена?

Да. Можно и конкретный домен установить - для интереса - в документацию

Спустя 1 минута, 33 секунды (9.04.2011 - 17:16) DarkStalker написал(а):
только подключил куки
$proverka = mysql_query("SELECT * FROM user WHERE login = '$login' AND pass = '$pass'", $db);
$num_rows = mysql_num_rows($proverka);
if ($num_rows > 0) {
echo "Вы успешно авторизованы!"; setcookie ("login", $login, time() + 3600 * 24 * 30, '/');}
else {
echo "Ошибка!";
}


и ошибка: Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\header.php:11) in Z:\home\test1.ru\www\auth.php on line 15.

Не понял, что значит "Предупреждение: Не могу изменить информацию в заголовке - заголовки уже прислал"... :(

Спустя 4 минуты, 28 секунд (9.04.2011 - 17:20) neadekvat написал(а):
Второй раз даю ссылку сюда smile.gif Вопросы 3 и 4.

Спустя 5 минут, 59 секунд (9.04.2011 - 17:26) DarkStalker написал(а):
neadekvat, отлично, и куда мне тогда поместить строчку setcookie ("login", $login, time() + 3600 * 24 * 30, '/'); ???

Спустя 2 минуты, 40 секунд (9.04.2011 - 17:29) neadekvat написал(а):
Очевидно, до первого вывода на экран.
Вы создаете логику совего приложения, а не я.

Спустя 5 минут, 23 секунды (9.04.2011 - 17:34) DarkStalker написал(а):
neadekvat, пришлось убрать <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> и прочие из header.php.

А вывести логин из куки можно $_COOKIE["login"]; ?

Спустя 5 минут, 55 секунд (9.04.2011 - 17:40) neadekvat написал(а):
Да
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.