Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 61

Подскажите правильно ли я сделал примитивную Авторизацию и Регистрацию

21.05.2013, 19:43. Показов 1142. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Осваиваю PHP. Решил сделать Авторизацию и Регистрацию на сайте. Посмотрите что получилось.(У меня все работает)Но может быть дадите какие-то советы или можно было сделать это все намного проще. И не могли вы подсказать как сделать защиту от "инъекций".
Файл install_db.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
include('connect_db.php');// подключение к серверу MySql и выбор БД
 
// sql-скрипт для создания таблицы
$sql='CREATE TABLE users(
  id INT NOT NULL AUTO_INCREMENT,
  login VARCHAR(25),
  password TEXT,
  email VARCHAR(150),
  PRIMARY KEY(id)
);';
 
//выполняем sql-запрос
if(!mysql_query($sql)){
  echo 'Ошибка при создании таблицы в БД!';
} else {
  echo 'Всё прошло отлично, таблица создана!';
}
?>
Файл connect_db.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php  
$dbhost = 'localhost'; //сервер MySQL
$dbname = 'project'; //название  БД 
$dbuser = 'root'; //пользователь MySQL  
$dbpassword = ''; //пароль от пользователя MySQL  
 
 
// подключаемся и выбираем бд
if(!mysql_connect($dbhost,$dbuser,$dbpassword))
  die('Не удалось подключиться к серверу MySql!');
elseif(!mysql_select_db($dbname))
  die('Не удалось выбрать БД!');
?>
Файл login.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php include("connect_db.php");?>
<div align="center">
<?php  
if(isset($_POST['submit'])){ //выполняем нижеследующий код, только если нажата кнопка  
    if(empty($_POST['login'])){ //если переменная логина пуста или не существует  
            echo"Вы не ввели логин"; // выводим сообщение об ошибке  
        }elseif(!preg_match("/[-a-zA-Z0-9]{3,15}/", $_POST['login'])){ //если переменная не соответствует шаблону -a-zA-Z0-9  
            echo"Вы неправильно ввели логин"; // выводим сообщение об ошибке      
        }elseif(empty($_POST['password'])){ //если переменная логина пуста или не существует  
            echo"Вы не ввели пароль"; // выводим сообщение об ошибке  
        }elseif(!preg_match("/[-a-zA-Z0-9]{3,30}/", $_POST['password'])){ //если переменная не соответствует шаблону -a-zA-Z0-9  
            echo"Вы неправильно ввели пароль"; // выводим сообщение об ошибке      
        }else{  
            $login = $_POST['login']; //присваеваем переменную  
            $password = md5(md5($_POST['password']));//присваеваем переменную и кодируем её в md5 для безопасности  
            $query = mysql_query("SELECT * FROM `users`  WHERE `login`='$login' AND `password`='$password'"); //отправляем запрос на выборку всего содержимого , где поле логин равно переменной $login, а поле password равно переменной $password  
            $row = mysql_num_rows($query); // считаем количество рядов результата запроса  
                if($row > 0){ //если их больше 0  
                        echo 'Вы успешно авторизовались под логином: '.$_POST["login"].' '; // выводим сообщение об удачной авторизации!                   
                    }else{  
                        echo 'Неправильный логин или пароль!'; // выводим сообщение об ошибке!  
                        }  
            }  
                        }  
?>
    <form method='post' >
        Логин: <br /><input type='text' size='30' name='login' /><br />
        Пароль: <br /><input type='password' size='30' name='password' /><br />
        <input type='submit' value='Вход' name='submit'/>
        <input type="reset" value="Очистить" /><br />
        *Все данные вводятся на латинской раскладке.<br />
        <br /><a href="/register.php">Регистрация</a>
    </form>
</div>
Файл register.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
include('connect_db.php');// подключение к серверу MySql и выбор БД
if(!isset($_POST['submit'])){
    $query = mysql_query("SELECT * FROM `users`  WHERE `login`='".$_POST['login']."'"); //отправляем запрос на выборку всего содержимого , где поле логин равно переменной $login  
    $row = mysql_num_rows($query); // считаем количество рядов результата запроса  
        if(empty($_POST['login'])){ //если переменная логина пуста или не существует  
                echo"Вы не ввели логин"; // выводим сообщение об ошибке  
            }elseif(!preg_match("/[-a-zA-Z0-9]{3,25}/", $_POST['login'])){ //если переменная не соответствует шаблону -a-zA-Z0-9; длинна логина не меньше 3 и не больше 25
                echo"Вы неправильно ввели логин"; // выводим сообщение об ошибке      
            }elseif(empty($_POST['password_1'])){ //если переменная пароля пуста или не существует  
                echo"Вы не ввели пароль"; // выводим сообщение об ошибке  
            }elseif($row > 0){ //если переменная больше 0  
                echo"Такой пользователь уже существует!"; // выводим сообщение об ошибке  
            }elseif(!preg_match("/[-a-zA-Z0-9]{3,30}/", $_POST['password_1'])){ //если переменная не соответствует шаблону -a-zA-Z0-9; длинна пароля не меньше 3 и не больше 30
                echo"Вы неправильно ввели пароль"; // выводим сообщение об ошибке      
            }elseif(empty($_POST['password_2'])){ //если переменная логина пуста или не существует  
                echo"Вы не ввели подтверждение пароля"; // выводим сообщение об ошибке  
            }elseif(!preg_match("/[-a-zA-Z0-9]{3,30}/", $_POST['password_2'])){ //если переменная не соответствует шаблону -a-zA-Z0-9; длинна пароля не меньше 3 и не больше 30  
                echo"Вы неправильно ввели подтверждение пароля"; // выводим сообщение об ошибке      
            }elseif($_POST['password_1'] != $_POST['password_2']){ //если переменная пароля и переенная  повтора пароля не одинаковы  
                echo"Вы неправильно ввели подтверждение пароля"; // выводим сообщение об ошибке      
            }elseif(empty($_POST['email'])){ //если переменная E-mail'a пуста   
                echo"Вы не ввели E-mail"; // выводим сообщение об ошибке      
            }elseif(!preg_match("|[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}|i", $_POST['email'])){ //регулярка на проверку правильности email  
                echo"Вы неправильно ввели E-mail"; // выводим сообщение об ошибке      
            }else{ //если же ошибок нет  
                    $login = $_POST['login']; //присваеваем переменную  
                    $password = md5(md5($_POST['password_1']));//присваеваем переменную и кодируем её в md5 для безопасности  
                    $email = $_POST['email'];//присваеваем переменную  
                    $insert = mysql_query("INSERT INTO `users` (`login` ,`password` ,`email` ) VALUES ('$login', '$password', '$email')"); //выполняем запрос на добавление нового пользователя  
                        if($insert == true){  
                            echo 'Спасибо регистрация пользователя '.$_POST['login'].' прошла успешно!<br><font color=red><a href=login.php>Нажмите</a> для продолжения.</font>';  
                                }else{  
                            echo 'Непредвиденная ошибка!';  
                            }  
                }    
                            }else{ 
                                echo 'Вы не нажали кнопку "Регистрация"';
        }
                ?>
 
    <form method='post' action='/register.php'>
        Введите Логин: <input type='text' size='30' name='login' /><br />
        Введите e-mail: <input type='text' size='30' name='email' /><br />
        Пароль: <input type='password' name='password_1' size='30' /><br />
        Повторите пароль: <input type='password' name='password_2' size='30' /><br />
        <input type='submit' value='Регистрация' />
        <input type="reset" value="Очистить" /><br />
        *Все данные вводятся на латинской раскладке.<br />
        **Все поля обязательны для заполнения.
    </form>
Сейчас хочу куки подключить... никто не даст ссылку где почитать или подскажет прямо здесь? Заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2013, 19:43
Ответы с готовыми решениями:

Подскажите, правильно ли я сделал (задание в SQl)
Предыстория: на собеседовании дали тестовое задание сделать, причем сказал, что sql плохо знаю, да и в требованиях не было..видимо решили...

Cookies в авторизацию/регистрацию
Приветствую всех! Помогите создать простые куки в авторизации. Есть страница простенькой авторизации, у меня примерно так: ... ...

Подскажите пожалуйста, что не так сделал и как нужно написать правильно
Идея такова : даны уравнения прямых а1х+b1y=c1, a2x+b2y=c2, a3x+b3y=c3. Выяснить, какие из этих прямых параллельны, а какие - нет.Само по...

2
65 / 65 / 18
Регистрация: 10.03.2013
Сообщений: 188
21.05.2013, 21:32
Вам нужно добавить защиту от sql-инъекции и
PHP
1
$password = md5(md5($_POST['password_1']));
говорят такой хеш не очень, лучше как нибудь так
PHP
1
$password = md5("!@#$%^".$_POST['password_1']."!@#$%");
Ну или генерировать соль для каждого нового пользователя и хранить ее в базе
2
2 / 2 / 1
Регистрация: 21.11.2011
Сообщений: 61
21.05.2013, 21:33  [ТС]
Цитата Сообщение от Sima175 Посмотреть сообщение
Вам нужно добавить защиту от sql-инъекции и
PHP
1
$password = md5(md5($_POST['password_1']));
говорят такой хеш не очень, лучше как нибудь так
PHP
1
$password = md5("!@#$%^".$_POST['password_1']."!@#$%");
Ну или генерировать соль для каждого нового пользователя и хранить ее в базе
Спасибо, буду знать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.05.2013, 21:33
Помогаю со студенческими работами здесь

Добавить на сайт авторизацию / регистрацию
Надо чтобы на сайте осуществлялась регистрация.Помогите пжл-ста сайт полностью сделала сама.С этой поставленной задачой не могу справиться...

Как сделать регистрацию и авторизацию на сайте
Здравствуйте, немного изучив два языка разметки (html и css) я создал главную страницу своего (надеюсь ) будущего сайта но у меня возникла...

Осуществить регистрацию и авторизацию через MySQL
Кто может помочь осуществить регистрация и авторизацию через MySQL Проект для Cyberforum! Что будет далее это секрет для всех =))) Кто...

Не получается создать авторизацию и регистрацию посетителей
Доброго времени суток! Подскажите пожалуйста, как быть? Есть страничка на html (index.html), в которой находится форма регистрации: ...

Как быстро сделать регистрацию/авторизацию
Как побыстрому на простом сайте сделать регистрацию и авторизацию? Меня интересует готовый шаблон. Например чтобы не авторизированный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru