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 в виде something@server.com"); } 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 в виде something@server.com"); } 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 " "; ?>