[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать перенаправление после авторизации
Helps
Нужна помощь, как сделать перенаправление на страничку(анкету) после авторизации пользователя.Кто поможет в этом деле вознаграждение обязательно будет.
Вот собственно и пример :
index.php
Цитата

  • <meta http-equiv="content-type" content="text/html"; charset="windows-1251" />
  • <meta name="keywords" content="" />
  • <meta name="description"
  • content="" />
  • <?php
  • // вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
  • session_start();

  • include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь

  • if (isset($_COOKIE['auto']) and isset($_COOKIE['login']) and isset($_COOKIE['password']))
  • {//если есть необходимые переменные
  • if ($_COOKIE['auto'] == 'yes') { // если пользователь желает входить автоматически, то запускаем сессии
  •     $_SESSION['password']=(md5($_COOKIE['password'])); //в куках пароль был не зашифрованный, а в сессиях обычно храним зашифрованный
  •     $_SESSION['login']=$_COOKIE['login'];//сессия с логином
  •     $_SESSION['id']=$_COOKIE['id'];//идентификатор пользователя
  •   }
  • }


  • if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
  • {
  • //если существет логин и пароль в сессиях, то проверяем их и извлекаем аватар
  • $login = $_SESSION['login'];
  • $password = $_SESSION['password'];
  • $result = mysql_query("SELECT id,avatar FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db);
  • $myrow = mysql_fetch_array($result);
  • //извлекаем нужные данные о пользователе
  • }
  • ?>
  • <html>
  • <head>
  • <title>Главная страница</title>
  • </head>
  • <body>
  • <h2>Главная страница</h2>


  • <?php
  • if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
  • //проверяем, не извлечены ли данные пользователя из базы. Если нет, то он не вошел, либо пароль в сессии неверный. Выводим окно для входа. Но мы не будем его выводить для вошедших, им оно уже не нужно.
  • print <<<HERE
  • <form action="testreg.php" method="post">
  • <!-- testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post"  -->
  •   <p>
  •     <label>Ваш логин:<br></label>
  •     <input name="login" type="text" size="15" maxlength="15"
  • HERE;


  • if (isset($_COOKIE['login'])) //есть ли переменная с логином в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
  • {
  • //если да, то вставляем в форму ее значение. При этом пользователю отображается, что его логин уже вписан в нужную графу
  • echo ' value="'.$_COOKIE['login'].'">';
  • }


  • print <<<HERE
  •   </p>
  • <!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин --> 
  •   <p>
  •     <label>Ваш пароль:<br></label>
  •     <input name="password" type="password" size="15" maxlength="15"
  • HERE;


  • if (isset($_COOKIE['password']))//есть ли переменная с паролем в в COOKIE. Должна быть, если пользователь при предыдущем входе нажал на чекбокс "Запомнить меня"
  • {
  • //если да, то вставляем в форму ее значение. При этом пользователю отображается, что его пароль уже вписан в нужную графу
  • echo ' value="'.$_COOKIE['password'].'">';
  • }

  • print <<<HERE
  •   </p>
  • <!-- В поле для паролей (name="password" type="password") пользователь вводит свой пароль --> 
  •   <p>
  •     <input name="save" type="checkbox" value='1'> Запомнить меня.
  •   </p>
  •   <p>
  •     <input name="autovhod" type="checkbox" value='1'> Автоматический вход.
  •   </p>

  • <p>
  • <input type="submit" name="submit" value="Войти">
  • <!-- Кнопочка (type="submit") отправляет данные на страничку testreg.php  -->
  • <br>
  • <!-- ссылка на регистрацию, ведь как-то же должны гости туда попадать  -->
  • <a href="reg.php">Зарегистрироваться</a>

  • <br>
  • <!-- ссылка на восстановление пароля  -->
  • <a href="send_pass.php">Забыли пароль?</a>

  • </p></form>
  • <br>
  • Вы вошли на сайт, как гость<br><a href='#'>Эта ссылка доступна только зарегистрированным пользователям</a>
  • HERE;
  • }

  • else
  • {
  • //при удачном входе пользователю выдается все, что расположено ниже между звездочками.
  • //************************************************************************************


  • print <<<HERE
  • |<a href='page.php?id=$_SESSION[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>

  • <!-- Между оператором  "print <<<HERE" выводится html код с нужными переменными из php -->
  • Вы вошли на сайт, как $_SESSION[login]<br>
  • <!-- выше ссылка на выход из аккаунта -->

  • <a href='http://tvpavlovsk.sk6.ru/'>Эта ссылка доступна только зарегистрированным пользователям</a><br>
  • Ваш аватар:<br>
  • <img alt='$_SESSION[login]' src='$myrow[avatar]'>
  • <!-- Выше отображается аватар. Его адрес содержит переменная $myrow[avatar] -->

  • <!-- Именно здесь можно добавлять формы для отправки комментариев и прочего... -->

  • HERE;


  • //************************************************************************************
  • //при удачном входе пользователю выдается все, что расположено ВЫШЕ между звездочками.
  • }

  • ?>
  • </body>
  • </html>

regtest.php
Цитата
<meta http-equiv="content-type" content="text/html"; charset="windows-1251" />

<?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 ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
    }
    //если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
$password = stripslashes($password);
    $password = htmlspecialchars($password);
//удаляем лишние пробелы
          $login = trim($login);
          $password = trim($password);         
         
// заменяем новым********************************************
            // подключаемся к базе
            include ("bd.php");// файл bd.php должен быть в той    же папке, что и все остальные, если это не так, то просто измените путь         
// минипроверка на подбор паролей

            $ip=getenv("HTTP_X_FORWARDED_FOR");
            if (empty($ip) || $ip=='unknown') {    $ip=getenv("REMOTE_ADDR"); }//извлекаем ip         
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() -    UNIX_TIMESTAMP(date) > 900");//удаляем ip-адреса ошибавшихся при входе пользователей через 15 минут.         
$result = mysql_query("SELECT col FROM oshibka WHERE    ip='$ip'",$db);// извлекаем из базы количество неудачных попыток входа за    последние 15 у пользователя с данным ip
            $myrow = mysql_fetch_array($result);

if ($myrow['col'] > 2) {
            //если ошибок больше двух, т.е три, то выдаем сообщение.
            exit("Вы набрали логин или пароль неверно 3 раз. Подождите    15 минут до следующей попытки.");
            } 
  $password    =($password);//шифруем пароль
            $password    =($password);// для надежности добавим реверс
            $password    =($password);

            //можно добавить несколько своих символов по вкусу, например,    вписав "b3p6f". Если этот пароль будут взламывать методом подбора у    себя на сервере этой же md5,то явно ничего хорошего не    выйдет. Но советую ставить другие символы, можно в начале строки или в    середине.         
//При этом необходимо увеличить длину поля password в базе. Зашифрованный пароль может получится гораздо большего    размера.         


$result = mysql_query("SELECT * FROM users WHERE login='$login' AND password='$password' AND activation='1'",$db); //извлекаем из базы все данные о пользователе с введенным логином
//мы дописали «AND activation='1'», то есть пользователь будет искаться только среди активированных. Желательно добавить это условие к другим подобным проверкам данных пользователя
            $myrow    = mysql_fetch_array($result);
            if (empty($myrow['id']))
            {
            //если пользователя с введенным логином и паролем не    существует
            //Делаем запись о том, что данный ip не смог войти.         
$select = mysql_query ("SELECT ip FROM oshibka WHERE    ip='$ip'");
            $tmp = mysql_fetch_row ($select);
            if ($ip == $tmp[0]) {//проверяем, есть ли пользователь в таблице "oshibka"
            $result52 = mysql_query("SELECT col FROM oshibka WHERE    ip='$ip'",$db);
            $myrow52 = mysql_fetch_array($result52);
           
$col = $myrow52[0] + 1;//прибавляем    еще одну попытку неудачного входа
            mysql_query ("UPDATE oshibka SET col=$col,date=NOW() WHERE    ip='$ip'");
            }         
else {
            mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES    ('$ip',NOW(),'1')");
            //если за последние 15 минут ошибок не было, то вставляем    новую запись в таблицу "oshibka"
            }         
         
exit ("Извините, введённый    вами логин или пароль неверный.");
            }
            else {         
nbsp;        //если пароли    совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
                      $_SESSION['password']=$myrow['password'];
                                $_SESSION['login']=$myrow['login'];

                      $_SESSION['id']=$myrow['id'];//эти    данные очень часто используются, вот их и будет "носить с собой"    вошедший пользователь
                               
            //Далее мы запоминаем данные в куки, для последующего входа.
            //ВНИМАНИЕ!!! ДЕЛАЙТЕ ЭТО НА ВАШЕ УСМОТРЕНИЕ, ТАК КАК ДАННЫЕ ХРАНЯТСЯ    В КУКАХ БЕЗ ШИФРОВКИ

          if (isset($_POST['save'])){
//Если пользователь хочет, чтобы его данные сохранились для последующего входа, то сохраняем в куках его браузера
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow['id'], time()+9999999);
}

if (isset($_POST['autovhod'])){
//Если пользователь хочет входить на сайт автоматически
setcookie("auto", "yes", time()+9999999);
setcookie("login", $_POST["login"], time()+9999999);
setcookie("password", $_POST["password"], time()+9999999);
setcookie("id", $myrow['id'], time()+9999999);}
}
            echo "<html><head><meta    http-equiv='Refresh' content='0;    URL=index.php'></head></html>";//перенаправляем пользователя на главную страничку, там    ему и сообщим об удачном входе         
?>

и фаил page.php
Цитата
<meta http-equiv="content-type" content="text/html"; charset="windows-1251" />
<?php

include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь
if (isset($_GET['id'])) {$id =$_GET['id']; } //id "хозяина" странички
else
{ exit("Вы зашил на страницу без параметра!");} //если не указали id, то выдаем ошибку
if (!preg_match("|^[\d]+$|", $id)) {
exit("<p>Неверный формат запроса! Проверьте URL</p>");//если id не число, то выдаем ошибку
}

if (!empty($_SESSION['login']) and !empty($_SESSION['password']))
{
//если существует логин и пароль в сессиях, то проверяем, действительны ли они
$login = $_SESSION['login'];
$password = $_SESSION['password'];
$result2 = mysql_query("SELECT id FROM users WHERE login='$login' AND password='$password'",$db);
$myrow2 = mysql_fetch_array($result2);
if (empty($myrow2['id']))
  {
  //Если не действительны (может мы удалили этого пользователя из базы за плохое поведение)
    exit("Вход на эту страницу разрешен только зарегистрированным пользователям!");
  }
}
else {
//Проверяем, зарегистрирован ли вошедший
exit("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }
$result = mysql_query("SELECT * FROM users WHERE id='$id'",$db);
$myrow = mysql_fetch_array($result);//Извлекаем все данные пользователя с данным id

if (empty($myrow['login'])) { exit("Пользователя не существует! Возможно он был удален.");} //если такого не существует

?>
<html>
<head>
<title><?php echo $myrow['login']; ?></title>
</head>
<body>
<h2>Пользователь "<?php echo $myrow['login']; ?>"</h2>


<?php
print <<<HERE
|<a href='page.php?id=$myrow2[id]'>Моя страница</a>|<a href='index.php'>Главная страница</a>|<a href='all_users.php'>Список пользователей</a>|<a href='exit.php'>Выход</a><br><br>
HERE;
//выше вывели меню

if ($myrow['login'] == $login) {
//Если страничка принадлежит вошедшему, то предлагаем изменить данные и выводим личные сообщения

print <<<HERE

<form action='update_user.php' method='post'>
Ваш логин <strong>$myrow[login]</strong>. Изменить логин:<br>
<input name='login' type='text'>
<input type='submit' name='submit' value='изменить'>
</form>
<br>

<form action='update_user.php' method='post'>
Изменить пароль:<br>
<input name='password' type='password'>
<input type='submit' name='submit' value='изменить'>
</form>
<br>

<form action='update_user.php' method='post' enctype='multipart/form-data'>
Ваш аватар:<br>
<img alt='аватар' src='$myrow[avatar]'><br>
Изображение должно быть формата jpg, gif или png. Изменить аватар:<br>
<input type="FILE" name="fupload">
<input type='submit' name='submit' value='изменить'>
</form>
<br>

<h2>Личные сообщения:</h2>

HERE;

$tmp = mysql_query("SELECT * FROM messages WHERE poluchatel='$login' ORDER BY id DESC",$db);
$messages = mysql_fetch_array($tmp);//извлекаем сообщения пользователя, сортируем по идентификатору в обратном порядке, т.е. самые новые сообщения будут вверху

if (!empty($messages['id'])) {
do //выводим все сообщения в цикле
  {
$author = $messages['author'];
$result4 = mysql_query("SELECT avatar,id FROM users WHERE login='$author'",$db); //извлекаем аватар автора
$myrow4 = mysql_fetch_array($result4);

if (!empty($myrow4['avatar'])) {//если такового нет, то выводим стандартный(может этого пользователя уже давно удалили)
$avatar = $myrow4['avatar'];
}
else {$avatar = "avatars/net-avatara.jpg";}

  printf("
  <table>
  <tr>
  <td><a href='page.php?id=%s'><img alt='аватар' src='%s'></a></td>
 
  <td>Автор: <a href='page.php?id=%s'>%s</a><br>
      Дата: %s<br>
  Сообщение:<br>
  %s<br>
  <a href='drop_post.php?id=%s'>Удалить</a>
 
  </td> 
  </tr>
  </table><br>
  ",$myrow4['id'],$avatar,$myrow4['id'],$author,$messages['date'],$messages['text'],$messages['id']);
  //выводим само сообщение
  }
  while($messages = mysql_fetch_array($tmp));

                    }
    else {
    //если сообщений не найдено
    echo "Сообщений нет";
    }
   
}

else
{
//если страничка чужая, то выводим только некторые данные и форму для отправки личных сообщений

print <<<HERE
<img alt='аватар' src='$myrow[avatar]'><br>
<form action='post.php' method='post'>
<br>
<h2>Отправить Ваше сообщение:</h2>
<textarea cols='43' rows='4' name='text'></textarea><br>
<input type='hidden' name='poluchatel' value='$myrow[login]'>
<input type='hidden' name='id' value='$myrow[id]'>
<input type='submit' name='submit' value='Отправить'>
</form>
HERE;
}

?>
</body>
</html>
Быстрый ответ:

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