[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите решить проблемму
TOK
Есть страница с формой регистрации
PHP
<?php
session_start
();
include(
"include/user_register/functions.inc.php");
include_once(
"include/connectdb.php");
include(
'include/user_register/uni-auth.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Виртуальная футбольная лига - VSOL</TITLE>
<META http-equiv=Content-Type content="text/html; charset=windows-1251"><LINK 
media=screen 
href="index.css" type=text/css rel=stylesheet>
<META content="MSHTML 6.00.6000.16448" name=GENERATOR>
<script language="javascript">
<!--
required = new Array("nick", "pass", "rpass", "mail", "komanda");
required_show = new Array("введите свой Логин!", "введите свой Пароль!","подтвердите свой Пароль!","введите свой E-mail!","введите название основной команды во ВСОЛе!");

function sendform() {

var i, j;

for(j=0; j<required.length; j++) {
for (i=0; i<document.forms[0].length; i++) {
if (document.forms[0].elements[i].name == required[j] && document.forms[0].elements[i].value == "" ) {
alert('Будьте бдительны: ' + required_show[j]);
document.forms[0].elements[i].focus();
return false;
}
}
}

return true;
}

//-->

</script> 
</HEAD>
<BODY>
<DIV class=bl id=bl-top>ВСОЛ Daily - футбольная новостная лента on-line менеджера - www.virtualsoccer.ru </DIV>
<DIV class=bl id=bl-head>
<TABLE>
  <TBODY>
  <TR>
    <TH noWrap align=left width=280><A href="index.php"><B>ВСОЛ Daily</B><BR>футбольная новостная лента</A> </TH>
    <TD align=middle width="100%"></TD>
    <TD noWrap align=right width=180>/ RSS /</TD></TR></TBODY></TABLE></DIV>
<DIV class=bl style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #fff; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; TEXT-ALIGN: left">
<DIV style="FLOAT: right; MARGIN-RIGHT: 5px"></DIV>
&nbsp;<B>Главред: <span style="color : red">TOK</B></span><br>
<?php
if(USER_LOGGED)  {
    if(!
check_user($UserID)) logout();
     echo 
$UserName;
     echo 
'<h4><a href="?logout"><i>&nbsp;Выход</i></a></h4>';
     }
?>
</DIV>
<!--//================================================-->
<DIV class=bl id=bl-main>
<TABLE>
  <TBODY>
  <TR>
    <TD id=tb-main-c>     
      
<!--//================================================================-->
<center>
<div id="div-regForm">
<div class="form-title">РЕГИСТРАЦИЯ</div>
<?php
if(!$_POST['do'] OR $_POST['do'] =='') {
//Генерируем шестизначный ключ для капчи
if($_SESSION['uid'] =='') { $_SESSION['uid'] = mt_rand(100000,999999); }
echo 
'<div class="form-sub-title">Зарегистрируйся и наслаждайся!!!</div>
<form id="regForm" action="forma_register.php" method="post" onsubmit="return sendform();">
      <table>
            <tbody>
            <tr>
                <td><label for="name">Ваш логин:</label></td>
                <td><div class="input-container"><input name="nick" id="nick" type="text" /></div></td>
            </tr>
            <tr>
                <td><label for="password">Пароль:</label></td>
                <td><div class="input-container"><input name="pass" id="pass" type="password" /></div></td>
            </tr>
            <tr>
                <td><label for="password2">Подтвердите пароль:</label></td>
                <td><div class="input-container"><input name="rpass" id="rpass" type="password" /></div></td>
            </tr>
            <tr>
                <td><label for="email">Ваш Email:</label></td>
                <td><div class="input-container"><input name="mail" id="mail" type="text" /></div></td>
            </tr>
            <tr>
                <td><label for="komanda">Имя основной команды во ВСОЛе:</label></td>
                <td><div class="input-container"><input name="komanda" id="komanda" type="text" /></div></td>
            </tr>
            <tr>
                <td><img src="img/capcha/capcha.php?sid='
.$_SESSION['uid'].'"/></td>
                <td><div class="input-container"><input name="sid" id="sid" type="text" value="" /></div></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input name="do" type="submit" class="Button" value="Помчались..." /></td>
            </tr>
            </tbody>
      </table>
</form>'
;

//Если данные отправлены
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'];
$komanda $_POST['komanda'];
//Создаем запрос для записи данных в БД
$r "INSERT INTO users(nick, password, email, komanda, uniq_id, status, last_date, date) VALUES('".strtolower($nick)."','".md5($pass)."','".$email."','".$komanda."','".$uniq_id."',0,'".date("dmY")."','".date("dmY")."')";
mysql_query ($r) or die (mysql_error());

//После запроса отправляем письмо юзеру, для активации аккаунта
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: Сайт www.daily-vsol.hut.ru' "\r\n";

//Здесь укажите электронный адрес, куда будут уходить сообщения
$mailto $email;
$subject "Подтверждение регистарции на сайте";
$message 'Для активации аккаунта пройдите по следующей ссылке <a href="http://www.daily-vsol.hut.ru/forma_register.php?
activation='
.$uniq_id.'" target="_blank">http://www.daily-vsol.hut.ru/forma_register.php?activation='.$uniq_id.'</a>';
$message .= 'или скопируйте ссылку в окно ввода адреса браузера и нажмите enter.';
//Отправляем сообщение
if(sendmail($mailto,$subject,$message,$headers) !== FALSE) {
echo 
'Регистрация завершена, на введеный Вами e-mail было отправлено сообщение для активации аккаунта';
}
else {echo 
'Регистрация невозможна: Повторите запрос позднее';}
                       }
                       else {echo 
'Регистрация невозможна: Повторите запрос позднее';}
                 }
                 else {echo 
'Регистрация невозможна: Электронный адрес должен соответствовать шаблону <b>name@domen.com</b><br/><a href="forma_register.php"/>назад</a>';}

             }
             else {echo 
'Регистрация невозможна: Введенные пароли не совпадают<br/><a href="forma_register.php"/>назад</a>';}


           }
           else { echo 
'Регистрация невозможна: Пользователь с таким именем уже существует<br/><a href="forma_register.php"/>назад</a>';}


         
session_destroy();
        }
        else { echo 
'Регистрация невозможна: код подтверждения введен не верно<br/><a href="forma_register.php"/>назад</a>';}

}
//Модуль отвечающий за активацию аккаунта

     
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 
'Активация невозможна: профиль уже активирован';}

     }
?>

</center>
<!--//================================================================-->
      </TD>
    <TD id=tb-main-r>
    <?php
 
if(USER_LOGGED)
   {
 
//тут ничего не нано
 
}
 else {
          echo 
'<DIV class=menu>
      <H4></H4><A href="forma_register.php">Регистрация</A> / <A 
      href="#">Забыли?</A><BR>
      <TABLE width=200 align=center>
        <FORM class=flog action="'
;
        echo 
$_SERVER['PHP_SELF'];
        echo 
'" method=post>
        <TBODY>
        <TR>
          <TD>Логин</TD>
          <TD colSpan=2><INPUT style="WIDTH: 100%" name="user"></TD></TR>
        <TR>
          <TD>Пароль</TD>
          <TD colSpan=2><INPUT style="WIDTH: 100%" type=password 
          name="pass"></TD></TR>
        <TR>
          <TD></TD>
          <TD><INPUT class=inp_ch id=inp_ch_id type=checkbox name=l-rem></TD>
          <TD><LABEL for=inp_ch_id>Запомнить</LABEL></TD></TR>
        <TR>
          <TD align=right colSpan=3><INPUT style="FONT-WEIGHT: bold; FONT-SIZE: 10px" type=submit value=ВОЙТИ name="login">
          </TD></TR></FORM></TBODY></TABLE></DIV>'
;}?>
      <DIV class=menu>
      <H4></H4>
      <UL>
        <LI><A href="index.php"><font size="+3">ВСОЛ Daily</font></A> 
        <LI> 
        <LI><A href="sigrannost.php">Сыгранность</A> 
        <LI><A href="#">Форум</A> 
        <LI><A href="files/HelpVSOL_v.1.5(1.93Mb).exe">Скачать HelpVSOL_v.1.5(1.93Mb)</A>
      </UL></DIV>     
      </TD></TR></TBODY></TABLE></DIV>
<DIV class=bl id=bl-sub>
<TABLE>
  <TBODY>
  <TR>
    <TD noWrap></TD>
    <TH width="100%">2009 © <A href="#">VSOL 
    Daily</A></TH></TR></TBODY></TABLE></DIV>
 


Есть скрипт авторизации
PHP
<?php
 
/*
 Универсальный скрипт авторизации.
 Используется сессии для хранения данных.
 Скрипт типа "всё-в-одном" - его необходимо
 включать в каждый файл для использования.
 Распространяется по лицензии BSD.
  
 +Требования:
 +-Mysql & PHP5
 +-Созданое подключение к MySQL и запущеная сессия =)
  
 ©2008 Vasilii B. Shpilchin
 */
  
 ##Определяем константы
 
define('USERS_TABLE','users');
 
define('SID',session_id());
  
 
##Определяем функции
 //Функция выхода.
 //Пользователь считается авторизированым, если в сессии присутствует uid
 //см. "Действия - если пользователь авторизирован".
 
function logout() {
     
session_unregister('uid'); //Удаляем из сессии ID пользователя
     
die(header('Location:'.$_SERVER['PHP_SELF']));
 }
  
 
//Функция входа.
 //Все выбраные поля записываются в сессию.
 //Таким образом, при каждом просмотре страницы не надо выбирать их заново.
 //Для обновления информации из БД можно пользоваться этой же функцией - имя и пароль
 //хранятся в сессиях
 
function login($username,$password)    {
     
$result mysql_query("SELECT * FROM `".USERS_TABLE."` WHERE `nick`='$username' AND `password`='$password';")
         or die(
mysql_error());
     
$USER mysql_fetch_array($result,1); //Генерирует удобный массив из результата запроса
     
if(!empty($USER)) { //Если массив не пустой (это значит, что пара имя/пароль верная)
         
$_SESSION array_merge($_SESSION,$USER); //Добавляем массив с пользователем к массиву сессии
         
         
mysql_query("UPDATE `".USERS_TABLE."` SET `sid`='".SID."' WHERE `uid`='".$USER['uid']."';")
             or die(
mysql_error());
         return 
true;
     }
     else {
         return 
false;
     }
 }
  
 
//Функция проверки залогинности пользователя.
 //При входе, ID сессии записывается в БД.
 //Если ID текущей сессии и SID из БД не совпадают, производится logout.
 //Благородя этому нельзя одновременно работать под одним ником с разных браузеров.
 
function check_user($uid) {
     
$result mysql_query("SELECT `sid` FROM `".USERS_TABLE."` WHERE `uid`='$uid';");
     
$sid mysql_result($result,0);
     return 
$sid==SID true false;
 }
  
 
##Действия - если пользователь авторизирован
 
if(isset($_SESSION['uid'])) { //Если была произведена авторизация, то в сессии есть uid
  
     //Константу удобно проверять в любом месте скрипта
     
define('USER_LOGGED',true);
     
//Создаём удобные переменные
     //Все поля таблицы пользователей записываются в сесси (см. стр. 35-37)
     //Таким образом, после добавления нового поля в таблицу надо дописть лишь одну строку
     
$UserName $_SESSION['nick'];
     
$UserPass $_SESSION['password'];
     
$UserID $_SESSION['uid'];
 }
 else {
     
define('USER_LOGGED',false);
 }
  
 
##Действия при попытке входа
 
if (isset($_POST['login'])) {
     
     if(
get_magic_quotes_gpc()) { //Если слеши автоматически добавляются
         
$_POST['user']=stripslashes($_POST['user']);
         
$_POST['pass']=stripslashes($_POST['pass']);
     }
     
$user mysql_real_escape_string($_POST['user']);
     
$pass md5($_POST['pass']);
     if(
login($user,$pass)) {
         
header('Refresh: 0');
         die(
'Вы успешно авторизировались!');
     }
     else {
         
header('Refresh: 3;');
         die(
'Пароль неправильный!');
     }
     
 }
  
 
##Действия при попытке выхода
 
if(isset($_GET['logout'])) {
     
logout();
 }


Для того чтобы отображать имя пользователя на странице, я на все страницы и страницу регистрации в том числе, добавил код
PHP
<?php
if(USER_LOGGED)  {
    if(!
check_user($UserID)) logout();
     echo 
$UserName;
     echo 
'<h4><a href="?logout"><i>&nbsp;Выход</i></a></h4>';
     }

Но появилась проблема. Если обновить страницу регистрации, вылазит

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 6 in Z:\home\test1.ru\www\include\user_register\uni-auth.php on line 56

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\test1.ru\www\forma_register.php:13) in Z:\home\test1.ru\www\include\user_register\uni-auth.php on line 26

Если ещё раз обновить, всё нормально, и так дальше. Такое происходит тока на этой странице.

Читал на phpfaq про header, не помогло мне.

Посоветуйте как избавится от этой беды?




Спустя 1 день, 23 часа, 41 минута, 1 секунда (15.10.2009 - 17:25) vagrand написал(а):
А ты не пробовал проверить результат который возвращает код:
mysql_query("SELECT `sid` FROM `".USERS_TABLE."` WHERE `uid`='$uid';")
?

Он знаеш ли и фолс может вернуть
Быстрый ответ:

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