|
|
|
| forum/skel/register.php
Ошибка при регистрации нового посетителя
Error: You have an error in your SQL syntax near ' '', 'no', '', '', '' at line 4
<?php
///////////////////////////////////////////////////
// Web-приложение форум - LiteForum
// Поддержка http://www.softtime.ru/forum/
// 2003-2005 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
// Голышев С.В. (softtime@softtime.ru)
// Кузнецов М.В. (kuznetsov@softtime.ru)
///////////////////////////////////////////////////
// 01.02.2005 Симдянов И.В. (simdyanov@softtime.ru)
// устранение уязвимостей SQL-инъекции
// 28.08.2005 Симдянов И.В. (simdyanov@softtime.ru)
// разделение времени последнего посещения
// на форумах
// 01.09.2005 Симдянов И.В. (simdyanov@softtime.ru)
// ограничение имени 20 символами
// 17.09.2005 Симдянов И.В. (simdyanov@softtime.ru)
// Устранена ошибка когда не вводился
// e-mail, но отмечалась галка подписки
///////////////////////////////////////////////////
// Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
Error_Reporting(E_ALL & ~E_NOTICE);
// Подавляем кэширование
header("Expires: Mon, 23 May 1995 02:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
// Устанавливаем соединение с базой данных
require_once("config.php");
// Подключаем библиотеку форума
require_once("../utils/utils.php");
// Извлекаем настройки форума
$set = mysql_query("SELECT * from settings");
if($set) $settings = mysql_fetch_array($set);
else puterror("Ошибка при обращении к списку настроек форума");
///////////////////////////////////////////////////////////
// Блок подготовки и проверки
///////////////////////////////////////////////////////////
// Получаем данные отправленные методом POST
$author = trim($_POST['author']);
$pswrd = $_POST['pswrd'];
$pswrd_again = $_POST['pswrd_again'];
$email = trim($_POST['email']);
$icq = trim($_POST['icq']);
$url = trim($_POST['url']);
$about = trim($_POST['about']);
$subscribe = $_POST['subscribe'];
$id_forum = trim($_POST['id_forum']);
// Подготавливаем переменные для добавления в SQL-запрос, экранируя
// все спецсимволы при помощи функции mysql_escape_string();
$author = str_replace("'","'",$author);
$pswrd = str_replace("'","'",$pswrd);
$pswrd_again = str_replace("'","'",$pswrd_again);
$about = str_replace("'","'",$about);
$url = str_replace("'","'",$url);
$message = str_replace("'","'",$message);
$subscribe = str_replace("'","'",$subscribe);
if (!get_magic_quotes_gpc())
{
$author = mysql_escape_string($author);
$pswrd = mysql_escape_string($pswrd);
$pswrd_again = mysql_escape_string($pswrd_again);
$about = mysql_escape_string($about);
$message = mysql_escape_string($message);
$url = mysql_escape_string($url);
$subscribe = mysql_escape_string($subscribe);
}
// Проверяем правильность ввода данных
if(empty($author)) links_forum($id_forum,"Не указано имя");
if(strlen($author) > 20) links_forum($id_forum,"Слишком длинное имя");
if(empty($pswrd) || empty($pswrd_again) || $pswrd != $pswrd_again) links_forum($id_forum,"Ошибка в паролях");
if($settings['user_email_required'] == 'yes')
{
if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$/i", $email)) links_forum($id_forum,"Введите e-mail в виде <i>something@server.com</i>");
}
else if(!empty($email))
{
if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$/i", $email)) links_forum($id_forum,"Введите e-mail в виде <i>something@server.com</i>");
}
if(!empty($icq))
{
if(!preg_match("|^[\d]+$|",$icq)) links_forum($id_forum,"Введите номер ICQ в виде");
}
// Проверяем нужно ли отправлять письмо автору при добавлении
// новой темы
if(!empty($email))
{
if($subscribe == "on") $subscribe = 'yes';
else $subscribe = 'no';
} else $subscribe = 'no';
///////////////////////////////////////////////////////////
// Блок проверки регистрации имени
///////////////////////////////////////////////////////////
// Выясняем не зарегистрировано ли уже это имя
// Возможно три ситуации, которые необходимо предотвратить:
// 1. Вводится ник, полностью совпадающий с уже существующим
// 2. Вводится уже существующий кирилический ник, в котором
// одна или несколько букв заменены на латинские
// 3. Вводится уже существующий латинский ник, в котором
// одна или несколько букв заменениы на кирилические
// Массив кирилических букв
$rus = array("А","а","В","Е","е","К","М","Н","О","о","Р","р","С","с","Т","Х","х");
// Массив латинских букв
$eng = array("A","a","B","E","e","K","M","H","O","o","P","p","C","c","T","X","x");
// Заменяем русские буквы латинскими
$eng_author = str_replace($rus, $eng, $author);
// Заменяем латинские буквы русскими
$rus_author = str_replace($eng, $rus, $author);
// Формируем SQL-запрос
$query = "SELECT * FROM authors
WHERE name LIKE '$author' OR
name LIKE '$eng_author' OR
name LIKE '$rus_author'";
$ath = mysql_query($query);
if($ath)
{
if(mysql_num_rows($ath)>0)
links_forum($id_forum, "К сожалению, данное имя уже зарегистрировано. Поробуйте другое.");
} else puterror("Ошибка при регистрации нового посетителя");
// Выясняем, не создаётся ли новое имя для дискредитации
///////////////////////////////////////////////////////////
// Блок загрузки файла на сервер
///////////////////////////////////////////////////////////
$url_photo = "";
// Если поле выбора фотографии не пустое,
// закачиваем её на сервер и переименовываем
if (!empty($_FILES['photo']['tmp_name']) && $_FILES['photo']['tmp_name'] != "-")
{
// Проверяем не больше ли файл 512 Кб
if($_FILES['photo']['size'] > $settings['size_photo'])
links($id_forum,
$id_theme,
"Слишком большая фотография (более 512 Kb)");
// Извлекаем из имени файла расширение
$ext = strrchr($_FILES['photo']['name'], ".");
// Разрешаем загружать файлы только определённого форматм
$extentions = array(".jpg",".gif");
// Формируем путь к файлу
if(in_array($ext, $extentions))
{
$path="photo/".date("YmdHis",time()).$ext;
// Перемещаем файл из временной директории сервера в
// директорию /photo Web-приложения
if (copy($_FILES['photo']['tmp_name'], $path))
{
// Уничтожаем файл во временной директории
unlink($_FILES['photo']['tmp_name']);
// Изменяем права доступа к файлу
chmod($path, 0644);
$url_photo = $path;
}
}
}
///////////////////////////////////////////////////////////
// Блок формирования и выполнения SQL-запроса
///////////////////////////////////////////////////////////
// Если необходимо, чтобы пользователь был авторизован
// уже зарегистрированным участником, присваиваем при регистрации
// ему статус "wait"
if($settings['confirm_registration'] == 'yes')
{
$status = "wait";
// Извлекаем имя автора и его e-mail для
// подтверждения регистрации
$confirm_author = $_POST['confirm_author'];
if(!preg_match("|^[\d]+$|",$confirm_author)) puterror("Ошибка во время регистрации1");
$query = "SELECT * FROM authors
WHERE id_author = $confirm_author AND
statususer != 'wait'";
$ath = mysql_query($query);
if(!$ath) puterror("Ошибка во время регистрации");
if(mysql_num_rows($ath) < 1) puterror("Ошибка во время регистрации");
$confirm_author = mysql_fetch_array($ath);
$thm = "Просьба подтвердить регистрацию нового участиника форума ".$settings['name_forum'];
$path = substr($_SERVER['PHP_SELF'], 0, strlen($_SERVER['PHP_SELF']) - 12);
$msg = "Если вам знаком новый участник форума $author, пожалуйста подтвердите его регистрацию по ссылке http://".$_SERVER['SERVER_NAME'].$path."confirm.php?id_confirm=".$confirm_author['id_author']."&author=".urlencode($author).". Если вы в первый раз слышите о таком участнике, просто удалите это письмо.";
// Изменяем кодировку
$thm = convert_cyr_string(stripslashes($thm),'w','k');
$msg = convert_cyr_string(stripslashes($msg),'w','k');
$pre = convert_cyr_string(stripslashes($author),'w','k');
$header = "Content-Type: text/html; charset=KOI8-R\r\n";
$header .= "From: $pre <$email>\r\n\r\n";
// Если на странице администрирования указан
// адрес отсылки сообщения - отправляем письмо
mail($confirm_author['email'], $thm, $msg, $header);
}
else
{
$status = "";
}
// Формируем запрос SQL-оператор INSERT для
// добавления нового зарегистрированного посетителя
$query_author = "INSERT INTO authors VALUES(
NULL,
'$author',
".get_password($pswrd).",
'$email',
'$subscribe',
'$url',
'$icq',
'$about',
'$url_photo',
NOW(),
NOW(),
0,
'$status')";
if(!mysql_query($query_author)) puterror("Ошибка при регистрации нового посетителя");
$query = "SELECT * FROM last_time LIMIT 1";
$lst = mysql_query($query);
if(!$lst) puterror("Ошибка при извлечении списка форумов");
$num = mysql_num_fields($lst);
$num = $num - 1;
for($i = 0; $i<$num; $i++)
{
$arr[] = 'NOW()';
}
$query_last_time = "INSERT INTO last_time VALUES(".mysql_insert_id().",";
$query_last_time .= implode(',',$arr).")";
if(!mysql_query($query_last_time)) puterror("Ошибка при регистрации нового посетителя");
// Осуществляем автоматический "вход" на форум
setallcookie($author, $pswrd);
// Обновляем дату последнего вхождения
settime($author,false,$id_forum);
// Осуществляем автоматический переход на главную страницу форума
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php?id_forum=$id_forum'>
</HEAD></HTML>";
?>
|
| |
|
|
|
|
|
|
|
для: Lewwel
(02.04.2006 в 08:44)
| | по пробуй заюзать! | |
|
|
|
|
|
|
|
для: Lewwel
(02.04.2006 в 08:44)
| | Если вам не сложно, поместите перед блоком
<?php
$query_author = "INSERT INTO authors VALUES(
NULL,
'$author',
".get_password($pswrd).",
'$email',
'$subscribe',
'$url',
'$icq',
'$about',
'$url_photo',
NOW(),
NOW(),
0,
'$status')";
?>
|
вывод
<?php
echo get_password($pswrd);
?>
|
что он выводит? | |
|
|
|
|