скрипт мне подходит полностью, просто есть пару вопросов:
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 первых вопроса, изменение аватарки не столь важно.
пока интересуют хотябы 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 написал(а):
с созданием папкой разобрался, теперь с последовательностью рекапчей :
я так понимаю надо условие - if (empty($login) or empty($password) or empty($email)) ОБЬЕДИНИТЬ с условием капчи..
Спустя 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 написал(а):
надо разобраться вначале с объявлением переменных
а потом все остальное
лучше попробуй свой код оформить
чтоб другие могли его прочесть
вот этим ЭТОЙ ШТУКОЙ
и не думайте дескать это ерунда
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 предложил тебе воспользоваться автоформатированием кода, чтобы увеличить читабельность
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е неудобства
а вывод или или ,сам или кто-то