Пытаюсь прикрутить регистрацию на сайт (PHP+MYSQL).
Исходники скачал в Интернете, все сделал по инструкции.
Тестирую. Если ввожу логин латиницей, все работает нормально, приходит письмо с подтверждением регистрации, проходит активация.
Если логин ввожу кириллицей, постоянно выдает ошибку - ваш логин должен состоять минимум из 3-х символов.
Подсказали, что проблема с кодировкой. У меня кодировка сайта - win 1251.
Пробовал решить проблему: вставлял в исходники <meta charset="UTF-8">, изменял кодировку самих файлов регистрации (UTF-8 w/o BOM) через notepad++, пробовал прописать iconv.. Уже несколько дней потратил, но все равно где-то вылазит ошибка.
Вопрос: может мне кто-то помочь переделать исходники. Может за деньги договоримся. Очень нужно..
reg.php
<html>
<head>
<title>Регистрация</title>
</head>
<body>
<h2>Регистрация</h2>
<form action="save_user.php" method="post" enctype="multipart/form-data">
<p>
<label>Ваш логин *:<br></label>
<input name="login" type="text" size="15" maxlength="15">
</p>
<p>
<label>Ваш пароль *:<br></label>
<input name="password" type="password" size="15" maxlength="15">
</p>
<p>
<label>Ваш E-mail *:<br></label>
<input name="email" type="text" size="15" maxlength="100">
</p>
<p>
<label>Выберите аватар. Изображение должно быть формата jpg, gif или png:<br></label>
<input type="FILE" name="fupload">
</p>
<p>Введите код с картинки *:<br>
<p><img src="code/my_codegen.php"></p>
<p><input type="text" name="code"></p>
<p>
<input type="submit" name="submit" value="Зарегистрироваться">
</p></form>
Звездочками (*) обозначены поля, обязательные для заполнения.
</body>
</html>
save_user.php
<?php
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
if (isset($_POST['code'])) { $code = $_POST['code']; if ($code == '') { unset($code);} }
if (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} }
if (empty($login) or empty($password)or empty($code) or empty($email))
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{exit ("Неверно введен е-mail!");}
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));
$str = strrev($str);
$str = substr($str, 3, 6);
$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 ("Вы ввели неверно код с картинки.");
}
//если логин и пароль введены,то обрабатываем их
$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 ("Логин должен состоять не менее чем из 3 символов и не более чем из 15.");
}
if (strlen($password) < 3 or strlen($password) > 15) {
exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 15.");
}
if (empty($_FILES['fupload']['name']))
{
$avatar = "avatars/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);
if(preg_match('/[.](GIF)|(gif)$/', $filename)) {
$im = imagecreatefromgif($path_to_90_directory.$filename) ;
}
if(preg_match('/[.](PNG)|(png)$/', $filename)) {
$im = imagecreatefrompng($path_to_90_directory.$filename) ;
}
if(preg_match('/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/', $filename)) {
$im = imagecreatefromjpeg($path_to_90_directory.$filename);
}
//СОЗДАНИЕ КВАДРАТНОГО ИЗОБРАЖЕНИЯ
// Создание квадрата 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");
$avatar = $path_to_90_directory.$date.".jpg";
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);
}
else
{
exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
}
}
$password = md5($password);
$password = strrev($password);
$password = $password."b3p6f";
// подключаемся к базе
include ("bd.php");
// проверка на существование пользователя с таким же логином
$result = mysql_query("SELECT id FROM users WHERE login='$login'",$db);
$myrow = mysql_fetch_array($result);
if (!empty($myrow['id'])) {
exit ("Извините, введённый вами логин уже зарегистрирован. Введите другой логин.");
}
// если такого нет, то сохраняем данные
$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);
$subject = "Подтверждение регистрации";
$message = "Здравствуйте! Спасибо за регистрацию на citename.ru\nВаш логин: ".$login."\n
Перейдите по ссылке, чтобы активировать ваш аккаунт:\nhttp://site/test3/activation.php?login=".$login."&code=".$activation."\nС уважением,\n
Администрация сайта";//содержание сообщение
mail($email, $subject, $message, "Content-type:text/plane; Charset=windows-1251\r\n");
echo "Вам на E-mail выслано письмо с cсылкой, для подтверждения регистрации. Внимание! Ссылка действительна 1 час. <a href='index.php'>Главная страница</a>";
}
else {
exit ("Ошибка! Вы не зарегистрированы.");
}
?>
activation.php
<?php
header('Content-Type: text/html; charset=UTF-8');
include ("../blocks/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("Вы зашил на страницу без кода подтверждения!");}
if (isset($_GET['login'])) {$login=$_GET['login']; }
else
{ exit("Вы зашил на страницу без логина!");}
$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) {
mysql_query("UPDATE users SET activation='1' WHERE login='$login'",$db);
echo "Ваш Е-мейл подтвержден! Теперь вы можете зайти на сайт под своим логином! <a href='index.php'>Главная страница</a>";
}
else {echo "Ошибка! Ваш Е-мейл не подтвержден! <a href='index.php'>Главная страница</a>";
}
?>