1

Тема: авторизация

Здравствуйте! я столкнулся с проблемой регистрации и авторизации..точнее с регистрацией все получается, но с авторизацией не получается(..подскажите пж в чем проблема..я нашел готовый скрипт, но он вообще ничего не открывает,просто пустая страница:
<?php
include('db_login.php');
$connection=mysql_connect($db_host,$db_username,$db_password);
mysql_query('SET NAMES utf8');
if (!$connection)
{
     die('Ошибка подключения к серверу баз данных');
}
$db_select=mysql_select_db($db_database);

if (!$db_select)
{
    die('База данных не найдена или отсутствует доступ');
}
$userinfo='';
$state='0';
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['password'])) ) {// если в куках лежит логин и зашифрованый пароля
  if (!isset($_GET['exit'])) {// если кнопка выход не была нажата
    $login=$_COOKIE['login'];
    $pass=$_COOKIE['password'];

    // проверяем наличие пользователя в БД и достаём оттуда пароль
    $sql="SELECT id, password FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    if(mysql_num_rows($res)>0){// если пользователь есть в БД
      $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД
      if(strcmp($pass,md5($userinfo['pass'])) == 0) { //проверяем схожесть пароля из БД с паролем из куков

    // достаём все данные из БД
    $sql="SELECT * FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    $userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
    $time=time();
    // устанавливаем куки для запоминания статуса пользователя
    setcookie("login",$login,$time+1800);
    setcookie("password",$pass,$time+1800);
    $state = 1;// статус, если 1, тогда пользователь авторизован
      }
    }
  } else {
    //обнуляем куки, если была нажата кнопка выход
    setcookie("login");
    setcookie("password");
  }
}
if($state != 1) {// если после проверки куков, оказалось, что пользователь не авторизован, то идем дальше
  if( (isset($_POST['login'])) & (isset($_POST['password'])) ){ // если пользователь ввёл логин и пароль
  $login = $_POST['login'];   

  // проверяем наличие пользователя в БД и достаём оттуда пароль
  $sql = "SELECT id, password FROM users WHERE login='$login'";
  $res = mysql_query($sql);
    if(mysql_num_rows($res)>0) {// если пользователь есть в БД
      $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД и номер пользователя
      $pass = $_POST['password'];
      if(strcmp($pass,$userinfo['password'])==0){

    // достаём все данные из БД
    $sql="SELECT * FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    $userinfo=mysql_fetch_array($res);// в этой переменной будет лежать вся информация о пользователе из БД
    $time=time();
    // устанавливаем куки для запоминания статуса пользователя, пароль шифруем
    setcookie("login", $login, $time+1800);
    setcookie("password", md5($pass), $time+1800);
    $state = 1;// статус, если 1, тогда пользователь авторизован
      }
    }
  }
}
if($state != 1) {
?>
<form method="post" action="/vibor.php">
Логин: <input type="text" size="30" name="login"/><br />
Пароль: <input type="password" name="password" size="30"/><br />
<input type="submit" value="Войти"/>
</form>
<br /><a href="/register.php">Регистрация</a>
<?php
} else {
  echo 'Вы вошли на сайт!<br /> Ваш Логин: '.$userinfo["login"].'<br />Ваш E-mail: '.$userinfo["email"].'<br /> <a href="/index.php?exit=y">Выход</a>';
}
    ?>

мне необходимо ,чтобы при удачной авторизации меня перекинуло на страницу vibor.php и там вывело сообщение о  входе в систему..но не получается(..скрипт в целом мне понятен, кроме конца скрипта,немного непонятная конструкция, думаю в ней проблема..

2

Re: авторизация

Сперва попробуйте так:

<form method="post" action="">

Если скрипт работает и выведет "Вы вошли на сайт!", то перенаправление необходимо будет сделать через метатег.

<meta HTTP-EQUIV="REFRESH" content="0; url=http://php-myadmin.ru/">

3

Re: авторизация

попробовал, но не работает

4

Re: авторизация

VitoS сказал:

попробовал, но не работает

Попробуйте разобраться хотя бы в какой части код не работает. Если есть ошибки, то покажите их.

5

Re: авторизация

у меня страница не загружается совсем, точнее она просто пустая...в firebugе выводится ошибка:  NetworkError: 500 Internal Server Error

6

Re: авторизация

Поправил в коде тег открывающий PHP код <?php

7

Re: авторизация

спасибо, сейчас работает..в первом случае исправил ,а во втором забыл...сейчас че-то не понимаю как работает переброс на другую страницу...
когда делаю так <form method="post" action=""> все работает, но не перекидывает на нужную страницу
а когда прописываю <meta HTTP-EQUIV="REFRESH" content="0; url=vibor.php"> то он просто туда перенаправляет..
а возможно сделать чтобы он перенаправил на другую страницу, но и надпись о том что вошли на сайт там тоже появилась?

8

Re: авторизация

Вместо строки:

echo 'Вы вошли на сайт!<br /> Ваш Логин: '.$userinfo["login"].'<br />Ваш E-mail: '.$userinfo["email"].'<br /> <a href="/index.php?exit=y">Выход</a>';

Необходимо вставить:

<meta HTTP-EQUIV="REFRESH" content="0; url=vibor.php">

В этом случае будет перенаправление при входе.

VitoS сказал:

а возможно сделать чтобы он перенаправил на другую страницу, но и надпись о том что вошли на сайт там тоже появилась?

Можно, тогда надпись выводите в файле vibor.php после проверки входа.

9

Re: авторизация

Hanut сказал:

Можно, тогда надпись выводите в файле vibor.php после проверки входа.

тогда в файле vibor.php тоже должен быть код проверки входа? он должен быть такой же как и в начальном файле?

10

Re: авторизация

VitoS сказал:

тогда в файле vibor.php тоже должен быть код проверки входа? он должен быть такой же как и в начальном файле?

Почти. Надо проверить куки, сравнить имя и пароль с данными из БД и либо продолжить вывод страницы, либо перенаправить пользователя на страницу регистрации. Устанавливать куки тамуже не надо, конечно.

11

Re: авторизация

сделал вот так:
<?php
    include('db_login.php');
$connection=mysql_connect($db_host,$db_username,$db_password);
mysql_query('SET NAMES utf8');
if (!$connection)
{
     die('Ошибка подключения к серверу баз данных');
}
$db_select=mysql_select_db($db_database);

if (!$db_select)
{
    die('База данных не найдена или отсутствует доступ');
}
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['password'])) ) {// если в куках лежит логин и зашифрованый пароля
    if (!isset($_GET['exit'])) {
    $login=$_COOKIE['login'];
    $pass=$_COOKIE['password'];
    // проверяем наличие пользователя в БД и достаём оттуда пароль
    $sql="SELECT id, password FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    if(mysql_num_rows($res)>0){// если пользователь есть в БД
      $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД
      if(strcmp($pass,md5($userinfo['password'])) == 0) { //проверяем схожесть пароля из БД с паролем из куков

    // достаём все данные из БД
    $sql="SELECT * FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    $userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
    }
    }
    }
    }
    if($login == $userinfo["login"] && $pass == $userinfo["password"]) {
    echo 'Вы вошли на сайт!<br /> Ваш Логин: '.$userinfo["login"].'<br />Выш E-mail: '.$userinfo["email"].'<br /> <a href="/index.php?exit=y">Выход</a>';}
    }
    else {
    echo '<meta HTTP-EQUIV="REFRESH" content="0; url=reg.php">';
    }
    ?>

что-то неправильно, не работает..

12

Re: авторизация

Лишняя фигурная скобка. Правьте в текстовом редакторе с подсветкой кода, чтобы было проще.

13

Re: авторизация

меня перекидывает на нужную страницу, но текст не появляется на ней никакой...

14

Re: авторизация

VitoS сказал:

меня перекидывает на нужную страницу, но текст не появляется на ней никакой...

Идите по тексту, проверяйте все переменные и условия. Проще всего делать это с помощью функции exit(), например:

exit($_COOKIE['login']);

15

Re: авторизация

спасибо, нашел проблему

16 (изменено: VitoS, 2011-12-04 14:35:36)

Re: авторизация

здравствуйте!подскажите пожалуйста, где у меня ошибка, а то уже несколько часов сижу и не понимаю...сейчас скажу что должно получиться:
при регистрации пользователь должен выбрать к какой группе он относится (у меня это куратор и родитель), если он выбирает родителя, то текстовое поле становится активным. Начав писать фамилию ребенка, должен происходить динамический поиск из базы..такой поиск у меня уже реализован и работает на другой странице, потому там ошибки точно нет..вот код:
//код автозаполнения
<script type="text/javascript">
     function autocomplete() {
     $(function() {
        $('.autocomplete').autocomplete({
            source: [
              <?php
            include('db_login.php');
            $connection=mysql_connect($db_host,$db_username,$db_password);
             mysql_query('SET NAMES utf8');
           if (!$connection)
            {
                  die('Ошибка подключения к серверу баз данных');
            }
            $db_select=mysql_select_db($db_database);

           if (!$db_select)
         {
              die('База данных не найдена или отсутствует доступ');
            }
             $stud='select Fio from studs';
             $res_stud=mysql_query($stud);
             $a = array();
             while ($row_stud=mysql_fetch_array($res_stud)){
             $a[] = '{label: "' . addslashes($row_stud['Fio']) . '",'
        .   'value: "' . addslashes($row_stud['Fio']) . '"}';
}
if (count($a) > 0) echo implode(',', $a);
             ?>
            ],
            html:true
       });
    });
    }
    autocomplete();
    </script>
//добавляю чекбокс для того чтобы активировать поле
<input type="checkbox" name="checkm" value="0" onChange="check1(this);">Родитель
<script language="javascript">
function check1(obj){
if(obj.checked){
document.getElementById("autocomplete").disabled=false;
} else {
document.getElementById("autocomplete").disabled=true;

}
}</script>
//само поле
<font size=3 color=black></font><input name="del" type="text" disabled=disabled id="autocomplete">

где я мог ошибиться?..еще хочу заметить ,что никаких ошибок не возникает, просто не работает сам поиск. я думаю, что дело в идентификаторе,но не знаю как исправить проблему..

17

Re: авторизация

VitoS сказал:

я думаю, что дело в идентификаторе

Совершенно верно. По идентификатору, с помощью jQuery, к элементу надо обращаться так: $('#autocomplete')

18

Re: авторизация

то есть достаточно изменить на это выражение эту строчку?:
<font size=3 color=black></font><input name="del" type="text" disabled=disabled id=$('#autocomplete')>
но так не срабатывает(..поиск по-прежнему не работает

19

Re: авторизация

VitoS сказал:

но так не срабатывает

Нет. Обратите внимание на эту строку:

$('.autocomplete').autocomplete({

Она должна выглядеть так:

$('#autocomplete').autocomplete({

Соответственно идентификатор трогать не надо.
id="autocomplete"

20

Re: авторизация

спасибо! все заработало!

21

Re: авторизация

Добрый день! подскажите пожалуйста, можно ли каким-либо образом обновить куки или в моем случае не нужно их обновлять, а нужно сделать как-то иначе..вот моя ситуация: я захожу в систему под определенным пользователем,открывается страница приветствия пользователя. мне нужно сменить пароль, перехожу на другую страницу, меняю, в базе все меняется нормально, но обновления куков не происходит и потому когда я возвращаюсь на страницу приветствия пользователя возникают ошибки из-за этой смены пароля...как это можно решать ,подскажите пожалуйста..вот мой код:

//проверка куков
include('db_login.php');
$connection=mysql_connect($db_host,$db_username,$db_password);
mysql_query('SET NAMES utf8');
if (!$connection)
{
     die('Ошибка подключения к серверу баз данных');
}
$db_select=mysql_select_db($db_database);

if (!$db_select)
{
    die('База данных не найдена или отсутствует доступ');
}
if( (isset($_COOKIE['login'])) & (isset($_COOKIE['password'])) ) {// если в куках лежит логин и зашифрованый пароль
    if (!isset($_GET['exit'])) {
    $login=$_COOKIE['login'];
    $pass=$_COOKIE['password'];
    // проверяем наличие пользователя в БД и достаём оттуда пароль
    $sql="SELECT id, password FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    if(mysql_num_rows($res)>0){// если пользователь есть в БД
      $userinfo = mysql_fetch_array($res);// в этой переменной лежит пароль из БД
      if(strcmp($pass,$userinfo['password']) == 0) { //проверяем схожесть пароля из БД с паролем из куков

    // достаём все данные из БД
    $sql="SELECT * FROM users WHERE login='$login'";
    $res=mysql_query($sql);
    $userinfo=mysql_fetch_array($res); // в этой переменной будет лежать вся информация о пользователе из БД
    }
        }
    }
   
    else {
    //обнуляем куки, если была нажата кнопка выход
    setcookie("login");
    setcookie("password");
  }
     
    }
    else {
    echo '<meta HTTP-EQUIV="REFRESH" content="0; url=index.php">';
    }
   
//скрипт смены пароля

echo '<form action="" method="post"><table>';
echo '<tr><td>Старый пароль</td><td><input type="password" name="pass1" ></td></tr>
<tr><td>Новый пароль</td><td><input type="password" name="pass2" ></td></tr>
<tr><td>Подтверждение пароля</td><td><input type="password" name="pass3" ></td></tr>
<tr><td></td><td><input type="submit" value="Сменить" name="izmen"></td></tr></table></form>';
if (isset($_POST['izmen']))
{
if(empty($_POST["pass1"]))
{
echo 'Вы не ввели старый пароль!';
}
elseif (empty($_POST["pass2"]))
{
echo 'Вы не ввели новый пароль';
}
elseif(empty($_POST['pass3']))
{
echo 'Вы не ввели подтверждение пароля';
}
$pass=$_POST['pass1'];
$pass_schif=md5($pass);
if ($pass_schif==$userinfo["password"])
  {
  $pass2=$_POST['pass2'];
  $pass3=$_POST['pass3'];
  if($_POST['pass2'] != $_POST['pass3'])
{
echo 'Введенные пароли не совпадают';
}
else
{
$pass2_schif=md5($pass2);
$sql_pass="select * from users where login='".$userinfo["login"]."'";
$res_sql_pass=mysql_query($sql_pass);
if (!$res_sql_pass) {
echo "невозможно выполнить запрос".mysql_error();}
$row_sql_pass = mysql_fetch_assoc($res_sql_pass);
$id_user=$row_sql_pass['id'];
     $sql_upd_pass="UPDATE users SET password='$pass2_schif' where id='$id_user'";
    $res_pass=mysql_query($sql_upd_pass);
     
        if (!$res_pass) {
echo "невозможно выполнить запрос".mysql_error();}
    else {echo 'Пароль поменян успешно!';}
                }
}
else {echo '&nbsp;Старый пароль введен неверно!'.mysql_error();}
}

22

Re: авторизация

Обязательно надо прописать в кукисах новый пароль в виде:

setcookie('password', $pass2_schif);

Но здесь есть одна тонкость: куки следует изменять перед тем, как скрипт отдает заголовки, то есть происходит вывод данных через функции echo или print. Обработку POST данных и их запись в кукисы надо производить в самом верху скрипта.

23

Re: авторизация

спасибо! вот теперь все нормально работает!

24

Re: авторизация

у меня снова вопрос возник..можно ли каким-либо образом взять у произвольной фразы только первые буквы от слов?..к примеру у меня есть ФИО, которое находится в одной ячейке в бд,мне нужно взять первую букву от фамилии, имени и отчества..перед этим надо перевести их на английский (траслит)..с переводом на англ я справился, а вот как быть с выбором необходимых букв не могу придумать..подскажите пожалуйста как можно это сделать

25

Re: авторизация

Если имя фамилия и отчество разделены пробелом, то сперва надо разбить строку на массив по этому самому пробелу и затем выбрать первую букву каждого элемента массива.

function initials($str) {
$aReturn = array();
$a = explode(' ', $str);
foreach ($a as $value) {
  $aReturn[] = substr(trim($value), 0, 1);
}
return implode('', $aReturn);
}
initials('Иван Иванович Иванов');