[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна помощь по форме регистрации
zeromind
значит скрипт скачан с ruseller'a, там где ещё 4 статьи на данную тему..
скрипт мне подходит полностью, просто есть пару вопросов:
1. хочу в регистрацию встроить рекапчу (раньше в комментариях у меня это получалось удачно), в форму вставил без проблем, а вот обработчик (если не вводишь код или он не правильный) показывает invalid captcha, НО! код не останавливаеться, продолжает идти! можно зарегистрироваться, не вводя код..
PHP файл вылаживаю в php тэге.. ниже

2. в этом же обработчике в строке

//иначе - загружаем изображение пользователя
$path_to_90_directory = 'avatars/';//папка, куда будет загружаться начальная картинка и ее сжатая копия


мне нужно сделать чтобы в папку 'avatars/$login/' сохранялись аватарки.. как правильно оформить, чтобы переменная login распознавалась как логин введенный в форме...

3. опять же в этом обработчике есть ещё - сжатие аватарки до 90x90 px (квадрат), причем на некоторых файлах JPG ! (который разрешен) делает черный фон аватару и писало ошибку -
Warning: imagecreatefromjpeg(avatars/DSCF7381.JPG) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in Z:\home\localhost\www\sky\update_user.php on line 136

Warning: imagesx() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\sky\update_user.php on line 150

Warning: imagesy() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\sky\update_user.php on line 151

Warning: imagecopyresampled() expects parameter 2 to be resource, boolean given in Z:\home\localhost\www\sky\update_user.php on line 171

Warning: unlink(avatars/DSCF7381.JPG) [function.unlink]: No such file or directory in Z:\home\localhost\www\sky\update_user.php on line 182
Ваша аватарка изменена! Вы будете перемещены через 5 сек. Если не хотите ждать, то нажмите сюда.

Что мне нужно: хочеться чтобы изображение было не квадратное, просто по ширине или длине подгоняла к нужным мне пикселям, возможно ли сделать этим же кодом? есть идеи? ))

сам обработчик
<?php

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, если он пустой, то уничтожаем переменную

require_once('recaptcha/recaptchalib.php');
$privatekey = "тут мой кей";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
$error.="Invalid captcha";
$errors=1;
}
if($errors==1) echo $error;

if (empty($login) or empty($password) or empty($email)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); //останавливаем выполнение сценариев

}
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) //проверка е-mail адреса регулярными выражениями на корректность
{exit ("Неверно введен е-mail!");}


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

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

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


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

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

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

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

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

exit ("Пароль должен состоять не менее чем из 3 символов и не более чем из 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,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);//код активации аккаунта. Зашифруем через функцию md5 идентификатор и логин. Такое сочетание пользователь вряд ли сможет подобрать вручную через адресную строку.

$subject = "Подтверждение регистрации";//тема сообщения
$message = "Здравствуйте! Спасибо за регистрацию на citename.ru\nВаш логин: ".$login."\n
Перейдите по ссылке, чтобы активировать ваш аккаунт:\nhttp://localhost/test3/activation.php?login=".$login."&code=".$activation."\nС уважением,\n
Администрация citename.ru";//содержание сообщение
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 ("Ошибка! Вы не зарегистрированы."); //останавливаем выполнение сценариев

}
?>





Спустя 5 минут, 25 секунд (17.08.2011 - 14:53) alex12060 написал(а):
Слово хочу здесь не применимо. Разделите задачу на куски. Если хотите, чтобы переписали под Вас, Вам в другой раздел.

Спустя 12 минут, 21 секунда (17.08.2011 - 15:06) zeromind написал(а):
я изложил что мне нужно, если ты помочь не можешь, то проходи мимо. я не просил переписывать полностью весь код..

пока интересуют хотябы 2 первых вопроса, изменение аватарки не столь важно.

Спустя 11 минут, 46 секунд (17.08.2011 - 15:18) alex12060 написал(а):
Цитата
мне нужно сделать чтобы в папку 'avatars/$login/' сохранялись аватарки.. как правильно оформить, чтобы переменная login распознавалась как логин введенный в форме...


Вытаскиваешь логин из базы или из кук, сохраняешь в переменную и так делаешь:

$path_to_90_directory = 'avatars/'.(string)$_COOKIE['login'];

if (!is_dir($path_to_90_directory)) {
$res = @mkdir($path_to_90_directory);

if (!$res)
die('Could not create folder '.$path_to_90_directory );
} else {
// Добавление в папку
}


Цитата

1. хочу в регистрацию встроить рекапчу (раньше в комментариях у меня это получалось удачно), в форму вставил без проблем, а вот обработчик (если не вводишь код или он не правильный) показывает invalid captcha, НО! код не останавливаеться, продолжает идти! можно зарегистрироваться, не вводя код..


Показывай капчу

Цитата

3. опять же в этом обработчике есть ещё - сжатие аватарки до 90x90 px (квадрат), причем на некоторых файлах JPG ! (который разрешен) делает черный фон аватару и писало ошибку -


У тебя там ошибки, нет файла, не переместился в папку, из-за этого, выползают ошибки и изображение создается кривое.

Спустя 2 минуты, 18 секунд (17.08.2011 - 15:20) zeromind написал(а):
СПАСИБО! сейчас попробую, а насчет рекапчи - она вначале обработчика.. я выложил его весь..



Спустя 16 минут, 17 секунд zeromind написал(а):
с созданием папкой разобрался, теперь с последовательностью рекапчей :

<?php

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, если он пустой, то уничтожаем переменную

require_once('recaptcha/recaptchalib.php');
$privatekey = "тут мой кей";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
$error.="Invalid captcha";
$errors=1;
}
if($errors==1) echo $error;

if (empty($login) or empty($password) or empty($email)) //если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!"); //останавливаем выполнение сценариев

}
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email)) //проверка е-mail адреса регулярными выражениями на корректность
{exit ("Неверно введен е-mail!");}


я так понимаю надо условие - if (empty($login) or empty($password) or empty($email)) ОБЬЕДИНИТЬ с условием капчи..

Спустя 37 минут, 12 секунд (17.08.2011 - 15:57) alex12060 написал(а):
Да, надо. У тебя будет 4 переменной, которые надо проверить.

Спустя 1 минута, 13 секунд (17.08.2011 - 15:58) YVSIK написал(а):
zeromind ЧИСТО поповский код чисто
лучше попробуй свой код оформить
чтоб другие могли его прочесть
вот этим ЭТОЙ ШТУКОЙ
и не думайте дескать это ерунда
90% это правильность написания кода , уж поверьте !!
а то так
Свернутый текст
неизвестно что придумал возбужденный ПРОФФЕСОР очередной раз

ну это так к слову не обижайся
а по поводу кода уж извиняй так и есть
вначале порядок потом и вопросы типо Нужна помощь
такой код даже и никто читать не хочет
а папова в топку!!




Спустя 1 минута, 54 секунды YVSIK написал(а):
надо разобраться вначале с объявлением переменных
а потом все остальное
Цитата
с созданием папкой разобрался, теперь с последовательностью рекапчей :

if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }

Спустя 2 минуты, 14 секунд (17.08.2011 - 16:00) zeromind написал(а):
мне не хочеться мудриться с MVC.. я итак простых php функий не знаю толком, ток готовые скрипты переделываю под себя.. больше мне и не нужно )

Спустя 4 минуты, 24 секунды (17.08.2011 - 16:05) YVSIK написал(а):
причем тут ЭТО??
Цитата
мне не хочеться мудриться с MVC..

а вот это поменять
if (isset($_POST['login'])) { $login = $_POST['login']; if ($login == '') { unset($login);} }


на это
$login = !empty( $_POST['login']) ?  $_POST['login'] : NULL; 


потому что это каломбур-РР))
надо))!!

Спустя 27 секунд (17.08.2011 - 16:05) Invis1ble написал(а):
zeromind
MVC тут не причем, YVSIK предложил тебе воспользоваться автоформатированием кода, чтобы увеличить читабельность

Спустя 9 минут, 37 секунд (17.08.2011 - 16:15) YVSIK написал(а):
Свернутый текст
 <?php
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, если он пустой, то уничтожаем переменную
require_once ('recaptcha/recaptchalib.php');
$privatekey = "тут мой кей";
$resp = recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);

if(!$resp -> is_valid)
{
$error .= "Invalid captcha";
$errors = 1;
}

if($errors == 1)
{
echo $error;
}

if(empty($login) or empty($password) or empty($email))
//если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт

{
exit("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
//останавливаем выполнение сценариев
}

if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
//проверка е-mail адреса регулярными выражениями на корректность

{
exit("Неверно введен е-mail!");
}
?>

теперь посмотри как стало даже ты теперь можешь прочитать что сам скопировал :rolleyes:
и это только форматер кода
а вот это точно сказано
Цитата
ток готовые скрипты переделываю под себя.. больше мне и не нужно )

но этот код врят-ли когда будет правильно работать коректно
и принесет вам многи6е неудобства
а вывод или или ,сам или кто-то
Быстрый ответ:

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