Кто-нибудь знает код, уж не знаю, java или HTML, чтобы создавать регистрацию на сайте? Очень НАДО!!!
Вид для печати
Кто-нибудь знает код, уж не знаю, java или HTML, чтобы создавать регистрацию на сайте? Очень НАДО!!!
Авторизацию для сайта можно сделать на JavaScript'e (для детей)
можно на сервере с использованием .htaccess
можно в серверных скриптах asp, php, cgi
но всё это дело не одной строчки, а приличного куска кода
примеров таких предостаточно, но использовать их не разбираясь в этом не получится
Webmaster, Возможно Вы можете подсказать какие-то ссылочки, где это демонстрируется или электронные книги, где это написано, хоть что-то!?
<?
session_start();
header("Content-Type: text/html; charset=cp1251");
function show_form($message){
?>
<?=$message?><br/>
<form method="post" name='form' id='form' action='login.php'>
<B>Имя:</B>
<input type='text' name='user' />
<br />
<B>Пароль:</B>
<input type='password' name='pass' />
<input type='submit' value="Вход" name='subm'/>
</form>
<?
die();
}
//Проверка нажатия кнопки submit
if(!isset($_POST['subm'])) show_from('');
//Проверка на введенные данные
if(!isset($_POST['user']) OR !isset($_POST['pass']) OR empty($_POST['user']) OR empty($_POST['pass']))
show_form("Не правильная пара логин-пароль.");
// подключение к БД - соответственно прописываем свои данные доступа к базе данных
$connection = mysql_connect("localhost","","") ;
mysql_select_db('database') ;
// НЕ смог достучаться до БД
if (mysql_error()) die();
$user = mysql_escape_string($_POST['user']);
$pass = md5($_POST['pass']."ahha");
// Проверяем есть ли пользователь с таким логином и паролем
$result = mysql_query("SELECT `id` FROM `users` WHERE `login`='".$user."' AND `pass`='".$pass."'");
// если есть - впускаем
if(mysql_num_rows($result)==1)
$_SESSION['admin']=$adm;
// Если нет - пишем так.
else
show_form("Incorrect login-password.");
// Далее сообщение которое увидит вошедший пользователь
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >
<meta http-equiv="refresh" content="3; url=index.php" >
Здравствуйте <?=mysql_escape_string($user);?>!
SQL
CREATE TABLE `users` (
`username` varchar(20) NOT NULL default '',
`pass` varchar(20) NOT NULL default ''
) ENGINE=MyISAM;
Данный пример не претендует на звание идеального метода защиты, но все же обойти его будет достаточно трудно. Представим следующее: у вас есть закрытый сайт "для своих" и вы не хотите чтобы туда заходили всякие нехорошие личности. В этом нам помогут сессии. Пароли и логины будем хранить в таблице mysql.
На первой странице index.php делаем форму для ввода данных:
<form method="post" аction="index2.php">
<table align="center" cellspacing="2" cellpadding="2" border="0" width="320">
<tr>
<td width="100">Имя:</td>
<td width="200"><input type="text" name="name" /></td>
</tr>
<tr>
<td width="100">Пароль:</td>
<td width="200"><input type="password" name="pass" /></td>
</tr>
<tr>
<td colspan="2" width="300" align="center">
<input type="submit" value="Вход" />
<input type="reset" value="Сбросить" />
</td>
</tr>
</table>
</form>
Думаю здесь пояснять ничего не нужно. Идем дальше: Сначала краткое пояснение. Мы создаем функцию проверки пользователя check(). У нас есть база данных my_site, содержащая поля id, name и pass, где name и pass - логин и пароль пользователя соответственно. Функция пропускает только тех, кто указал верный логин и пароль в форме ($name, $pass) на входе, потом эти переменные сохраняются в сессию, следовательно, пока сессия жива пользователь может заходить на ваш сайт без авторизации. Даже указав другой верный логин и пароль, он будет авторизирован под указанным ранее логином.
Предполагается, что соединение с базой mysql уже произведено и база данных выбрана.
<?
function check()
{
if (empty($pass)||empty($name))
error("Не указан логин или пароль");
$sql = "select * from my_site where login='".$name."'";
if ($show = mysql_query($sql))
{
$a = mysql_fetch_array($show);
if ($a['pass']!=$pass) {
error("Не верное сочетание логин - пароль");
}
else {
session_register("name","pass");
}
}
else {
error("Ошибка запроса к базе данных");
}
}
?>
Начнем пояснения с первой строки.
if (empty($pass)||empty($name))
проверяем задан ли пароль и логин. Если одно из полей пустое, то
error("Не указан логин или пароль");
Здесь error - это любая функция вывода ошибки:
<?
function error($er)
{
echo $er;
exit(0);
}
?>
Если поля не пусты, то скрипт продолжает работу.
$sql="select pass from mysite where login='".$name."'";
пишем запрос к базе mysql, который вернет нам значение поля pass, строки, где login=$name.
if ($show=mysql_query($sql))
если запрос обработан без ошибок, то
$a=mysql_fetch_array($show);
Присваиваем переменной $а (ассоциативный массив) значение поля pass
if ($a['pass']!=$pass)
error("Не верное сочетание логин - пароль");
Если поле pass не соответствует тому, что ввел пользователь или тому, что хранится в сессии, то мы опять через функцию error выводим ему ошибку.
else
session_register("name","pass");
Иначе записываем переменные $name и $pass в сессию и продолжаем выполнять скрипт.
}
else
error("Ошибка запроса к базе данных");
}
?>
Если есть ошибка в запросе к базе mysql, то мы опять же выводим ошибку пользователю.
Итак, вначале каждой страницы, к которой нужно запретить доступ посторонним пишем:
<?
session_start();
/* эта функция открывающая или продолжающая работу с сессиями. Она должна быть задана в самом начале страницы до отправки заголовка страницы. */
check(); //наша функция проверки.
?>
Теперь проверим логику скрипта. Если человек не заполняет одно из полей и нажимает кнопку "вход", то перейдя на страницу index2.php он получит надпись "Ошибка: Не указан логин или пароль".
Если он указывает неверный логин или пароль, то ему выпадает "Ошибка: Не верное сочетание логин - пароль".
Если же он все указывает верно, то попадет на страницу index2.php где вы храните свои тайны. За счет того, что логин и пароль записываются в сессию, юзер может бродить по вашему сверх тайному сайту авторизировавшись только один раз.
Возможные проблемы:
Нельзя заходить на сайт под разными именами.
Если человек раз зашел на сайт, то с его компьютера можно посещать этот сайт еще в течении некоторого времени (пока жива сессия), что не очень хорошо, если ты работаешь из Интернет салона.
Автор: неизвестен
если сессию закрыть то можно будет потом зайти под другим логином и паролем?
Да, можно.
Ну если вы хотите 100% безопасности, то создайте файл .htaccess, и напишите в нем следующее:
AuthType Basic
AuthName "auth"
AuthUserFile /www/site/.htpasswd
require valid-user
Потом создайте файл .htpasswd, и сгененируйте логин и пароль на http://www.htaccesstools.com/htpasswd-generator/
И все.
Потому-что это неудобно. Например http://vvsh.ru/admin/
это авторизация средствами самого сервера, и поэтому точно надежнее, ее минус - удобство, а второй минус это работа с добавлением изменением новых пользователей и паролей
т.к. для этого надо использовать инструменты сервера
ну и еще один минус, это то что кроме имени и пароля и папки больше нельзя указать уровень доступа
auth_admin.php
<?php
$login = "admin";//Логин
$pass = "";//md5 кеш Пароля
# Проверка вода логина и пароля
if(isset($_POST['login'])){$vlogin = $_POST['login'];}
if(isset($_POST['pass'])){$vpass = md5($_POST['pass']);} // Если ввели пароль, кодируем md5 для дальнейшего сравнения
//==================================================================
// Остальная часть кода будет проверять схожесть логина и запись в Cookie
//==================================================================
if($_GET['auth']=='exit'){ //Если пользователь выходит из панели
// ADMIn EXIT
setcookie("user","");
setcookie("pass","");
header("Location: admin.php");
exit();
}else if($_GET['auth']=='yes'){
if($vlogin==$login){
if($vpass==$pass){
setcookie("user","$login",time()+ "9100");
setcookie("pass","$pass",time()+ "9100");
$_SESSION['admin'] = true;
}
}
header("Location: admin.php");
exit();
}else{
if($_COOKIE['user']=="$login" && $_COOKIE['pass']=="$pass"){
setcookie("user","$login",time()+ "9100");
setcookie("pass","$pass",time()+ "9100");
$_SESSION['admin'] = true;
}
}
?>
admin.php
<?php
include 'engine/auth_admin.php';
?>
<?if($_SESSION['admin']){?>
Вы успешно авторизовались!!
<? }else{ ?>
Вход в админпанель.
<FORM ACTION="admin.php?auth=yes" METHOD=POST>
LOGIN:<INPUT TYPE=TEXT NAME=login><br>
PASSWORD:<INPUT type="password" name="pass" SIZE=20>
<INPUT type=submit>
</FORM>
<? } ?>
Даже если ты узнаешь md5 кеш Пароля то войти все равно не сможешь :1124:
Кстати зачем копировать скрипты с других сайтов, а самому слабо написать?
#5 скажите пожалуйста, вот я не понимаю, как сессия будет читаться в начале других страниц если нё там указать просто как фунцию
<?
session_start();
/* эта функция открывающая или продолжающая работу с сессиями. Она должна быть задана в самом начале страницы до отправки заголовка страницы. */
check(); //наша функция проверки.
?>
Другое дело если инклюдом, или типа в хэше данные храняться?:)
Добрый день!
Тема еще жива? ;)
Ситуация такая:
Пытаюсь реализовать авторизацию на своем сайте, используя код, предложенный Webmaster'ом в посте #4. С md5-хешем и экранированием спец-символов у меня этот код работать не захотел (пока?), так что от использования md5 и mysql_escape_string я временно отказался. В итоге login.php выглядит вот так:
В итоге после ввода верной пары логин-пароль происходит редирект на news.html (это форма добавления новостей на сайт с внесением их в БД, должна быть доступна только администратору). НО! Если просто вбить в адресной строке %sitename%/news.html, то опять же попадаем на эту страницу, хотя логин и пароль не вводились.
<?
session_start();
header("Content-Type: text/html; charset=cp1251");
function show_form($message)
?>
<?=$message?><br/>
<form method="post" name='form' id='form' action='login.php'>
<B>Имя:</B>
<input type='text' name='user' />
<br />
<B>Пароль:</B>
<input type='password' name='pass' />
<input type='submit' value="Вход" name='subm'/>
</form>
<?
die();
}
//Проверка нажатия кнопки submit
if(!isset($_POST['subm'])) show_form('');
//Проверка на введенные данные
if(!isset($_POST['user']) OR !isset($_POST['pass']) OR empty($_POST['user']) OR empty($_POST['pass']))
show_form("Не правильная пара логин-пароль.");
// подключение к БД - соответственно прописываем свои данные доступа к базе данных
$connection = mysql_connect("localhost","root","") ;
mysql_select_db('mysite') ;
// НЕ смог достучаться до БД
if (mysql_error()) die();
$user = $_POST['user'];
$pass = $_POST['pass'];
// Проверяем есть ли пользователь с таким логином и паролем
$result = mysql_query("SELECT `id` FROM `checker` WHERE `name`='".$user."' AND `pass`='".$pass."'");
// если есть - впускаем
if(mysql_num_rows($result)==1)
$_SESSION['admin']=$adm;
// Если нет - пишем так.
else
show_form("Incorrect login-password.");
// Далее сообщение которое увидит вошедший пользователь
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" >
<meta http-equiv="refresh" content="3; url=news.html" >
Здравствуйте <?=mysql_escape_string($user);?>!
Вопрос: что не так (если не так) в коде, и какой код надо добавить на news.html для того, чтобы зайти на них можно было только после аутентификации?
PS: Извиняюсь за возможную несвязность, надеюсь все понятно))
1) что такое $adm - эта переменная нигде не инициализируется, может лучше написать
// если есть - впускаем2) сделайте не news.html, а news.php, в самом начале которого вставьте (такое нужно вставить в начало каждой защищенной страницы)
if(mysql_num_rows($result)==1)
$_SESSION['admin']=$user;
<?3) при логауте не забудьте сделать
session_start();
if( !isset($_SESSION['admin']) ) die('Access dinied!');
?>
unset($_SESSION['admin'])
на всех страницах которые подлежат авторизации
вы должны добавить код проверяющий
есть ли в переменной
$_SESSION['admin'] какое либо значение
для этого в самом начале файло надо написать
<?
session_start();
if (!isset($_SESSION['admin']) || $_SESSION['admin']) exit();
?>
to Apay, Webmaster
Спасибо, разобрался, все работает! :)
upd:
Только с разлогиниванием непонятно. Пишу:
И никакого эффекта. Условие в if задано неверно? Или какая-то другая ошибка?
<table>
<tr>
<td align="center">
<input type="submit" name="submit_edited" class="buttons" value="Выйти" />
</td>
</tr>
</table>
<?
if(@$submit_edited) {
unset($_SESSION['admin']);
echo "Log out!";
}
?>
<form method="post">
<input type="submit" name="submit_edited" class="buttons" value="Выйти" />
</form>
<?
if(isset($_POST['submit_edited']) {
unset($_SESSION['admin']);
echo "Log out!";
}
?>
Apay
Не помогло :(
В твоем коде я добавил ")" в if, иначе был sintaxys error. Я поставил проверку нажатия кнопки следующим образом:
<table>
<tr>
<td align="center"><input type="submit" name="exit" class="buttons" value="Выйти" /></td>
</tr>
</table>
<?
if (isset($_POST['exit'])) {
//unset($_SESSION['admin']);
echo ("<meta http-equiv=\"refresh\" content=\"0; url=index.html\" >"); }
?>
Т.е. при нажатии на кнопку должен происходить редирект на главную. Нажимаю - не работает. Хотя если в if выставить отрицание
<?
if (!isset($_POST['exit'])) {
//unset($_SESSION['admin']);
echo ("<meta http-equiv=\"refresh\" content=\"0; url=index.html\" >"); }
?>
, то редирект осуществляется моментально при загрузке страницы.
В чем может быть причина?
На всякий случай привожу весь код страницы:
<?
session_start();
if( !isset($_SESSION['admin']) ) die('Access dinied!');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Добавление новостей</title>
<style type="text/css">
<!--
body { font: 12px Georgia; color: #666666; }
h3 { font-size: 16px; text-align: center; }
table { width: 400px; border-collapse: collapse; margin: 0px auto; background: #E6E6E6; }
td { padding: 3px; }
input { width: 250px; border: solid 1px #CCCCCC; }
textarea { width: 250px; height: 100px; border: solid 1px #CCCCCC; }
.buttons { width: auto; border: double 1px #666666; background: #D6D6D6; }
-->
</style>
</head>
<body>
<h3>Добавление новостей</h3>
<form action="save_form.php" method="post" name="test_form">
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2" align="center"><strong>Добавить новость</strong></td>
</tr>
<tr>
<td width="150">Аннотация :</td>
<td><textarea name="test_theme"></textarea></td>
</tr>
<tr>
<td width="150">Сообщение :</td>
<td><textarea name="test_mess"></textarea></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" class="buttons" value="Добавить новость" />
<input type="reset" class="buttons" value="Очистить" />
</td>
</tr>
</table>
</form>
<br />
<form action="view_data.php" method="post" name="view_result">
<table>
<tr>
<td align="center"><input type="submit" class="buttons" value="Посмотреть все новости" /></td>
</tr>
</table>
</form>
<form action="del_data.php" method="post" name="delete_data">
<table>
<tr>
<td align="center"><input type="submit" class="buttons" value="Удаление данных" /></td>
</tr>
</table>
</form>
<form action="update_data.php" method="post" name="update_data">
<table>
<tr>
<td align="center"><input type="submit" class="buttons" value="Редактирование и обновление данных" /></td>
</tr>
</table>
</form>
<form action="mailing.php" method="post" name="mailing">
<table>
<tr>
<td align="center"><input type="submit" class="buttons" value="Выслать рассылку" /></td>
</tr>
</table>
</form>
<table>
<tr>
<td align="center"><input type="submit" name="exit" class="buttons" value="Выйти" /></td>
</tr>
</table>
<?
if (isset($_POST['exit'])) {
//unset($_SESSION['admin']);
echo ("<meta http-equiv=\"refresh\" content=\"0; url=index.html\" >"); }
?>
</body>
</html>
да, очеятался, скобку упустил.
один вопрс, я писал
<form method="post">где форма???
<input type="submit" name="submit_edited" class="buttons" value="Выйти" />
</form>
Спаасибо, запарился - не заметил) Все работает! :)
Доброго времени суток!
Помогите пожалуста!!!!Распишите все по порядку от начала и до конца
как можно выложить сайт на хост так чтобы на нем регестрация была ?
я и базы в denwere делал и скрипты качал только не понял как мой сайт с этими базами связать :1128::1128:
шаг 1) делаете все у себя на компе (денвер есть)
шаг 2) копируете все скрипты на хостинг
шаг 3) подправляете значения $server, $username, $password, $database_name в соответствии с тем что вам дали хостеры
подсоедениться к базе:
mysql_connect( $server, $username, $password );
mysql_select_db ( $database_name );
Apay,
спасибо
получилось:0051:
A без php как сделать пароль на страницу? Например если все будет не в web'е, а на винчестере, и нет никаких денверов и других php серверов.
Хочу сделать рассылку по почте, чтоб открывалось браузером, но в компьютере, и для разных людей разные пароли а не на сайте, но не у всех есть php на компьтерах.
Только чтоб в исходнике не отображался сам пароль иначе смысла в этом нет.
Надеюсь объяснил понятно.
Единственным вариантом стало скомпилировать файл в exe, и отправлять таким образом клиентам непосредственно. Тогда расшифровать даже знающему человеку стало значительно труднее.
nonofrost, запоролить без php можно директорию
подсказка
.htaccess и .htpasswd
может еще кто-то знает как сделать платную регистрацию?:0082:
и еще знающие можете выложить javascript регистрации для html.:0018:
определяетесь со способом приёма платежа
регистрируетесь в платёжных системах
скачиваете документацию на использование их интерфейсов платежей
например на php или asp пишете скрипт регистрации
активацию учётной записи делаете платной
врятли получится регистрация чисто на JS + HTML
Помогите, ГУРУ! Делаю сайт для себя (html, css, php, js) с чатом (чат закрытый). Система такова, что на сайте должны быть страницы для (не автоматической) регистрации посетителя (имя, фамилия, emal, пароль-обязательные поля) и восстановления пароля, а другая страница с активацией emal и пароля. Очень прошу, помогите! Очень надо работающий php скрипт и подробная инструкция по установке. Что бы при регистрации все данные шли админу на подтверждение и был виден ip регистрируемого, а при активации пароля был переход на чат. Я убила 9 дней для поиска подходящего скрипта (сама не профи, поэтому написать его не могу), голова кругом, но ничего походящего не нашла. Одна надежда на вас. Помогите, плииииз!
Ау! Люди! Хоть что-нибудь ответьте. Или форум умер?
Запрос в БД
Форма регистрации
[COLOR=#3366ff]CREATE TABLE `users` (
`id` INT( 6 ) NOT NULL AUTO_INCREMENT ,
`nick` VARCHAR( 30 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL,
`email` VARCHAR( 50 ) NOT NULL ,
`icq` VARCHAR( 10 ) NOT NULL ,
`avatar` VARCHAR( 50 ) NOT NULL ,
`description` TEXT NOT NULL ,
`town` VARCHAR( 20 ) NOT NULL ,
`site` VARCHAR( 50 ) NOT NULL ,
`uniq_id` VARCHAR( 50 ) NOT NULL ,
`status` INT( 1 ) NOT NULL ,
`last_date` INT( 8 ) NOT NULL ,
`date` INT( 8 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM[/COLOR]
Наверняка каждый из вас не раз проходил регистрацию и знает как неохота заполнять большое количество полей. Я предлагаю пойти на встречу пользователям и использовать только те данные, которые необходимы для осуществления регистрации: Ник пользователя, адрес электронной почты и пароль. Все остальное (если профиль будет расширенным) мы сможем изменить в личном кабинете.
registration.php
По умолчанию форма регистрации состоит из нескольких полей и изображения кода потверждения. Скрипт простой капчи мы рассматривали недавно, это был урок по отправке почты. Я целиком продублирую фрагмент кода, отвечающего за построение капчи и буду использовать в этом примере.
Стандартно начинаем наш скрипт с подключения необходимых функций и конфигов, а также старта сессии.
<?php
session_start();
@include("config.inc.php");
@include("functions.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
В этом фрагменте используем стандартное условие, которое определяет была ли нажата кнопка. Внутри проверяем наличие сессии с именем $_SESSION['uid'] . Если его не существует, генерируем значение функцией mt_rand() в диапазоне от 100000 до 999999. Далее отображаем форму ввода данных и картинку с кодом подтверждения.
if(!$_POST['do'] OR $_POST['do'] =='') {
//Генерируем шестизначный ключ для капчи
if($_SESSION['uid'] =='') { $_SESSION['uid'] = mt_rand(100000,999999); }
//Выводим форму
echo '<html><head><title>Регистрация</title></head><body>';
echo'<form action="" method="POST">';
echo 'Желаемый ник: <input name="nick" type="text" value=""><br/>';
echo 'Пароль: <input name="pass" type="password" value=""><br/>';
echo 'Ещё раз пароль: <input name="rpass" type="password" value=""><br/>';
echo 'Эл.адрес <input name="mail" type="text" value=""><br/>';
echo '<img src="img/capcha.php?sid='.$_SESSION['uid'].'"/> <br/><input name="sid" type="text" value=""><br/><br/>';
echo '<input name="do" type="submit" value="зарегистрировать">';
echo '</form></body></html>';
}
//Если данные отправленыЭто наш главный блок, который производит проверку введенных данных. Помимо проверки электронного адреса на валидность и кода подтверждения, создается запрос , проверяющий наличие ник-нейма в базе. В случае совпадения выводим сообщение о том, что юзер с таким именем существует.Здесь я немного сократил запрос, а точнее записал в компактной форме, т.е.:
if($_POST['do'] !='') {
//Начинаем проверять входящие данные
if($_POST['sid'] == $_SESSION['uid']) {
//Создаем запрос к базе для проверки существования Пользователя
$nick = $_POST['nick'];
@mysql_query("SELECT * FROM users WHERE nick='".strtolower($nick)."'");
//Проверка результата запроса
if(mysql_affected_rows()==0) {
//Проверка ввведенных паролей
if($_POST['pass'] !='' AND $_POST['rpass'] !='' AND $_POST['pass'] === $_POST['rpass']){
//Проверяем на валидность электронный адрес
if(checkmail($_POST['mail']) !== -1) {
//Осуществляем регистарацию
//Генерируем uniq_id
$uniq_id = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].mktime());
$pass = $_POST['pass'];
$email = $_POST['mail'];
//Создаем запрос для записи данных в БД
$r = @mysql_query("INSERT INTO users VALUES(NULL,'".strtolower($nick)."','".md5($pass)."','".$email."','".$uniq_id."',0,'".date("dmY")."','".date("dmY")."')");
//После запроса отправляем письмо юзеру, для активации аккаунта
if($r) {
// Для отправки e-mail в виде HTML устанавливаем необходимый mime-тип и кодировку
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
// Откуда пришло
$headers .= 'From:Сайт %sitename%' . "\r\n";
//Здесь укажите электронный адрес, куда будут уходить сообщения
$mailto = $email;
$subject = "Подтверждение регистарции на сайте";
$message = 'Для активации аккаунта пройдите по следующей ссылке <a href="http://АДРЕС_САЙТА/registration.php?
activation='.$uniq_id.'" target="_blank">http://АДРЕС_САЙТА/registration.php?activation='.$uniq_id.'</a>';
$message .= 'или скопируйте ссылку в окно ввода адреса браузера и нажмите enter.';
//Отправляем сообщение
if(sendmail($mailto,$subject,$message,$headers) !== FALSE) {
echo 'Регистрация завершена, на введеный Вами e-mail было отправлено сообщение для активации аккаунта';
}
else {echo 'Регистрация невозможна: Повторите запрос позднее';}
}
else {echo 'Регистрация невозможна: Повторите запрос позднее';}
}
else {echo 'Регистрация невозможна: Электронный адрес должен соответствовать шаблону <b>[email protected]</b><br/><a
href="registration.php"/>назад</a>';}
}
else {echo 'Регистрация невозможна: Введенные пароли не совпадают<br/><a href="registration.php"/>назад</a>';}
}
else { echo 'Регистрация невозможна: Пользователь с таким именем уже существует<br/><a href="registration.php"/>назад</a>';}
session_destroy();
}
else { echo 'Регистрация невозможна: код подтверждения введен не верно<br/><a href="registration.php"/>назад</a>';}
}
@mysql_query(»SELECT nick FROM users WHERE nick=’».$nick.»‘»);
ЗАПРОС(»ВЫБРАТЬ nick ИЗ users ГДЕ nick = $nick»);
После выполнения запроса функцией mysql_affected_rows() узнаем количество затронутых рядов. Если в таблице уже есть юзер с таким ником, то мы просто выводим соответсвующее сообщение. Если же совпадения не найдены, переходим к проверке паролей. Ни одно заполняемое поле не должно быть пустым, особенно пароли.
Далее проверяем электронный адрес на валидность. Если условие возвращает TRUE, то переходим непосредственно к регистрации пользователя.
Так как мы используем регистрацию с активацией профиля, нам необходимо сгенерировать уникальный идентификатор пользователя. Он будет состоять из его IP-адреса, типа браузера и значения возвращаемые функцией mk_time(). Склеяв данные в одну строку мы закодируем её функцией md5().
Создаем запрос для записи значений в БД.
Единственное стоит обратить на то какие данные вносятся в БД. Здесь status обязательно равен 0. Далее создаем условие, котрое проверяет результат этого запроса. Если запрос был обработан, необходимо составить сообщение и отправить на введенный электронный адрес ссылку с активацией.
Сообщение компонуем из $subject – темы письма, $message – самого сообщения и заголовков $headers.
$message содержит ссылку, которая ведет на registration.php и передает GET-параметром уникальный идентификатор сгенерированный выше. Что произойдет когда пользователь перейдет по ссылке мы рассмотрим ниже.
Хочу обратить внимание на то что при отправке письма мы не передавали не имя пользователя , ни пароля. Это дополнительная безопасность, которая исключит похищение данных от аккаунта в случае взлома почты или других непредвиденных ситуаций. Поэтому мы будем полностью опираться на уникальный идентификатор пользователя.
//Модуль отвечающий за активацию аккаунта
if($_GET['activation'] AND $_GET['activation']!='') {
$uniq_id = $_GET['activation'];
//Создаем запрос
$r=@mysql_query("UPDATE users SET status=1 WHERE uniq_id='".$uniq_id."' AND status=0");
if($r) {echo '<h2>Ваша учетная запись активирована.</h2><br/> Теперь вы можете <a href="index.php">войти на сайт</a> используя данные
указанные при регистрации';}
else {echo 'Активация невозможна: профиль уже активирован';}
}
?>
Создавая запрос мы устанавливаем status равный единице, пользователю у которого соответствующий uniq_id и статус равный нулю. Если запрос был выполнен, выводим сообщение об успешной активации. Теперь юзер может использовать свои данные для авторизации
Авторизация пользователя.
Так как многие от авторизации преследует одну цель, то мы разберем вариант, когда не авторизованный пользователь не имеет доступа к странице.
Сам принцип авторизации достаточно простой и применим к небольшим проектам. Главная особенность – это работа с сессиями, проверка их существования и сверка с данными из БД.
По умолчанию я буду использовать страницу index.php, на которой будет что-либо скрыто.
index.php
Вначале инициализируем сессию, подключаем файл конфигурации и подключаемся к БД MySQL.
<?php
session_start();
//Поключаем конфиг
include("config.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
//Если нет сессийЭтот фрагмент содержит условие, которое особым принципом сверяет сессии содержащие имя пользователя $_SESSION['user'] и пароль $_SESSION['password'] с идентификатором сессии $_SESSION['SID']. Если они не равны переходим к стандартному условию, проверющее действие пользователя, а точнее отправку данных. Если кнопка не была нажата – отображаем форму ввода логина и пароля.
if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID']) {
//Если кнопка не нажата, отображаем форму
if(!$_POST['do']){
echo '<form name="1" action="" method="post">
<input name="login" type="text" value=""> <br/>
<input name="password" type="password" value=""> <br/>
<input name="do" type="submit" value="Войти">
</form>';
}
//Если кнопка нажатаКак видите следующий фрагмент производит проверку введенных данных. Далее мы создаем запрос, в котором выбираем все значения где nick= $login и password=$upass и статус РАВНЫЙ 1. Если функция mysql_num_rows вернула значение равное еденице, то это означает что пользователь с такой связкой логин+пароль существует, поэтому мы задаем имя сессий и присваиваем им соответсвующие значения.Далее при помощи функции crypt() задаем $_SESSION['SID']. После этого, уже с ЗАДАННЫМИ сессиями делаем редирект на главную страницу при помощи функции header().
if($_POST['do']) {
//Проверяем данные
$login = $_POST['login'];
$upass = $_POST['password'];
if($login !='' AND $upass !='') {
//Создаем запрос
$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");
//Проверяем существует ли хоть одна запись
if(mysql_num_rows($q1)===1) {
//Если есть, то создаем сессии и перенаправляем на эту страницу
$r=mysql_fetch_array($q1);
$_SESSION['user'] = $r['nick'];
$_SESSION['password'] = $r['password'];
$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));
@Header("Location: index.php");
}
else {echo 'Неверный логин/пароль; Возможно Ваш аккаунт не активирован';}
}
}
else {echo 'Введите данные';}
}
else {Этот фрагмент кода срабатывает после редиректа, когда
$q2 = @mysql_query("SELECT * FROM users WHERE nick='".$_SESSION['user']."' AND password='".$_SESSION['password']."' AND status=1");
if(@mysql_num_rows($q2)==1){
$r2 = @mysql_fetch_array($q2);
echo 'Вы: '.ucfirst($r2['nick']).'<br/>';
echo '<a href="index.php">главная</a> ';
echo '<a href="index.php?page=downloads">загрузки</a><br/>';
if($_GET['page'] !='') {
@include("tpl/".$_GET['page'].".php");
}
else { @include("tpl/default.php");}
echo '<br/><br/><a href="index.php?exit=1">выход</a>';
}
}
md5(crypt($_SESSION['user'],$_SESSION['password'])) == $_SESSION['SID'].
Вначале обязательно проверяем данные переданные в сессиях с данными в базе. Если пользователь произвел активацию, то выводим данные о нем и далее любой произвольный код. Пусть для примера в этом фрагменте будут инклудироваться шаблоны. Чтобы это сделать, создаем условие проверяющее $_GET['page']. Например можно создать ссылку index.php?page=downloads, нажав на которую мы получим в $_GET['page'] значение downloads, следовательно подгружаем шаблон из папки tpl с именем downloads.php
Только в таком варианте строго запрещается инклудировать GET данные напрямую. Создайте дополнительную проверку $_GET['page'].
Если вы заметили, то в предыдущем фрагменте есть ссылочка index.php?exit=1. Если $_GET['exit'] существует, то мы уничтожаем сессию , стираем $_GET['exit'], закрываем соеденение с БД и делаем редирект на главную. Это позволит качественно «отлогиниться».
if($_GET['exit']) {@session_destroy(); unset($_GET['exit']); mysql_close($link); @Header("Location: index.php");}
?>
Шаблоны.
Файлы шаблонов будут лежать в папке tpl на сервере, поэтому не забудьте её создать и поместить в неё шаблон, который грузиться по умолчанию.
default.php
Файл конфигурации.
<?php
echo 'Этот текст будет отображаться по умолчанию.
В шаблоне можно использовать любой код. Все шаблоны должны иметь расширение php';
?>
Файл конфигурации содержит в себе необходимые данные для подключения к БД.
config.inc.php
Файл функций
<?php
//Сервер, в большинстве случаев менять не требуется
$DBSERVER = "localhost";
//Пользователь и пароль
$DBUSER = "root";
$DBPASS = "12345678";//Ваш пароль
//База данных
$DB = "test";
?>
Файл содержит 2 функции. Первая для проверки e-mail’а на корректность, а вторая для отправки почты.
functions.inc.php
Если ты гуру то ты сам переделаешь или поймёшь что и как .
<?php
function checkmail($mail) {
// режем левые символы и крайние пробелы
$mail=trim($mail); // функцию pregtrim() возьмите выше в примере
// если пусто - выход
if (strlen($mail)==0) return -1;
if (!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,5}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail))
return -1;
return $mail;
}
function sendmail($mail,$subject,$message,$headers) {
if(mail($mail,$subject,$message,$headers)) { return TRUE;}
else {return FALSE;}
}
?>
СПАСИБО!!! Это я к вам обращалась ГУРУ. Я сама в рядах осликов. ОГРОМНЕЙШОЕ СПАСИБО!!! Буду пробовать!!!
Webmaster, Здравствуйте! Хочу создать базу данных в mysql, кот будет содержать имя и пароль клиентов. как осуществить связь с сайтом. Заранее благодарен!
У меня задача такая: просто осуществить зарегистрированному пользователю доступ к сайту. Я думаю в базе должны быть четыре поля счечик, логин, пароль и реальное имя пользователя.
Подскажите каким методом и где-какой код должен находится., ато я ниче понять не могу
где должна находится сама база данных, вообще иерархию файлов как что и где(если можно).
С уважением, Чайник))
база должна находиться на сервере mySQL (Microsoft SQL, Oracle или каком Вам нравиться). Сервер должен быть либо дан хостером, либо ищите внешний, но заметьте, при внешнем скорость работы будет ниже. При входе на сайт пользователю надо вывести форму для ввода логина и пароля и ссылку для регистрации. После ввода логина и пароля надо обработчиком формы (путь к которому находиться в атрибуте action выведенной формы) проверить есть-ли в базе данных пользоватеть с таким логином и паролем, если есть записать в сессию его реальное имя, если Вы его потом собираетесь где-то вывести на сайте, записать переменную logged = true, которая будет означать, что пользователь вошел, и id этого пользователя из базы данных. при открытии сайта проверять, есть ли в сесии пользователя все эти данные, если нет - форма для входа, если есть - добро пожаловать на сайт.