Unified Captcha

This commit is contained in:
Ivor Barhansky 2023-08-28 14:23:41 +03:00
parent 294575021a
commit 045803087d
35 changed files with 374 additions and 484 deletions

View File

@ -0,0 +1,81 @@
<?php
namespace Captcha;
class Captcha
{
private int $width;
private int $height;
private string $sum;
public function width(int $width): Captcha
{
$this->width = max($width, 1);
return $this;
}
public function height(int $height): Captcha
{
$this->height = max($height, 1);
return $this;
}
public function newImage()
{
if ($this->width < 1 || $this->height < 1) {
return;
}
$img = imagecreatetruecolor($this->width, $this->height) or die('Cannot create image'); // создаем картинку
imagefill($img, 0, 0, 0x616161); // заполняем фон картинки
$x = -20;
$i = 1;
$sum = "";
$colorRGB = rand(180, 200); //цвет текста
while ($i++ <= 5000) {
imageSetPixel($img, rand(0, 105), rand(0, 24), 0x515151);
}
//рисуем 2 линии
imageLine($img, rand(0, 10), rand(0, 50), rand(95, 105), rand(0, 26), 0x909090);
imageLine($img, rand(0, 10), rand(0, 50), rand(95, 105), rand(0, 26), 0x909090);
//рамка
imageRectangle($img, 0, 0, 105, 24, 0x343434);
$fonts = [
'fonts/FRSCRIPT.ttf',
'fonts/CHILLER.ttf',
'fonts/Bradley Hand ITC.ttf',
'fonts/de_Manu_2_Regular.ttf',
'fonts/Edgar_da_cool_Regular.ttf',
'fonts/Hurryup_Hurryup.ttf',
'fonts/Fh_Script_Regular.ttf',
'fonts/Gabo4_Gabo4.ttf',
'fonts/JAMI_Regular.ttf',
'fonts/Justy1_Regular.ttf',
];
$font = '../' . $fonts[rand(0, sizeof($fonts) - 1)];
$i = 1;
while ($i++ <= 4) { // выводим одну цифру за один проход цикла
imagettftext($img, 15, 0, $x = $x + 25, 20, imagecolorallocate($img, $colorRGB, $colorRGB, $colorRGB), $font, $rnd = mt_rand(0, 9)); // выводим текст поверх картинки
$sum = $sum . $rnd; // Собираем в одну строку все символы на картинке
}
ob_start();
imagepng($img); // выводим готовую картинку в формате PNG
$imgData = ob_get_clean();
imagedestroy($img); // освобождаем память, выделенную для картинки
echo '<img src="data:image/png;base64,' . base64_encode($imgData) . '" alt="captcha">';
$this->sum = $sum;
}
/**
* @return string
*/
public function getSum(): string
{
return $this->sum;
}
}

View File

@ -1197,14 +1197,17 @@ class FightRequest
HTML;
if ($r === self::BATTLE_RAZDEL_CHAOTIC) {
if (!$this->u->info['no_zv_key']): ?>
if (!$this->u->info['no_zv_key']):
$security = new Captcha\Captcha();
?>
<div style="float:left;">
<form method="post" style="margin:0px;padding:0px;"
action="/main.php?zayvka=1&r=<?= $r ?>&rnd=<?= $code ?>"><br>
<img src="/show_reg_img/security2.php?id='<?= time() ?>" width="70" height="20">
<form method="post" style="margin:0px;padding:0px;" action="/main.php?zayvka=1&r=<?= $r ?>&rnd=<?= $code ?>"><br>
<?php $security->width(70)->height(20)->newImage();
$_SESSION['code'] = $security->getSum(); ?>
Код подтверждения: <input style="width:40px;" type="text" name="code21">
<input class="btn" type="submit" value="Принять вызов"><br><?= $zvb ?>
<img src="/show_reg_img/security2.php?id=<?= time() ?>" width="70" height="20">
<?php $security->width(70)->height(20)->newImage();
$_SESSION['code'] = $security->getSum(); ?>
Код подтверждения: <input style="width:40px;" type="text" name="code22">
<input class="btn" style="margin-top:1px;" type="submit" value="Принять вызов">
</form>

View File

@ -2,6 +2,7 @@
/* Главный игровой файл. */
use Captcha\Captcha;
use Core\Config;
use Core\Database;
use Core\Db;
@ -26,33 +27,42 @@ function er($e)
exit($err);
}
function gameexit()
{
setcookie('login', '', 0, '', Config::get('host'));
setcookie('login', '', 0);
setcookie('auth', '', 0);
Db::sql('update users set online = unix_timestamp() - 420 where id = ?', [$u->info['id']]);
exit(Config::get('exit'));
}
Database::init();
define('IP', UserIp::get());
$u = User::start();
if (empty($u->info)) {
exit(Config::get('exit'));
}
$filter = new Filter();
$chat = new Chat();
$userclan = new Clan($u->info);
ini_set('max_execution_time', '120');
if (isset($_GET['showcode'])) {
include_once 'show_reg_img/security.php';
die();
$security = new Captcha();
$security->width(107)->height(26)->newImage();
$_SESSION['code'] = $security->getSum();
exit();
}
if (isset($u->info['joinIP']) && $u->info['joinIP'] == 1 && $u->info['ip'] != IP) {
er('#Пожалуйста авторизируйтесь с главной страницы');
} elseif (isset($_GET['exit'])) {
setcookie('login', '', 0, '', Config::get('host'));
setcookie('login', '', 0);
setcookie('auth', '', 0);
Db::sql('update users set online = unix_timestamp() - 420 where id = ?', [$u->info['id']]);
die(Config::get('exit'));
} elseif (!isset($u->info['id'])) {
er('Возникла проблема с определением id персонажа<br>Авторизируйтесь с главной страницы.');
gameexit();
}
if ($u->info['online'] < time() - 60) {

View File

@ -1,4 +1,4 @@
const sml = new Array("p001", 18, 18, "p002", 15, 15, "p003", 22, 15, "p004", 15, 15, "p005", 20, 20, "p006", 31, 28, "p007", 15, 15,
const sml = ["p001", 18, 18, "p002", 15, 15, "p003", 22, 15, "p004", 15, 15, "p005", 20, 20, "p006", 31, 28, "p007", 15, 15,
"p008", 21, 22, "p009", 28, 24, "p010", 28, 21, "p011", 62, 28, "p012", 15, 21, "p013", 15, 19, "p014", 15, 15, "p015", 16, 16, "p016", 15, 15,
"p017", 21, 15, "p018", 15, 21, "p019", 42, 23, "p020", 26, 25, "p021", 25, 27, "p022", 26, 26, "p023", 26, 27, "p024", 27, 22, "p025", 26, 28,
"p026", 15, 15, "p027", 19, 17, "p028", 15, 18, "p029", 15, 15, "p030", 49, 18, "p031", 37, 15,
@ -17,7 +17,7 @@ const sml = new Array("p001", 18, 18, "p002", 15, 15, "p003", 22, 15, "p004", 15
"p102", 31, 36, "p103", 30, 35, "p104", 32, 32, "p105", 45, 45, "p106", 50, 35, "p107", 45, 41,
"p108", 31, 27, "p109", 44, 30, "p110", 29, 20, "p111", 29, 27, "p112", 29, 20, "p113", 29, 20, "p114", 51, 24,
"p115", 43, 35, "p116", 45, 23, "p117", 36, 24, "p118", 51, 35, "p119", 41, 31, "p120", 29, 29,
"p121", 32, 26, "p122", 40, 25, "p123", 37, 22, "p124", 40, 36, "p125", 38, 33, "p126", 23, 23, "p127", 33, 24, "p128", 30, 20);
"p121", 32, 26, "p122", 40, 25, "p123", 37, 22, "p124", 40, 36, "p125", 38, 33, "p126", 23, 23, "p127", 33, 24, "p128", 30, 20];
let cb_id = 1,
cb_date = {},
@ -105,17 +105,6 @@ function anrenameGo(id, val) {
getUrl('main', `main.php?newanimal&rename=${id}&vvv=${val}`);
}
//Каптча на действия
// 5
function captcha(title, act) {
win.add('captcha', `${title} &nbsp;`, '<center><small>Укажите код с картинки:</small><center><img style="margin-bottom:6px;display:inblock-line;" src="/show_reg_img/security3.php" width="70" height="20"><input style="width:80px; height:18px; margin:5px;" id="captchatext1" class="inpt2" type="text" value=""></center></center>', {
'a1': `captchatext1($(\'#captchatext1\').val(),\'${act}\')`,
'usewin': '$(\'#captchatext1\').focus()',
'd': ''
}, 3, 1, 'min-width:230px;');
}
// 6
function captchatext1(val, act) {
getUrl('main', `${act}&cptch1=${val}`);

View File

@ -463,13 +463,16 @@ if ($zv->error) {
<BR><BR>
<INPUT type="checkbox" name="travma">
Бой без правил <span
style="color: #777; ">(проигравшая сторона получает инвалидность)</span><BR>
style="color: #777; ">(проигравшая сторона получает инвалидность)</span><BR>
<INPUT type="checkbox" name="noatack"> Закрытый поединок <span style="color: #777; ">(бой будет изолирован от нападений)</span><BR>
<INPUT type="checkbox" name="noeff">
Запрет на использование свитков восстановления НР и Маны<BR>
<?php if (!$u->info['no_zv_key']): ?>
<img src="/show_reg_img/security2.php?id=<?= time() ?>" width="70" height="20">
Код подтверждения: <input style="width:40px;" type="text" name="code21">'
<?php if (!$u->info['no_zv_key']):
$security = new Captcha\Captcha();
$security->width(70)->height(20)->newImage();
$_SESSION['code'] = $security->getSum();
?>
Код подтверждения: <input style="width:40px;" type="text" name="code21">
<?php endif; ?>
<INPUT maxLength="40" size="40" name="cmt" placeholder="Комментарий к бою"><BR>
<INPUT class="btn" value="Подать заявку" type="submit" name="open">

View File

@ -1,55 +0,0 @@
<?php
header("Content-type: image/png");
// создаем картинку размером 172X52
$img = imagecreatetruecolor(107, 26) or die('Cannot create image');
$orange = imageColorAllocate($img, 107, 26, 64);
// заполняем фон картинки
imagefill($img, 0, 0, 0x616161);
$x = -20;
$i = 1;
$sum = "";
//цвет текста
$color_RGB = rand(180, 200);
while ($i++ <= 5000) {
imageSetPixel($img, rand(0, 105), rand(0, 24), 0x515151);
}
//рисуем 2 линии
imageLine($img, rand(0, 10), rand(0, 50), rand(95, 105), rand(0, 26), 0x909090);
imageLine($img, rand(0, 10), rand(0, 50), rand(95, 105), rand(0, 26), 0x909090);
//рамка
imageRectangle($img, 0, 0, 105, 24, 0x343434);
$fonts = [
'fonts/FRSCRIPT.ttf',
'fonts/CHILLER.ttf',
'fonts/Bradley Hand ITC.ttf',
'fonts/de_Manu_2_Regular.ttf',
'fonts/Edgar_da_cool_Regular.ttf',
'fonts/Hurryup_Hurryup.ttf',
'fonts/Fh_Script_Regular.ttf',
'fonts/Gabo4_Gabo4.ttf',
'fonts/JAMI_Regular.ttf',
'fonts/Justy1_Regular.ttf',
];
$font = '../' . $fonts[rand(0, sizeof($fonts) - 1)];
// выводим одну цифру за один проход цикла (всего 6 цифр)
$i = 1;
while ($i++ <= 4) {
// выводим текст поверх картинки
imagettftext($img, 15, 0, $x = $x + 25, 20, imagecolorallocate($img, $color_RGB, $color_RGB, $color_RGB), $font, $rnd = mt_rand(0, 9));
// Собираем в одну строку все символы на картинке
$sum = $sum . $rnd;
}
//Не забудьте $sum записать в таблицу как STR1
// выводим готовую картинку в формате PNG
imagepng($img);
// освобождаем память, выделенную для картинки
imagedestroy($img);
// Помещаем защитный код в сессию
$_SESSION['code'] = $sum;

View File

@ -1,48 +0,0 @@
<?php
header("Content-type: image/png");
// создаем картинку размером 172X52
$img = imagecreatetruecolor(70, 20) or die('Cannot create image');
$orange = imageColorAllocate($img, 255, 128, 64);
// заполняем фон картинки
imagefill($img, 0, 0, 0x616161);
$x=0;
$i = 1;
$sum = "";
//цвет текста
$color_RGB = rand(180,200);
while ($i++ <=5000)
{
imageSetPixel($img, rand(0,170), rand(0,50),0x515151);
}
//рисуем 2 линии
imageLine($img, rand(0,10), rand(0,50), rand(110,170), rand(0,50), 0x909090);
imageLine($img, rand(0,10), rand(0,50), rand(110,170), rand(0,50), 0x909090);
//рамка
imageRectangle($img,0,0,170,50,0x343434);
$fonts = array ('fonts/CHILLER.ttf');
$font = '../'.$fonts[rand(0, sizeof($fonts)-1)];
// выводим одну цифру за один проход цикла (всего 6 цифр)
$i = 1;
while ($i++ <= 5)
{
// выводим текст поверх картинки
imagettftext($img, rand(18,18), 0, $x=$x+10, 16+rand(0,4),
imagecolorallocate($img, $color_RGB,$color_RGB,$color_RGB), $font, $rnd = rand(0,9));
// Собираем в одну строку все символы на картинке
$sum = $sum.(string)$rnd;
}
//Не забудьте $sum записать в таблицу как STR1
// выводим готовую картинку в формате PNG
imagepng($img);
// освобождаем память, выделенную для картинки
imagedestroy($img);
// Помещаем защитный код в сессию
$_SESSION['code'] = $sum;
?>

View File

@ -1,48 +0,0 @@
<?php
header("Content-type: image/png");
// создаем картинку размером 172X52
$img = imagecreatetruecolor(70, 20) or die('Cannot create image');
$orange = imageColorAllocate($img, 255, 128, 64);
// заполняем фон картинки
imagefill($img, 0, 0, 0x616161);
$x=0;
$i = 1;
$sum = "";
//цвет текста
$color_RGB = rand(180,200);
while ($i++ <=5000)
{
imageSetPixel($img, rand(0,170), rand(0,50),0x515151);
}
//рисуем 2 линии
imageLine($img, rand(0,10), rand(0,50), rand(110,170), rand(0,50), 0x909090);
imageLine($img, rand(0,10), rand(0,50), rand(110,170), rand(0,50), 0x909090);
//рамка
imageRectangle($img,0,0,170,50,0x343434);
$fonts = array ('fonts/CHILLER.ttf');
$font = '../'.$fonts[rand(0, sizeof($fonts)-1)];
// выводим одну цифру за один проход цикла (всего 6 цифр)
$i = 1;
while ($i++ <= 4)
{
// выводим текст поверх картинки
imagettftext($img, rand(18,18), 0, $x=$x+10, 16+rand(0,4),
imagecolorallocate($img, $color_RGB,$color_RGB,$color_RGB), $font, $rnd = rand(0,9));
// Собираем в одну строку все символы на картинке
$sum = $sum.(string)$rnd;
}
//Не забудьте $sum записать в таблицу как STR1
// выводим готовую картинку в формате PNG
imagepng($img);
// освобождаем память, выделенную для картинки
imagedestroy($img);
// Помещаем защитный код в сессию
$_SESSION['code3'] = $sum;
?>

View File

@ -1,36 +0,0 @@
<?php
Class Captcha{
public $imgDir = 'images'; // директория где хранятся изображения
public $length = '5'; // количество цифр в капче
public function __construct(){
$this->keystring=array();
for($i=0;$i < $this->length;$i++){
$this->keystring[] .= mt_rand(0,9);
}
}
public function draw(){
$img = '';
foreach($this->keystring as $keystring){
$img .= '<img src="'.$this->imgDir.DIRECTORY_SEPARATOR.$keystring.'.gif" border="0">';
}
return $img;
}
public function getKeyString(){
return implode($this->keystring);
}
}
?>

View File

@ -1,11 +0,0 @@
<?php
require "captcha.class.php"; //Подключаем класс капчи
//Инициализируем капчу
$captcha = new Captcha();
$_SESSION['keystring'] = $captcha->getKeyString();
echo $captcha->draw();
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 621 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 B

View File

@ -1,302 +1,304 @@
<?php
<?php
use Captcha\Captcha;
session_start();
//error_reporting(E_ALL);
//ini_set('display_errors', 'On');
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 'Off');
require_once 'validator.php';
require_once '../_incl_data/class/Captcha/Captcha.php';
$validator = new Validator();
$validator->set_error_delimiters('<div class="error">', '</div>');
$security = new Captcha();
//Задаем правила валидации
$rules = array(
array(
'field' => 'user_name',
'label' => 'Ваше ник в игре',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения'
)
),
array(
'field' => 'user_email',
'label' => 'Ваш e-mail адрес связанный с ником',
'rules' => array(
'trim' => '',
'required' => 'Поле %s обязательно для заполнения',
'valid_email' => 'Поле %s должно содержать правильный email-адрес'
)
),
array(
'field' => 'user_url',
'label' => 'URL info персонажа',
'rules' => array(
'trim' => '',
'valid_url' => 'Поле %s должно содержать правильный URL адрес'
)
),
array(
'field' => 'subject',
'label' => 'Тема обращения',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения'
)
),
array(
'field' => 'text',
'label' => 'Суть проблемы/обращения',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения'
)
),
array(
'field' => 'keystring',
'label' => 'Капча',
'rules' => array(
'trim' => '', //Обрезаем пробелы по бокам
'required' => 'Вы не ввели цифры изображенные на картинке',
'valid_captcha[keystring]' => 'Вы ввели не правильный цифры с картинки'
)
)
);
$rules = [
[
'field' => 'user_name',
'label' => 'Ваше ник в игре',
'rules' => [
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения',
],
],
[
'field' => 'user_email',
'label' => 'Ваш e-mail адрес связанный с ником',
'rules' => [
'trim' => '',
'required' => 'Поле %s обязательно для заполнения',
'valid_email' => 'Поле %s должно содержать правильный email-адрес',
],
],
[
'field' => 'user_url',
'label' => 'URL info персонажа',
'rules' => [
'trim' => '',
'valid_url' => 'Поле %s должно содержать правильный URL адрес',
],
],
[
'field' => 'subject',
'label' => 'Тема обращения',
'rules' => [
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения',
],
],
[
'field' => 'text',
'label' => 'Суть проблемы/обращения',
'rules' => [
'trim' => '', //Обрезаем пробелы по бокам
'strip_tags' => '', // Удаляем HTML и PHP теги
'required' => 'Поле %s обязательно для заполнения',
],
],
[
'field' => 'keystring',
'label' => 'Капча',
'rules' => [
'trim' => '', //Обрезаем пробелы по бокам
'required' => 'Вы не ввели цифры изображенные на картинке',
'valid_captcha[keystring]' => 'Вы ввели не правильный цифры с картинки',
],
],
];
//Устанавливаем правила валидации
$validator->set_rules($rules);
$message = '';
//Запускаем валидацию POST данных
if($validator->run()){
//Здесь впишите свой e-mail адрес
//на негу будут приходить уведомления с формы
$to = 'support@new-combats.com';
$from = "=?UTF-8?b?" . base64_encode($validator->postdata('user_name')) . "?=";
$subject = "=?UTF-8?b?" . base64_encode( $validator->postdata('subject') ) . "?=";
$mail_body = "Поступил новый ответ от формы обратной связи.\r\nАвтор оставил такие данные:\r\n";
//Формируем текст сообщения
foreach($rules as $rule){
if($rule['field'] == 'keystring') continue;
$mail_body .= $rule['label'].': '.$validator->postdata($rule['field'])."\r\n";
}
$header = "MIME-Version: 1.0\n";
$header .= "Content-Type: text/plain; charset=UTF-8\n";
$header .= "From: ". $from . " <" . $validator->postdata('user_email'). ">";
if ($validator->run()) {
//Здесь впишите свой e-mail адрес
//на негу будут приходить уведомления с формы
$to = 'support@new-combats.com';
$from = "=?UTF-8?b?" . base64_encode($validator->postdata('user_name')) . "?=";
$subject = "=?UTF-8?b?" . base64_encode($validator->postdata('subject')) . "?=";
$mail_body = "Поступил новый ответ от формы обратной связи.\r\nАвтор оставил такие данные:\r\n";
//Формируем текст сообщения
foreach ($rules as $rule) {
if ($rule['field'] == 'keystring') {
continue;
}
$mail_body .= $rule['label'] . ': ' . $validator->postdata($rule['field']) . "\r\n";
}
$header = "MIME-Version: 1.0\n";
$header .= "Content-Type: text/plain; charset=UTF-8\n";
$header .= "From: " . $from . " <" . $validator->postdata('user_email') . ">";
//Отправка сообщения
if (mail($to, $subject, $mail_body, $header)) {
$message = '<div class="error">Ваше сообщение успешно отправлено!</div>';
//Очищаем форму обратной связи
$validator->reset_postdata();
} else {
$message = '<div class="error">Ваше сообщение не отправлено!</div>';
}
} else {
//Отправка сообщения
if(mail($to, $subject, $mail_body, $header)){
$message = '<div class="error">Ваше сообщение успешно отправлено!</div>';
//Очищаем форму обратной связи
$validator->reset_postdata();
}
else{
$message = '<div class="error">Ваше сообщение не отправлено!</div>';
}
}
else{
//Получаем сообщения об ошибках в виде строки
$message = $validator->get_string_errors();
$message = $validator->get_string_errors();
//Получаем сообщения об ошибках в виде массива
$errors = $validator->get_array_errors();
$errors = $validator->get_array_errors();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<html lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Форма обратной связи с Администрацией проекта «Бойцовский клуб» </title> <meta name="description" content="Здесь Вы можете обратиться к Администрации Бойцовского клуба, с просьбой решения технического характера ⭐ связанной с нашей игрой"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Форма обратной связи с Администрацией проекта «Бойцовский клуб» </title>
<meta name="description" content="Здесь Вы можете обратиться к Администрации Бойцовского клуба, с просьбой решения технического характера ⭐ связанной с нашей игрой"/>
<style type="text/css">
<!--
body {
font: 100% Verdana, Arial, Helvetica, sans-serif;
background: #666666;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
.oneColFixCtrHdr #container {
width: 780px;
background: #FFFFFF;
margin: 15px auto;
border: 1px solid #000000;
text-align: left;
}
.oneColFixCtrHdr #mainContent {
padding: 0 20px;
background: #FFFFFF;
position: relative;
}
.oneColFixCtrHdr #footer {
padding: 0 10px;
background:#DDDDDD;
}
.oneColFixCtrHdr #footer p {
margin: 0;
padding: 10px 0;
}
<style type="text/css">
<!--
body {
font: 100% Verdana, Arial, Helvetica, sans-serif;
background: #666666;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
.oneColFixCtrHdr #container {
width: 780px;
background: #FFFFFF;
margin: 15px auto;
border: 1px solid #000000;
text-align: left;
}
.oneColFixCtrHdr #mainContent {
padding: 0 20px;
background: #FFFFFF;
position: relative;
}
.oneColFixCtrHdr #footer {
padding: 0 10px;
background: #DDDDDD;
}
.oneColFixCtrHdr #footer p {
margin: 0;
padding: 10px 0;
}
form.form{
width: 600px;
margin: 0 auto;
}
form.form {
width: 600px;
margin: 0 auto;
}
form.form div {
padding:4px;
margin: 4px 0;
position:relative;
}
form.form div {
padding: 4px;
margin: 4px 0;
position: relative;
}
form.form input.text,
.textarea {
padding:5px 10px;
height:20px;
border:1px solid #ddd;
color:#333;
background:url(images/bginput.jpg) repeat-x bottom #fff;
position:relative;
z-index:2;
font-size: 16px;
}
form.form input.text,
.textarea {
padding: 5px 10px;
height: 20px;
border: 1px solid #ddd;
color: #333;
position: relative;
z-index: 2;
font-size: 16px;
}
form.form input.text {
width:290px;
}
form.form input.text {
width: 290px;
}
form.form .textarea {
height:150px;
width:290px;
}
form.form .textarea {
height: 150px;
width: 290px;
}
form.form label {
float:left;
width:120px;
text-align:right;
margin-right:15px;
font-weight:bold;
color:#666;
font-size: 13px;
}
form.form label {
float: left;
width: 120px;
text-align: right;
margin-right: 15px;
font-weight: bold;
color: #666;
font-size: 13px;
}
form.form .btn {
display:block;
height:31px;
padding:0 10px;
background:url(images/bgbtn.jpg) repeat-x;
color:#565e62;
font-weight:bold;
font-size:12px;
border:1px solid #e1e0df;
outline:none;
cursor: pointer;
}
form.form .btn {
display: block;
height: 31px;
padding: 0 10px;
color: #565e62;
font-weight: bold;
font-size: 12px;
border: 1px solid #e1e0df;
outline: none;
cursor: pointer;
}
/* CSS3 */
form.form .btn,
form.form .text,
form.form .textarea {
-moz-border-radius:8px;
-webkit-border-radius:8px;
border-radius:8px;
}
/* CSS3 */
form.form .btn,
form.form .text,
form.form .textarea {
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border-radius: 8px;
}
div.error_field{
background: #FEDAFB;
border: 1px solid #FA74F0;
}
div.error_field {
background: #FEDAFB;
border: 1px solid #FA74F0;
}
div.errors{
width: 580px;
margin: 15px auto;
padding: 10px;
border: 1px solid #ccc;
background: #FDFEC2;
}
div.errors {
width: 580px;
margin: 15px auto;
padding: 10px;
border: 1px solid #ccc;
background: #FDFEC2;
}
div.errors .error{
color: red;
font-weight: bold;
font-size: 12px;
margin: 5px;
}
div.errors .error {
color: red;
font-weight: bold;
font-size: 12px;
margin: 5px;
}
-->
</style>
-->
</style>
</head>
<body class="oneColFixCtrHdr">
<div id="container"> <p><align="center"><strong>Заполните контактную форму и мы свяжемся с вами в ближайшее время, чтобы сообщить об устранении неисправностей.</strong></p>
<div id="mainContent">
<div id="container">
<?=(!empty($message))? '<div class="errors">'.$message.'</div>': ''?>
<form action="" method="post" class="form">
<div <?=(!empty($errors['user_name']))? 'class="error_field"': '';?>>
<label>Ваш ник в игре:</label>
<input type="text" class = "text" name="user_name" value="<?=$validator->postdata('user_name');?>" />
</div>
<div <?=(!empty($errors['user_email']))? 'class="error_field"': '';?>>
<label>Ваш e-mail адрес:</label>
<input type="text" class = "text" name="user_email" value="<?=$validator->postdata('user_email');?>" />
</div>
<div <?=(!empty($errors['user_url']))? 'class="error_field"': '';?>>
<label>URL Info персонажа:</label>
<input type="text" class = "text" name="user_url" value="<?=$validator->postdata('user_url');?>" />
</div>
<div <?=(!empty($errors['subject']))? 'class="error_field"': '';?>>
<label>Тема обращения:</label>
<input type="text" class = "text" name="subject" value="<?=$validator->postdata('subject');?>"/>
</div>
<div class="area<?=(!empty($errors['text']))? ' error_field': '';?>">
<label>Суть обращения:</label>
<textarea cols="40" class = "textarea" rows="5" name="text"><?=$validator->postdata('text');?></textarea>
</div>
<div <?=(!empty($errors['keystring']))? 'class="error_field"': '';?>>
<label class="captcha">Введите цифры изображенные на картинке:</label>
<div class="capth_images"><?php require 'captcha.php';?></div>
<input type="text" class = "text" name="keystring" value=""/>
</div>
<div id="mainContent">
<p style="font-weight: bold;">Заполните контактную форму и мы свяжемся с вами в ближайшее время, чтобы сообщить об устранении неисправностей.</p>
<?= (!empty($message)) ? '<div class="errors">' . $message . '</div>' : '' ?>
<form action="" method="post" class="form">
<div <?= (!empty($errors['user_name'])) ? 'class="error_field"' : ''; ?>>
<label>Ваш ник в игре:</label>
<input type="text" class="text" name="user_name" value="<?= $validator->postdata('user_name'); ?>"/>
</div>
<div <?= (!empty($errors['user_email'])) ? 'class="error_field"' : ''; ?>>
<label>Ваш e-mail адрес:</label>
<input type="text" class="text" name="user_email" value="<?= $validator->postdata('user_email'); ?>"/>
</div>
<div <?= (!empty($errors['user_url'])) ? 'class="error_field"' : ''; ?>>
<label>URL Info персонажа:</label>
<input type="text" class="text" name="user_url" value="<?= $validator->postdata('user_url'); ?>"/>
</div>
<div <?= (!empty($errors['subject'])) ? 'class="error_field"' : ''; ?>>
<label>Тема обращения:</label>
<input type="text" class="text" name="subject" value="<?= $validator->postdata('subject'); ?>"/>
</div>
<div class="area<?= (!empty($errors['text'])) ? ' error_field' : ''; ?>">
<label>Суть обращения:</label>
<textarea cols="40" class="textarea" rows="5" name="text"><?= $validator->postdata('text'); ?></textarea>
</div>
<div <?= (!empty($errors['keystring'])) ? 'class="error_field"' : ''; ?>>
<label class="captcha">Введите цифры изображенные на картинке:</label>
<div class="capth_images">
<?php $security->width(100)->height(30)->newImage();
$_SESSION['keystring'] = $security->getSum(); ?>
</div>
<input type="text" class="text" name="keystring" value=""/>
</div>
<div>
<label>&nbsp;</label>
<input type="submit" class="btn" value="Отправить сообщение"/>
</div>
</form>
<div>
<label>&nbsp;</label>
<input type="submit" class="btn" value="Отправить сообщение" />
</div>
</form>
</div>
</div>
</body>