[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Русский текст в форме
юрьич
Здравствуйте.Вот мой обработчик. (save_user.php) Нигде не вижу запрет на русский (или англ.)шрифт.Но регистрация с русским логином не проходит.Т.е. данные заносятся в БД,идёт перенаправление на страницу авторизации и на получении ссылки.Но при вводе ссылки пишет,что imail не подтверждён.Данная ошибка прописана в файле activation.php.
Подскажите что нибудь,pleass.

save_user.php

<?php


//заносим введенный пользователем текст в переменную $x, если он пустой, то уничтожаем переменную
$sees = (isset($_POST['sees'])) ? $_POST['sees'] : ''; // если переменная $_POST['sees'] задана, то используем её. Если не задана, то присваиваем пустую строку
$teep_pc = (isset($_POST['teep_pc'])) ? $_POST['teep_pc'] : '';
$mather = (isset($_POST['mather'])) ? $_POST['mather'] : '';
$hd = (isset($_POST['hd'])) ? $_POST['hd'] : '';
$member = (isset($_POST['member'])) ? $_POST['member'] : '';
$block = (isset($_POST['block'])) ? $_POST['block'] : '';
$disp = (isset($_POST['disp'])) ? $_POST['disp'] : '';
$proces = (isset($_POST['proces'])) ? $_POST['proces'] : '';
$vidio = (isset($_POST['vidio'])) ? $_POST['vidio'] : '';

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 (isset($_POST['email'])) { $email = $_POST['email']; if ($email == '') { unset($email);} } //заносим введенный пользователем e-mail, если он пустой, то уничтожаем переменную


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)) //проверка е-mail адреса регулярными выражениями на корректность
{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)); //дважды шифруем в 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 ("Вы ввели неверно код с картинки."); //останавливаем выполнение сценариев
}


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

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


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


//если текст о пк введен,то обрабатываем его, чтобы теги и скрипты не работали, мало ли что люди могут ввести







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

//добавляем проверку на длину логина и пароля

if (strlen($login) < 6 or strlen($login) > 15) {

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

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

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

}

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

}

// если такого нет, то сохраняем данные
$result2 = mysql_query ("INSERT INTO users (login,password,avatar,email,teep_pc,sees,hd,member,block,disp,mather,proces,vidio,date)
VALUES('
$login','$password','$avatar','$email','$teep_pc','$sees','$hd','$member','$block','$disp','$mather','$proces','$vidio',NOW())")or die(mysql_error());// Проверяем, есть ли ошибки
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://nikita/reg/activation.php?login=".$login."&code=".$activation."\nС уважением,\n
Администрация citename.ru";//содержание сообщение
mail($email, $subject, $message, "Content-type:text/plane; Charset=utf-8\r\n");//отправляем сообщение

echo "Вам на E-mail выслано письмо с cсылкой, для подтверждения регистрации. Внимание! Ссылка действительна 1 час. <a href='index.php'>Главная страница</a>"; //говорим о отправленном письме пользователю
}
else {

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

}

?>



activation.php

<?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("Вы зашил на страницу без кода подтверждения!");} //если не указали code, то выдаем ошибку

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) {//сравниваем полученный из url и сгенерированный код
mysql_query("UPDATE users SET activation='1' WHERE login='$login'",$db);//если равны, то активируем пользователя
echo "Ваш Е-мейл подтвержден! Теперь вы можете зайти на сайт под своим логином! <a href='index.php'>Главная страница</a>";
}
else {echo "Ошибка! Ваш Е-мейл не подтвержден! <a href='index.php'>Главная страница</a>";
//если же полученный из url и сгенерированный код не равны, то выдаем ошибку
}

?>




Спустя 5 минут, 43 секунды (12.09.2012 - 13:18) inpost написал(а):
Проверяй вручную. Пиши echo $login; exit(); Смотри, доходит ли до запроса в mysql, далее в pma проверь, запись прошла ли успешно. Если да, то посмотри внешний вид логина. Возможно там пробел поставил в начале или в конце.

Спустя 49 минут, 58 секунд (12.09.2012 - 14:08) юрьич написал(а):
Везде всё есть.Вставлял $login; exit(); куда только можно.На всех страницах отображается.С пробелами не совсем понял.Но не суть,пробелов нет нигде.
Наверное придётся другой обработчик ставить.Этот постоянно косячит.Хотя вероятнее,что дело во мне.

Спустя 27 минут, 56 секунд (12.09.2012 - 14:36) inpost написал(а):
На странице подтверждения выведи переменные:
$myrow['id'];
$login;
$activation;
$code;

И посмотри их значение. Проверь в БД, что ТАКОЙ ЛОГИН ТОЛЬКО ОДИН!!!

Спустя 20 минут, 57 секунд (12.09.2012 - 14:57) юрьич написал(а):
Выдало:
d41d8cd98f00b204e9800998ecf8427e1095b7da3eb36e026191b67
aadb9231e45c48cce2e2d7fbdea1afc51c7c6ad26742e28e6b486938fba57b1b2271247a1

Логины разные вводил.Не понимаю.Какой код и где задаёт язык.Ведь заполнение других полей на русском проходит.Англ.логин проходит.Я так же не смог установить проверку идентичности
паролей.Потом плюнул и убрал другой пароль.Но на душе то кошки скребут...

Спустя 2 минуты, 34 секунды (12.09.2012 - 15:00) юрьич написал(а):
P.S.Может,что с кодировкой?

Спустя 2 минуты, 3 секунды (12.09.2012 - 15:02) Игорь_Vasinsky написал(а):
Цитата
include ("bd.php");

религия не позволяет подключить это в начале кода? интересней потом в середине его искать?

Спустя 9 минут, 50 секунд (12.09.2012 - 15:12) юрьич написал(а):
Цитата

религия не позволяет подключить это в начале кода? интересней потом в середине его искать?

Вам видней.Исправлю.Просто ещё не уловил логику.

Спустя 47 минут, 9 секунд (12.09.2012 - 15:59) sergeiss написал(а):
Цитата (юрьич @ 12.09.2012 - 16:00)
P.S.Может,что с кодировкой?

Такой же вопрос появился и у меня smile.gif

Проверь кодировку страницы и БД. Они должны быть одинаковые.

А в твой скрипт я лично не вникал, т.к. уж больно большой он.

Спустя 4 минуты, 8 секунд (12.09.2012 - 16:03) юрьич написал(а):
Цитата
т.к. уж больно большой он.

Это там аватар много места занимает.Наверное следовало его в отдельный файл перебросить.

Спустя 27 минут, 39 секунд (12.09.2012 - 16:30) inpost написал(а):
юрьич
Ты показал лишь 2 переменных, а не 4.
Ты не ответил, пользователь у тебя хоть 1 такой в БД...
Кроме этого, ты знаешь, что у него id=4 и login = 'inpost'
Создай test.php и для него проделай ту же операцию на md5. После посмотри, какой из двух переменных неверный!!!

Спустя 2 минуты, 16 секунд (12.09.2012 - 16:33) юрьич написал(а):
Кодировки вроде выставил везде.Но всё равно при открытии страницы, в браузере кодировка слетает на W-1251,хотя по умолчанию стоит utf-8.
Единственно непонятно,
что это значит эта строка:init-connect = "set names cp1251" в .conf Mysql

# Кодировка баз данных по умолчанию.
default-character-set = utf-8
init-connect = "set names cp1251"
skip-character-set-client-handshake

меняю на utf-8 выдаёт ошибку,что не знает что это такое.

Спустя 2 минуты, 50 секунд (12.09.2012 - 16:36) inpost написал(а):
Все 11 пунктов выполнил? Если нет, то в личку смотри! smile.gif

Спустя 2 минуты, 30 секунд (12.09.2012 - 16:38) юрьич написал(а):
Цитата
Ты показал лишь 2 переменных, а не 4.
Ты не ответил, пользователь у тебя хоть 1 такой в БД...
Кроме этого, ты знаешь, что у него id=4 и login = 'inpost'
Создай test.php и для него проделай ту же операцию на md5. После посмотри, какой из двух переменных неверный!!!

Вообще я ввёл четыре переменных,но сейчас повторю вывод в столбик.
Логин такой один.
А вот п.3 не понимаю.

Спустя 17 минут, 25 секунд (12.09.2012 - 16:55) юрьич написал(а):
P.S.Больше ничего не выводится,только две.

Спустя 5 минут, 29 секунд (12.09.2012 - 17:01) inpost написал(а):
Как не выводится? Ты же в адресной строке передаёшь?! smile.gif

Спустя 42 минуты, 4 секунды (12.09.2012 - 17:43) юрьич написал(а):
Цитата
Все 11 пунктов выполнил? Если нет, то в личку смотри! smile.gif


Это до утра-11пунктов.Пока всем пока.

Спустя 18 часов, 45 минут, 52 секунды (13.09.2012 - 12:29) юрьич написал(а):
Цитата
Как не выводится? Ты же в адресной строке передаёшь?!

А вот и нет.Я их прямо в .php файл прописал.В адресную у меня что то не получается.Вообще ничего не выводит.Пишет лишь ссылку о не полностью введённой информации.
Намутил я с этими 11-ью пунктами,что пришлось Денвер снести.Вообще всё перемешалось.Понятно,что сам виноват.Поторопился.Сейчас установил новый Денвер-"Endels"
В базу прописал,В php.conf прописал,ну и остальное по страницам проверил.Сейчас вроде все что вношу отображается корректно,кроме ссылок в php файлах,которые выносятся на чистую страницу(как правило об ошибках).Ну типа:
echo"<a href=...
Если выношу эту ссылку в отдельный php файл и вставляю include то всё становится нормально.
Далее.
Пробовал прописать это:

$preg=('/[а-яА-Я_0-9_a-zA-Z]+/');
$check =preg_match($preg,$_POST['login']);
if ($check == false)
{
exit ("не верно введён логин");
}
Не работает.Выдаёт ошибку:не верно введён логин.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.