windows7.Denwer.
Нашёл скрипт регистрации.Поставил Всё работало.Решил добавить поля.Перестало работать.
Возился-копался и на данный момент такая проблема:Из семи добавленных полей следующие не прописываются в БД:
mather,hd,member,block.
Посмотрите пожалуйста скрипт.А то мистика какая то.
<?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'] : '';
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) < 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"; //можете нарисовать 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,date)
VALUES('$login','$password','$avatar','$email','$teep_pc','$sees','$hd','$member','$block','$disp','$mather',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://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 ("Ошибка! Вы не зарегистрированы."); //останавливаем выполнение сценариев
}
?>
Спасибо.
Спустя 27 минут, 21 секунда (8.09.2012 - 12:00) GET написал(а):
t2 = mysql_query ("INSERT INTO users (`login`,`password`,`avatar`,`email`,`teep_pc`,`sees`,`hd`,`member`,`block`,`disp`,`mather`,`date`)
VALUES('".$login."','".$password."','".$avatar."','".$email."','".$teep_pc."','".$sees."','".$hd."','".$member."','".$block."','".$disp."','".$mather."',NOW())");
Спустя 8 минут, 57 секунд (8.09.2012 - 12:09) юрьич написал(а):
И что здесь не так?
Спустя 7 минут, 24 секунды (8.09.2012 - 12:16) GET написал(а):
добавь к запросу
t2 = mysql_query ("INSERT INTO users (`login`,`password`,`avatar`,`email`,`teep_pc`,`sees`,`hd`,`member`,`block`,`disp`,`mather`,`date`)
VALUES('".$login."','".$password."','".$avatar."','".$email."','".$teep_pc."','".$sees."','".$hd."','".$member."','".$block."','".$disp."','".$mather."',NOW())")or die(mysql_error());
Спустя 13 минут, 9 секунд (8.09.2012 - 12:29) юрьич написал(а):
Без изменений
Спустя 12 минут, 50 секунд (8.09.2012 - 12:42) GET написал(а):
ну незнаю...
если написать перед запросом
и посмотреть что выполняется за запрос все ли там на месте?
Если запрос выполняется правильно в нем все есть...и в БД поля те же самые ошибок нет, почему не заносится в БД? Вообще ничего не заносится или только перечисленные поля. Может они пустые?
если написать перед запросом
echo "INSERT INTO users (login,password,avatar,email,teep_pc,sees,hd,member,block,disp,mather,date)
VALUES('$login','$password','$avatar','$email','$teep_pc','$sees','$hd','$member','$block','$disp','$mather',NOW())";
и посмотреть что выполняется за запрос все ли там на месте?
Если запрос выполняется правильно в нем все есть...и в БД поля те же самые ошибок нет, почему не заносится в БД? Вообще ничего не заносится или только перечисленные поля. Может они пустые?
Спустя 10 минут, 22 секунды (8.09.2012 - 12:52) юрьич написал(а):
Данный запрос выполнял.Показывает тоже самое,что и в БД.Четыре поля пустые.Может,что в настройках MySql посмотреть,или в самом Денвере?Или может сама Windows?Я уже не знаю,что думать.
Спустя 2 минуты, 6 секунд (8.09.2012 - 12:55) GET написал(а):
выложи дамп таблицы
Спустя 10 минут, 14 секунд (8.09.2012 - 13:05) юрьич написал(а):
-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 08 2012 г., 14:04
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
--
-- БД: `mysql`
--
-- --------------------------------------------------------
--
-- Структура таблицы `users`
--
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`login` varchar(15) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`avatar` varchar(255) NOT NULL default '',
`email` varchar(255) NOT NULL default '',
`teep_pc` varchar(255) default NULL,
`sees` varchar(255) default NULL,
`mather` varchar(255) default NULL,
`hd` varchar(255) default NULL,
`member` varchar(255) default NULL,
`block` varchar(255) default NULL,
`disp` varchar(255) default NULL,
`activation` int(1) NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=47 ;
--
-- Дамп данных таблицы `users`
--
INSERT INTO `users` VALUES (46, 'boy', '07b432d25170b469b57095ca269bc202b3p6f', 'avatars/net-avatara.jpg', 'ew.bolgow@yandex.ru', 'настольный', 'win7', '', '', '', '', '21''', 0, '2012-09-08 13:27:59');
INSERT INTO `users` VALUES (45, 'жора', 'e388f02f750e65ebba95ab9493cda01eb3p6f', 'avatars/net-avatara.jpg', 'ew.bolgow@yandex.ru', 'настольный', 'windows7', '', '', '', '', '21''', 0, '2012-09-08 11:59:35');
Спустя 29 минут, 12 секунд (8.09.2012 - 13:34) GET написал(а):
юрьич
у меня все вставилось:
![user posted image](http://s017.radikal.ru/i416/1209/9d/30a57693d026.jpg)
может у тебя что то с кодировкой?
у меня все вставилось:
![user posted image](http://s017.radikal.ru/i416/1209/9d/30a57693d026.jpg)
может у тебя что то с кодировкой?
Спустя 7 минут, 17 секунд (8.09.2012 - 13:41) юрьич написал(а):
А по этому скрипту вставляли?
Спустя 5 минут, 4 секунды (8.09.2012 - 13:46) GET написал(а):
нет через php my admin, но смысл тот же запрос работает
сейчас сделал:
mysql_query ("INSERT INTO users (`login`,`password`,`avatar`,`email`,`teep_pc`,`sees`,`hd`,`member`,`block`,`disp`,`mather`,`date`)
VALUES('rrr','rrr','rrrr','rrr','rrr','rrr','rrrr ','rrr','rrr','rrr','rrr',NOW())")or die(mysql_error());
напрямую из своего скрипта тоже работает
сейчас сделал:
mysql_query ("INSERT INTO users (`login`,`password`,`avatar`,`email`,`teep_pc`,`sees`,`hd`,`member`,`block`,`disp`,`mather`,`date`)
VALUES('rrr','rrr','rrrr','rrr','rrr','rrr','rrrr ','rrr','rrr','rrr','rrr',NOW())")or die(mysql_error());
напрямую из своего скрипта тоже работает
Спустя 1 минута, 47 секунд (8.09.2012 - 13:48) GET написал(а):
Может у тебя эти символы в полях в UTF-8, а кодировка таблицы в 1251?
Спустя 2 минуты, 57 секунд (8.09.2012 - 13:51) inpost написал(а):
Вы первые строчки гляньте, где идёт инициализация.
'member' и 'member ' - разные вещи, в конце пробел
'member' и 'member ' - разные вещи, в конце пробел
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)
Спустя 4 минуты, 48 секунд (8.09.2012 - 13:56) GET написал(а):
inpost
Плеать...все побежали и я побежал
![laugh.gif](http://phpforum.su/html/emoticons/laugh.gif)
Плеать...все побежали и я побежал
Спустя 1 минута, 11 секунд (8.09.2012 - 13:57) GET написал(а):
Цитата |
echo "INSERT INTO users (login,password,avatar,email,teep_pc,sees,hd,member,block,disp,mather,date) VALUES('$login','$password','$avatar','$email','$teep_pc','$sees','$hd','$member','$block','$disp','$mather',NOW())"; |
юрьич
Ты же написал, что все нормально, когда я тебя спрашивал?!!
Спустя 24 минуты, 22 секунды (8.09.2012 - 14:21) юрьич написал(а):
Цитата (A.B.C. @ 8.09.2012 - 13:56) |
inpost![]() Плеать...все побежали и я побежал |
Большое всем спасибо.Всё верно дело было в пробелах.
Спустя 2 минуты, 37 секунд (8.09.2012 - 14:24) юрьич написал(а):
Что то я заплутал на форуме.Всё верно дело было в пробелах.Два дня мучаюсь.Большое всем спасибо за то,что вы есть.
Спустя 9 минут, 9 секунд (8.09.2012 - 14:33) GET написал(а):
юрьич
да бывает
да бывает
![smile.gif](http://phpforum.su/html/emoticons/smile.gif)