Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Панель управления

Статус
В этой теме нельзя размещать новые ответы.

q0b3rMAN

Умник
Пишем все сначала, дарю можно сказать основу своей панели.

(что бы ничего не собирать, надо только настроить файл bd.php и сделать импорт БД.)

В данном уроке мы реализуем:
Кабинет пользователя;
Регистрация;
Биллинг;
Автоматическая установка сервера SA-MP;
Защита от SQL иньекций на каждой странице;
Обещенный платеж для пользователя;
и многое другое.

Создаем новую базу !
Выбираем Импорт, и и вставляем его туда :)
Это копия моей базы данных !

Для того что-бы начать урок потребуется сборник картинок на страницах.

Папку Images и Code кидаем на свой веб-сервер, в папку www.
Внимание, без папки Code - регистрация работать не будет!!

1.Создаем файл подключения в базе данных.
Соддержимое, bd.php:
PHP:
<?php
$db = mysql_connect ("localhost","root","123456");
mysql_select_db ("BDSamp",$db);
?>
Где localhost - указываем свой MySQL сервер.
Где root - указываем имя пользователя, где 12456 - пароль.
Где BDSamp - указываем свое имя базы данных.
Сохраняем документ.

2.Создаем регистрацию нового пользователя.
Содержимое, register.php:

PHP:
<html>
<head>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>



<body id="main_body" >
<form action="save_user.php" method="post" enctype="multipart/form-data">

<!-- save_user.php - это адрес обработчика. То есть, после нажатия на кнопку "Зарегистрироваться", данные из полей отправятся на страничку save_user.php методом "post" -->

<div id="form_container">

		<form id="form_188746" class="appnitro"  method="post" action="">
					<div class="form_description">
								<center><h2>Регистрация</h2>
						<div id="footer">
						<a href="/version.php">Control Panel</a></center>
					</div>

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

<p>Введите код с картинки:
<p><img src="code/my_codegen.php"></p>
<p><input type="text" name="code"></p>
<!-- В code/my_codegen.php генерируется код и рисуется изображение --> 

<p>

<!-- Кнопочка (type="submit") отправляет данные на страничку save_user.php  -->  
</p></f
Звездочками (*) обозначены поля, обязательные для заполнения.

	</center>
<img src="images/new.png" align="centr"><br>
<input type="image" src='images/reg.png' name="submit" value="Зарегистрироваться">
<br>
<br>
<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }

?>
		<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов<br>
		</div>
		</form>
					</div>
</div>
</body>
</html>
Внимание, зайдите на страницу, посмотрите все ли нормально.
Если внизу видите:
Warning: file(include/vrs.txt) [function.file]: failed to open stream: No such file or directory in C:\AppServ\www\register.php on line 59
Это нормально, скоро исправим.

3.Делаем функции сохранения пользователя.
Содержимое, save_user.php:
PHP:
<html>
<head>
<title><?php echo $myrow['login']; ?></title>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>
<body id="main_body" >
	<div id="form_container">
						<div class="form_description">
<center><h2>Продолжение регистрации</h2></center>
											<p></p>
						</div>		
<?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 (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} } //заносим введенный пользователем защитный код в переменную $code, если он пустой, то уничтожаем переменную




if (empty($login) or empty($password)or empty($code)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("<center>Вы ввели не всю информацию, вернитесь назад и заполните все поля!</center>"); //останавливаем выполнение сценариев

}



function generate_code() //запускаем функцию, генерирующую код
{
                
    $hours = date("H"); // час       
    $minuts = substr(date("H"), 0 , 1);// минута 
    $mouns = date("m");    // месяц             
    $year_day = date("z"); // день в году

    $str = $hours . $minuts . $mouns . $year_day; //создаем строку
    $str = md5(md5($str)); //дважды шифруем в md5
	$str = strrev($str);// реверс строки
	$str = substr($str, 3, 6); // извлекаем 6 символов, начиная с 3
	// Вам конечно же можно постваить другие значения, так как, если взломщики узнают, каким именно способом это все генерируется, то в защите не будет смысла.
	

    $array_mix = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
    srand ((float)microtime()*1000000);
    shuffle ($array_mix);
	//Тщательно перемешиваем, соль, сахар по вкусу!!!
    return implode("", $array_mix);
}

function chec_code($code) //проверяем код
{
    $code = trim($code);//удаляем пробелы

    $array_mix = preg_split ('//', generate_code(), -1, PREG_SPLIT_NO_EMPTY);
    $m_code = preg_split ('//', $code, -1, PREG_SPLIT_NO_EMPTY);

    $result = array_intersect ($array_mix, $m_code);
if (strlen(generate_code())!=strlen($code))
{
    return FALSE;
}
if (sizeof($result) == sizeof($array_mix))
{
    return TRUE;
}
else
{
    return FALSE;
}
}

// после сравнения проверяем, пускать ли пользователя дальше или, он сделал ошибку, и остановить скрипт
if (!chec_code($_POST['code']))
{
exit ("<center>Вы ввели неверно код с картинки.</center>"); //останавливаем выполнение сценариев
}


//если логин и пароль введены,то обрабатываем их, чтобы теги и скрипты не работали, мало ли что люди могут ввести
$login = stripslashes($login);
$login = htmlspecialchars($login);

$password = stripslashes($password);
$password = htmlspecialchars($password);

//удаляем лишние пробелы
$login = trim($login);
$password = trim($password);


// дописываем новое********************************************

//добавляем проверку на длину логина и пароля
if (strlen($login) < 3 or strlen($login) > 15) {

exit ("<center>Логин должен состоять не менее чем из 3 символов и не более чем из 15.</center>"); //останавливаем выполнение сценариев

}
if (strlen($password) < 3 or strlen($password) > 15) {

exit ("<center>Пароль должен состоять не менее чем из 3 символов и не более чем из 15.</center>"); //останавливаем выполнение сценариев

}

if (empty($_FILES['fupload']['name']))
{
//если переменной не существует (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
$avatar = "avatars/net-avatara.jpg"; //можете нарисовать net-avatara.jpg или взять в исходниках
}

else 
{
//иначе - загружаем изображение пользователя
$path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия

	
if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
	 {	
	 	 	
		$filename = $_FILES['fupload']['name'];
		$source = $_FILES['fupload']['tmp_name'];	
		$target = $path_to_90_directory . $filename;
		move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory

	if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
	$im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
	}
	if(preg_match('/[.](PNG)|(png)$/', $filename)) {
	$im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
	}
	
	if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
		$im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
	}
	
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru

// Создание квадрата 90x90
// dest - результирующее изображение 
// w - ширина изображения 
// ratio - коэффициент пропорциональности 

$w = 90;  // квадратная 90x90. Можно поставить и другой размер.

// создаём исходное изображение на основе 
// исходного файла и определяем его размеры 
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения

         // создаём пустую квадратную картинку 
         // важно именно truecolor!, иначе будем иметь 8-битный результат 
         $dest = imagecreatetruecolor($w,$w); 

         // вырезаем квадратную серединку по x, если фото горизонтальное 
         if ($w_src>$h_src) 
         imagecopyresampled($dest, $im, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); 

         // вырезаем квадратную верхушку по y, 
         // если фото вертикальное (хотя можно тоже серединку) 
         if ($w_src<$h_src) 
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
                          min($w_src,$h_src), min($w_src,$h_src)); 

         // квадратная картинка масштабируется без вырезок 
         if ($w_src==$h_src) 
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); 
		 

$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.

//почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.

$avatar = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.

$delfull = $path_to_90_directory.$filename; 
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.
}
else 
         {
		 //в случае несоответствия формата, выдаем соответствующее сообщение
         
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>"); //останавливаем выполнение сценариев

	     }
//конец процесса загрузки и присвоения переменной $avatar адреса загруженной авы
}

$password = md5($password);//шифруем пароль

$password = strrev($password);// для надежности добавим реверс

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

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


// дописали новое********************************************

// Далее идет все из первой части статьи,но необходимо дописать изменение в запрос к базе. 

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

// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {

exit ("<center>Извините, введённый вами логин уже зарегистрирован. Введите другой логин.</center>"); //останавливаем выполнение сценариев

}

// если такого нет, то сохраняем данные
$result2 = mysql_query ("INSERT INTO users (login,password,avatar,email,date) VALUES('$login','$password','$avatar','$email',NOW())");
// Проверяем, есть ли ошибки
if ($result2=='TRUE')
{

$result3 = mysql_query ("SELECT id FROM users WHERE login='$login'",$db);//извлекаем идентификатор пользователя. Благодаря ему у нас и будет уникальный код активации, ведь двух одинаковых идентификаторов быть не может.
$myrow3 = mysql_fetch_array($result3);
$activation = md5($myrow3['id']).md5($login);//код активации аккаунта. Зашифруем через функцию md5 идентификатор и логин. Такое сочетание пользователь вряд ли сможет подобрать вручную через адресную строку.

$subject = "Подтверждение регистрации";//тема сообщения
$message = "Здравствуйте! Спасибо за регистрацию на citename.ru\nВаш логин: ".$login."\n
Перейдите по ссылке, чтобы активировать ваш аккаунт:\nhttp://localhost/test3/activation.php?login=".$login."&code=".$activation."\nС уважением,\n
Администрация citename.ru";//содержание сообщение

	
echo "<h4><center><a href=/activation.php?login=$login&code=$activation>Нажмите здесь для активации вашего аккаунта</a></center></h4>"; //говорим о отправленном письме пользователю
}

else {
exit ("<center>Ошибка! Вы не зарегистрированы.</center>"); //останавливаем выполнение сценариев

     }
?>
<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }

?>
		<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов<br>

		</div>
</body>
</html>
Когда пользователь на странице register.php введет все данные, они отправятся на страницу save_user.php

4.Пишем авторизацию пользователя.
Содержимое, index.php:
PHP:
<?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']=strrev(md5($_COOKIE['password']))."b3p6f"; //в куках пароль был не зашифрованный, а в сессиях обычно храним зашифрованный
		  $_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>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>


<?php
if (!isset($myrow['avatar']) or $myrow['avatar']=='') {
//проверяем, не извлечены ли данные пользователя из базы. Если нет, то он не вошел, либо пароль в сессии неверный. Выводим окно для входа. Но мы не будем его выводить для вошедших, им оно уже не нужно.
print <<<HERE
<body id="main_body" >
<form action="testreg.php" method="post">

	<div id="form_container">
	
		<form id="form_188746" class="appnitro"  method="post" action="">
					<div class="form_description">
								<center><h2>Панель управления</h2>
								<div id="footer">
						<a href="/version.php">Control Panel</a></center>

		            </div>			
					<div class="form_description">
<!-- testreg.php - это адрес обработчика. То есть, после нажатия на кнопку "Войти", данные из полей отправятся на страничку testreg.php методом "post"  -->
  <p>
  						<li id="li_1" >
						<center>
		<label class="description" for="element_1">Логин </label>
			<div>
			<input id="login" name="login" class="element text medium" type="text" maxlength="255" value=""/> 
		    </div> 
						</center>


	
HERE;

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


print <<<HERE
  </p>
<!-- В текстовое поле (name="login" type="text") пользователь вводит свой логин -->  
  <p>

  						<li id="li_1" >
	<center><label class="description" for="element_1">Пароль </label></center>
			<div>
			<center><input id="password" name="password" class="element text medium" type="password" maxlength="255" value=""/> </center>
		</div> 

HERE;

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


<center>
<input type="image" src='images/auth.png' name="submit" value="Войти" >
<!-- Кнопочка (type="submit") отправляет данные на страничку testreg.php  --> 
</center>


</p>



HERE;
}

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


print <<<HERE
<body id="main_body" >
	<div id="form_container">
						<div class="form_description">
								<center><h2>Панель управления</h2></center>
											<p></p>
						</div>		
	<center>Вы авторизированы, как $_SESSION[login] [$_SERVER[REMOTE_ADDR]]<br>
			<div id="footer">
				Внимание, в целях улучшения качества обслуживания, ваш IP адрес сохранен
			</div>	
			</center>
	<center>

<center><a href='page.php?id=$_SESSION[id]'><input type="image" src='images/servers.png' name="submit" value="Управление" ></a><br>

<a href=exit.php><input type="image" src='images/out.png' name="submit" value="Выход" ></a><br>
</center>
<!-- ************************************************************************************************************ -->





<!-- Между оператором  "print <<<HERE" выводится html код с нужными переменными из php -->
<!-- Именно здесь можно добавлять формы для отправки комментариев и прочего... -->

			
HERE;


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

?>

		<div id="footer">
		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("<br>Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }
?>
			<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов</br>

		</div>
	</form>

</body>
</html>
5.Пишем проверку авторизации.
Содержимое, tesreg.php:
PHP:
<?php
session_start();// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
		  
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"); }

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 = md5($password);//шифруем пароль
$password = strrev($password);// для надежности добавим реверс
$password = $password."b3p6f";
//можно добавить несколько своих символов по вкусу, например, вписав "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 {
//если за последние 15 минут ошибок не было, то вставляем новую запись в таблицу "oshibka"
mysql_query ("INSERT INTO oshibka (ip,date,col) VALUES ('$ip',NOW(),'1')");
}

exit ("Извините, введённый вами логин или пароль неверный."); //останавливаем выполнение сценариев

}
else {

          //если пароли совпадают, то запускаем пользователю сессию! Можете его поздравить, он вошел!
          $_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>";

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

?>
6.Пишем выход пользователя.
Содержимое, exit.php:
PHP:
<?php
session_start();
if (empty($_SESSION['login']) or empty($_SESSION['password'])) 
{
//если не существует сессии с логином и паролем, значит на этот файл попал невошедший пользователь. Ему тут не место. Выдаем сообщение об ошибке, останавливаем скрипт
exit ("Доступ на эту страницу разрешен только зарегистрированным пользователям. Если вы зарегистрированы, то войдите на сайт под своим логином и паролем<br><a href='index.php'>Главная страница</a>");
}

unset($_SESSION['password']);
unset($_SESSION['login']); 
unset($_SESSION['id']);// уничтожаем переменные в сессиях

setcookie("auto", "", time()+9999999);//очищаем автоматический вход
exit("<html><head><meta http-equiv='Refresh' content='0; URL=index.php'></head></html>");
// отправляем пользователя на главную страницу.
?>
7.Баланс пользователя.
Содержимое, balans.php:
PHP:
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();

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' AND activation='1'",$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>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
		<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

</head>
<body>

<body id="main_body" >
	<div id="form_container">
						<div class="form_description">
<center><h2>Управление балансом "<?php echo $myrow['login']; ?>"</h2></center>
											<p></p>
						</div>		


<?php
print <<<HERE
HERE;
//выше вывели меню

if ($myrow['login'] == $login) {


print <<<HERE

<center>Баланс: <strong>$myrow[balans] </strong>руб.</center>
<br>
<center>
<b>Информация о пользователе</b><br>
<div id="footer">
Номер вашего лицевого счета: <strong>$myrow[id] </strong>
</div>
<br>

<b>Кредит</b><br>
<div id="footer">
<form action='update_user.php' method='post'>
Сумма обещенного платежа:<br>
<input name='balans' size="3" maxlength="2" type='balans'>
<input type='submit' name='submit'  value='взять'>
</form>
<br>

</div>
</center>
HERE;

}

?>

<img src="images/coins.png" align="right">
<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }

?>
		<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов<br>

		</div>
</body>
</html>
8.Обработчик для balans.php.
Содержимое, update_user.php:
PHP:
<?php
session_start();
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 

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("Вход на эту страницу разрешен только зарегистрированным пользователям!"); }

$old_login = $_SESSION['login']; //Старый логин нам пригодиться
$id = $_SESSION['id'];//идентификатор пользователя тоже нужен
$ava = "avatars/net-avatara.jpg";//стандартное изображение будет кстати

////////////////////////
////////ИЗМЕНЕНИЕ ЛОГИНА
////////////////////////

if (isset($_POST['login']))//Если существует логин
      {
$login = $_POST['login'];
$login = stripslashes($login); $login = htmlspecialchars($login); $login = trim($login);//удаляем все лишнее
if ($login == '') { exit("Вы не ввели логин");} //Если логин пустой, то останавливаем сценарий

if (strlen($login) < 3 or strlen($login) > 15) {//проверяем дину
exit ("Логин должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
}

// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин."); //останавливаем выполнение сценариев
}

$result4 = mysql_query("UPDATE users SET login='$login' WHERE login='$old_login'",$db);//обновляем в базе логин пользователя
if ($result4=='TRUE') {//если выполнено верно, то обновляем все сообщения, которые отправлены ему
mysql_query("UPDATE messages SET author='$login' WHERE author='$old_login'",$db);
$_SESSION['login'] = $login;//Обновляем логин в сессии
if (isset($_COOKIE['login'])) {
setcookie("login", $login, time()+9999999);//Обновляем логин в куках
}

echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваш логин изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}//отправляем пользователя назад

      } 
	  
////////////////////////
////////КРЕДИТ
////////////////////////

if (isset($_POST['balans']))//Если существует баланс
      {
$balans = $_POST['balans'];
$balans = stripslashes($balans); $balans = htmlspecialchars($balans); $balans = trim($balans);//удаляем все лишнее
if ($balans == '') { exit("Вы не ввели сумму обещенного платежа");} //Если баланс пустой, то останавливаем сценарий

if (strlen($balans) < 1 or strlen($balans) > 2) {//проверяем дину
exit ("Максимальная сумма обещенного платежа 99 рублей"); //останавливаем выполнение сценариев
}


$result4 = mysql_query("UPDATE users SET balans=balans+$balans WHERE login='$old_login'",$db);//обновляем в базе баланс пользователя
if ($result4=='TRUE') {//если выполнено верно, то обновляем все сообщения, которые отправлены ему



echo "<html><head><meta http-equiv='Refresh' content='3; URL=balans.php?id=".$_SESSION['id']."'></head><body><center>Баланс на сумму $balans руб. зачислен! Вы будете перемещены обратно через 3 секунды.<center></body></html>";
mysql_query("UPDATE users SET activation='0' WHERE login='$login'",$db);
}//отправляем пользователя назад

      } 

	 
	  
////////////////////////
////////ИЗМЕНЕНИЕ ПАРОЛЯ
////////////////////////

else if (isset($_POST['password']))//Если существует пароль
      {
$password = $_POST['password'];
$password = stripslashes($password);$password = htmlspecialchars($password);$password = trim($password);//удаляем все лишнее
if ($password == '') { exit("Вы не ввели пароль");} //если пароль не введен, то выдаем ошибку

if (strlen($password) < 3 or strlen($password) > 15) {//проверка на количество символов
exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15."); //останавливаем выполнение сценариев
}

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


$result4 = mysql_query("UPDATE users SET password='$password' WHERE login='$old_login'",$db);//обновляем пароль
if ($result4=='TRUE') {//если верно, то обновляем его в сессии
$_SESSION['password'] = $password;

if (isset($_COOKIE['password'])) {
setcookie("password",$_POST['password'], time()+9999999);//Обновляем пароль в куках, если они есть
}


echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваш пароль изменен! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}//отправляем обратно на его страницу

      } 



////////////////////////
////////ИЗМЕНЕНИЕ АВАТАРЫ
////////////////////////

else if (isset($_FILES['fupload']['name'])) //отправлялась ли переменная
      {

if (empty($_FILES['fupload']['name']))
{
//если переменная пустая (пользователь не отправил изображение),то присваиваем ему заранее приготовленную картинку с надписью "нет аватара"
$avatar = "avatars/net-avatara.jpg"; //можете нарисовать net-avatara.jpg или взять в исходниках
$result7 = mysql_query("SELECT avatar FROM users WHERE login='$old_login'",$db);//извлекаем текущий аватар
$myrow7 = mysql_fetch_array($result7);
if ($myrow7['avatar'] == $ava) {//если аватар был стандартный, то не удаляем его, ведь у на одна картинка на всех.
$ava = 1;
}
else {unlink ($myrow7['avatar']);}//если аватар был свой, то удаляем его, затем поставим стандарт
}

else 
{
//иначе - загружаем изображение пользователя для обновления
$path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия

	
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))//проверка формата исходного изображения
	 {	
	 	 	
		$filename = $_FILES['fupload']['name'];
		$source = $_FILES['fupload']['tmp_name'];	
		$target = $path_to_90_directory . $filename;
		move_uploaded_file($source, $target);//загрузка оригинала в папку $path_to_90_directory

	if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
	$im = imagecreatefromgif($path_to_90_directory.$filename) ; //если оригинал был в формате gif, то создаем изображение в этом же формате. Необходимо для последующего сжатия
	}
	if(preg_match('/[.](PNG)|(png)$/', $filename)) {
	$im = imagecreatefrompng($path_to_90_directory.$filename) ;//если оригинал был в формате png, то создаем изображение в этом же формате. Необходимо для последующего сжатия
	}
	
	if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
		$im = imagecreatefromjpeg($path_to_90_directory.$filename); //если оригинал был в формате jpg, то создаем изображение в этом же формате. Необходимо для последующего сжатия
	}
	
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ И ЕГО ПОСЛЕДУЮЩЕЕ СЖАТИЕ ВЗЯТО С САЙТА www.codenet.ru

// Создание квадрата 90x90
// dest - результирующее изображение 
// w - ширина изображения 
// ratio - коэффициент пропорциональности 

$w = 90;  // квадратная 90x90. Можно поставить и другой размер.

// создаём исходное изображение на основе 
// исходного файла и определяем его размеры 
$w_src = imagesx($im); //вычисляем ширину
$h_src = imagesy($im); //вычисляем высоту изображения

         // создаём пустую квадратную картинку 
         // важно именно truecolor!, иначе будем иметь 8-битный результат 
         $dest = imagecreatetruecolor($w,$w); 

         // вырезаем квадратную серединку по x, если фото горизонтальное 
         if ($w_src>$h_src) 
         imagecopyresampled($dest, $im, 0, 0,
                          round((max($w_src,$h_src)-min($w_src,$h_src))/2),
                          0, $w, $w, min($w_src,$h_src), min($w_src,$h_src)); 

         // вырезаем квадратную верхушку по y, 
         // если фото вертикальное (хотя можно тоже серединку) 
         if ($w_src<$h_src) 
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
                          min($w_src,$h_src), min($w_src,$h_src)); 

         // квадратная картинка масштабируется без вырезок 
         if ($w_src==$h_src) 
         imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src); 
		 

$date=time(); //вычисляем время в настоящий момент.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//сохраняем изображение формата jpg в нужную папку, именем будет текущее время. Сделано, чтобы у аватаров не было одинаковых имен.

//почему именно jpg? Он занимает очень мало места + уничтожается анимирование gif изображения, которое отвлекает пользователя. Не очень приятно читать его комментарий, когда краем глаза замечаешь какое-то движение.

$avatar = $path_to_90_directory.$date.".jpg";//заносим в переменную путь до аватара.

$delfull = $path_to_90_directory.$filename; 
unlink ($delfull);//удаляем оригинал загруженного изображения, он нам больше не нужен. Задачей было - получить миниатюру.

$result7 = mysql_query("SELECT avatar FROM users WHERE login='$old_login'",$db);//извлекаем текущий аватар пользователя
$myrow7 = mysql_fetch_array($result7);

if ($myrow7['avatar'] == $ava) {//если он стандартный, то не удаляем его, ведь у нас одна картинка на всех.
$ava = 1;
}
else {unlink ($myrow7['avatar']);}//если аватар был свой, то удаляем его


}
else 
        {
		//в случае несоответствия формата, выдаем соответствующее сообщение
        exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
		}

}

$result4 = mysql_query("UPDATE users SET avatar='$avatar' WHERE login='$old_login'",$db);//обновляем аватар в базе
if ($result4=='TRUE') {//если верно, то отправляем на личную страничку
echo "<html><head><meta http-equiv='Refresh' content='5; URL=page.php?id=".$_SESSION['id']."'></head><body>Ваша аватарка изменена! Вы будете перемещены через 5 сек. Если не хотите ждать, то <a href='page.php?id=".$_SESSION['id']."'>нажмите сюда.</a></body></html>";}

      } 
?>
9.Установка сервера SA-MP.
Содержимое, samp.php:
PHP:
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();

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' AND activation='1'",$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



?>

<html>
<head>
<title><?php echo $myrow['login']; ?></title>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>

<body id="main_body" >
	<div id="form_container">
						<div class="form_description">
<center><h2>Установка сервера SA-MP</h2></center>
											<p></p>
						</div>		


<?php
print <<<HERE
HERE;
//выше вывели меню

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

print <<<HERE

<center><h3>Установка идет в течении 15 секунд</h3></center>
<center><img src="images/ajax-loader-small.gif" align="center"></center>
<head><meta http-equiv="Refresh" content="15; URL=index.php""></head>


HERE;
//копирование сервера
$old_dir = "install/samp/";
$new_dir = "servers/$login/samp";

mkdir($new_dir,0755);
$dir = opendir($old_dir); 
while($file = readdir($dir)) 
{
    if(is_file($old_dir."/".$file))
    {
    $cont = file_get_contents($old_dir."/".$file);
    file_put_contents($new_dir."/".$file, $cont);
    }
} 

$gamemodes = "install/samp/gamemodes";
$new_gamemodes = "servers/$login/samp/gamemodes";

mkdir($new_gamemodes,0755);
$dir = opendir($gamemodes); 
while($file = readdir($dir)) 
{
    if(is_file($gamemodes."/".$file))
    {
    $cont = file_get_contents($gamemodes."/".$file);
    file_put_contents($new_gamemodes."/".$file, $cont);
    }
} 

$filterscripts = "install/samp/filterscripts";
$new_filterscripts = "servers/$login/samp/filterscripts";

mkdir($new_filterscripts,0755);
$dir = opendir($filterscripts); 
while($file = readdir($dir)) 
{
    if(is_file($filterscripts."/".$file))
    {
    $cont = file_get_contents($filterscripts."/".$file);
    file_put_contents($new_filterscripts."/".$file, $cont);
    }
} 

$scriptfiles = "install/samp/scriptfiles";
$new_scriptfiles = "servers/$login/samp/scriptfiles";

mkdir($new_scriptfiles,0755);
$dir = opendir($scriptfiles); 
while($file = readdir($dir)) 
{
    if(is_file($scriptfiles."/".$file))
    {
    $cont = file_get_contents($scriptfiles."/".$file);
    file_put_contents($new_scriptfiles."/".$file, $cont);
    }
} 

$include = "install/samp/include";
$new_include = "servers/$login/samp/include";

mkdir($new_include,0755);
$dir = opendir($include); 
while($file = readdir($dir)) 
{
    if(is_file($include."/".$file))
    {
    $cont = file_get_contents($include."/".$file);
    file_put_contents($new_include."/".$file, $cont);
    }
} 

$npcmodes = "install/samp/npcmodes";
$new_npcmodes = "servers/$login/samp/npcmodes";

mkdir($new_npcmodes,0755);
$dir = opendir($npcmodes); 
while($file = readdir($dir)) 
{
    if(is_file($npcmodes."/".$file))
    {
    $cont = file_get_contents($npcmodes."/".$file);
    file_put_contents($new_npcmodes."/".$file, $cont);
    }
} 

$plugins = "install/samp/plugins";
$new_plugins = "servers/$login/samp/plugins";

mkdir($new_plugins,0755);
$dir = opendir($plugins); 
while($file = readdir($dir)) 
{
    if(is_file($plugins."/".$file))
    {
    $cont = file_get_contents($plugins."/".$file);
    file_put_contents($plugins."/".$file, $cont);
    }
} 

	mysql_query("UPDATE users SET samp='1' WHERE login='$login'",$db); //ставим значение пользователю
	
}

?>
<img src="images/network2.png" align="right">
<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }

?>
		<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов<br>
		</div>
</body>
</html>
Внимание, для работы samp.php в папке по пути: install/samp - должен находится распакованный SA-MP сервер.

10.Активация - для нового пользователя.
Содержимое, activation.php:
PHP:
<html>
<head>
<title><?php echo $myrow['login']; ?></title>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>
<body id="main_body" >
	<div id="form_container">
						<div class="form_description">
<center><h2>Добро пожаловать!</h2></center>
											<p></p>
						</div>	
<?php
include ("bd.php");// файл bd.php должен быть в той же папке, что и все остальные, если это не так, то просто измените путь 
$result4 = mysql_query ("SELECT avatar FROM users WHERE activation='0' AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 3600");//извлекаем аватарки тех пользователей, которые в течении часа не активировали свой аккаунт. Следовательно их надо удалить из базы, а так же и файлы их аватарок

if (mysql_num_rows($result4) > 0) {
$myrow4 = mysql_fetch_array($result4);	
do
{
//удаляем аватары в цикле, если они не стандартные
if ($myrow4['avatar'] == "avatars/net-avatara.jpg") {$a = "Ничего не делать";}
else {
	unlink ($myrow4['avatar']);//удаляем файл
	}
}
while($myrow4 = mysql_fetch_array($result4));
}
mysql_query ("DELETE FROM users WHERE activation='0' AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 3600");//удаляем пользователей из базы



if (isset($_GET['code'])) {$code =$_GET['code']; } //код подтверждения
else
{ exit("<center>Вы зашли на страницу без кода подтверждения!<br></center><br>");} //если не указали code, то выдаем ошибку

if (isset($_GET['login'])) {$login=$_GET['login']; } //логин,который нужно активировать
else
{ exit("<center>Вы зашли на страницу без логина!</center><br>");} //если не указали логин, то выдаем ошибку

$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db); //извлекаем идентификатор пользователя с данным логином
$myrow = mysql_fetch_array($result); 

$activation = md5($myrow['id']).md5($login);//создаем такой же код подтверждения
if ($activation == $code) {//сравниваем полученный из url и сгенерированный код
	mysql_query("UPDATE users SET activation='1' WHERE login='$login'",$db);//если равны, то активируем пользователя
	//======================================================================
	mkdir("servers/$login", 777); //создаем отдельную папку пользователя
	//создание папок для хранения серверов
	//======================================================================
	mkdir("servers/$login/cs", 777);
	mkdir("servers/$login/css", 777);
	mkdir("servers/$login/dods", 777);
	mkdir("servers/$login/samp", 777);
	mkdir("servers/$login/mta", 777);
	//======================================================================
	echo "<center>Ваши данные были успешно активированы!<br><a href=/index.php><img src='images/auth.png'></center></a><br>";
	}
else {echo "<center>Ошибка! Сбой в работе системы регистрации, пожалуйста, повторите заного.</center><br>";
//если же полученный из url и сгенерированный код не равны, то выдаем ошибку
}

?>
<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }

?>
		<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов<br>

		</div>
</body>
</html>
12.Версия панели и все дела...
Содержимое, version.php:
PHP:
<html>
<head>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>


</head>
<body id="main_body" >
	
	<img id="top" src="images/top.png" alt="">
	<div id="form_container">
	

					<div class="form_description">
					<center>
			<h2>DCP v.0.2</h2>
			<p>Darevox Control Panel</p>
					</center>
		</div>						
			<ul >
			
					<li id="li_1" >
		<label class="description" for="element_1">Версия 0.1 </label>
		<div>
-добавлена система открытия счета;<br>		
-добавлен личный кабинет пользователя;<br>
-добавлена система баланса;<br>
-добавлен обещенный платеж;<br>

		</div> 
		<br>
							<li id="li_1" >
				<label class="description" for="element_1">Версия 0.2 </label>
		<div>
-добавлена страница настроек аккаунта;<br>		
-добавлена система моментальной оплаты WebMoney;<br>
-добалена система моментальной оплаты Яндекс.Деньги;<br>
-добавлено аппаратное ускорение запуска серверов;<br>


		</div> 
		</li>
			
					<li class="buttons">
			    <input type="hidden" name="form_id" value="189019" />
			    
				<input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
		</li>
			</ul>
		</form>	
		<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }
?>
		<a href="http://darevox.ru/">Darevox.ru</a>- хостинг провайдер игровых серверов<br>

		</div>
	</div>
	<img id="bottom" src="images/bottom.png" alt="">
	</body>
</html>
13.Заключение - страница пользователя.
Содержимое, page.php:
PHP:
<?php
// вся процедура работает на сессиях. Именно в ней хранятся данные пользователя, пока он находится на сайте. Очень важно запустить их в самом начале странички!!!
session_start();

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' AND activation='1'",$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>
<script type="text/javascript" src="view.js"></script>
<title>Панель управления</title>
<link rel="stylesheet" type="text/css" href="images/view.css" media="all">
<script type="text/javascript" src="view.js"></script>
</head>
<body>

<body id="main_body" >
	<div id="form_container">
						<div class="form_description">
<center><h2>Личный кабинет "<?php echo $myrow['login']; ?>"</h2></center>
											<p></p>
						</div>		


<?php
print <<<HERE
HERE;
//выше вывели меню

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

print <<<HERE

<center>Баланс: <strong>$myrow[balans] </strong>руб.</center><div id="footer"><a href='balans.php?id=$myrow2[id]'>[пополнить]</a> </div>
<center><a href='samp.php?id=$myrow2[id]'>УСТАНОВИТЬ СЕРВЕР SAMP</a></center>
<br>
<b>УСТАНОВЛЕННЫЕ ИГРЫ:</b>

<br>


HERE;
}

//*********************************************************************************************************
if ($myrow['samp'] == 1) { // если установлен сервер SA-MP

print <<<HERE

<br>
СЕРВЕР SA-MP УСТАНОВЛЕН :) 
<form method="POST" action="">
<input type="submit" value=" Показать картинку" name="On">
</form>
</form>

HERE;
}
//*********************************************************************************************************

if ($myrow['samp'] == 2) { // если сервер SA-MP запущен

print <<<HERE

<br>
СОСТОЯНИЕ СЕРВЕРА:

HERE;
}
//*********************************************************************************************************
?>

<?php // Если сервер включили
$pic="Сервер запущен";
if ($_POST['On'] == true){
mysql_query("UPDATE users SET samp='2' WHERE login='$login'",$db);
echo $pic;
}
?>

<img src="images/network2.png" align="right">
<div id="footer">

		<?
//версия панели - чтение из файла
  $file_array = file("include/vrs.txt");
  if(!$file_array)
  {
    echo("--");
  }
  else
  {
    for($i=0; $i < count($file_array); $i++)
    {

      printf("Darevox Control Panel, версия: %s<br>", $file_array[$i]);
    }
  }

?>
		<a href="http://darevox.ru/">Darevox.ru</a> - хостинг провайдер игровых серверов<br>
		</div>
</body>
</html>
Я личный кабинет не дописал - давайте уже сами :) Там смысл думаю будет понятен.

Теперь концовка! :)
Создаем папку с названием install
В ней папку samp
В папку samp - распаковываем чистый сервер SA-MP
Открываем server.cfg - настраиваем под себя

Создаем папку с названием include
В ней файл vrs.txt
Содержимое файла: 0.2

Чуть не забыл, ещё создайте папку servers.

Итак, смысл работы панели.
Новый пользователь регистрируется, в папке servers создается папка с его логином.
Пользователь входит.
Нажимает установить сервер SA-MP.
Происходит копирование сервера SA-MP из папки install в папку с его логином, в папку samp.

Думаю понятно...допишите её сами, сделайте обьединение с ROBOKASSA и все такое =)
Допишите ещё авто запуск сервера, там замуты с функцией exec();

С вами был q0b3rMAN :db:
Задаем вопросы, отвечу !
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу