[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регистрация
shmit
Доброй ночи, граждане форумчане, помогите пожалуйста, я скачал скрипт регистрации, поскольку сам написать не могу)))) Но там много чего не работает.
1) Не работает проверка введенного сайта
2) введенного Эмейла
3) Не работает функция выслать пароль на мыло
4) НЕ выводится текст при выходе ( Вы вышли )
Я не могу понять в чем дело, может скрипт корявый, я все вроде проверил (насколько я в этом разбираюсь ) кому не тяжело подкорректируйте пожалуйста, Спасибо.

if($_GET['do'] == "register")
{
if($_SESSION["loged"] == "yes")
{
echo "<p class='error'>Вы уже вошли. Для новой регистрации выйдите!</p>";
}
else
{
if(!isset($_POST['more']) and !isset($_POST['ok'])) { include("blocks/rules.php"); }
else{
if($_POST['ok']=="sogl")
{?>
<br>
<
form action="member.php?do=reg" method="post" enctype="multipart/form-data"><br>
<
table width="95%" align="center" cellpadding="4" cellspacing="0" border="0" class="gf">
<
tr><td colspan="2" align="center" class="comment_style2">Регистрация пользователя</td></tr>
<
tr><td align="right" class="reg">Имя пользователя:*</td><td><input type="text" name="username" size="30"></td></tr>
<
tr><td align="right" class="reg">Пароль:*</td><td><input type="password" name="password" size="30"></td></tr>
<
tr><td align="right" class="reg">Повторите пароль:*</td><td><input type="password" name="password2" size="30"></td></tr>
<
tr><td align="right" class="reg">Ваш E-Mail:*</td><td><input type="text" name="emaila" size="30"></td></tr>
<
tr><td align="right" class="reg">ICQ:</td><td><input type="text" name="icq" size="30" maxlength="9"></td></tr>
<
tr><td align="right" class="reg">Сайт:</td><td><input type="text" name="site" value="http://" size="30" maxlength="50"></td></tr>
<
tr><td align="right" class="reg">Город:</td><td><input type="text" name="city" size="30" maxlength="150"></td></tr>
<
tr><td align="right" class="reg">Загрузить аватар:</td><td><input type="checkbox" name="upload"> Да</td></tr>
<
tr><td align="right" class="reg">Выберите аватар:</td><td><input type="file" name="userfile"></td></tr>
<
tr><td> </td><td class="reg">Разрешается использовать картинки:<br>- разрешением не более 120 х 120<br>- расширением только gif,png,jpg,jpeg<br>- размером менее 70 Кб</td></tr>
<
tr><td> </td><td class="reg">* Поля, обязательные для заполнения</td></tr>
<
tr><td> </td><td><input class="sub_reg" type="submit" value="Зарегистрироваться"></td></tr>
</
table></form>
<? }
else {echo "<p class='error'>Вы не отметили флажок, подтверждающий то, что Вы согласны с правилами сайта!<br><a href='javascript:history.go(-1);'>« Вернуться назад</a></p>";}
}
}
}

// если ?do=reg переход от формочки.
if($_GET['do'] == "reg")
{
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
$password2 = trim($_POST["password2"]);
$emaila = trim($_POST["emaila"]);
$icq = trim($_POST["icq"]);
$site = trim($_POST["site"]);
$city = trim($_POST["city"]);

// проверим в базе есть ли такой пользователь как мы хочем зарегистрировать
$result = mysql_query("SELECT * FROM users where username='$username'", $db);
$exuser=mysql_numrows($result);
if($username=='' OR $password=='' OR $password2=='' OR $emaila=='')
{
exit ("<p class='error'>Заполните пожалуйста все обязательные поля!</p>");
}
if ($username == '')
{
exit ("<p class='error'>Поле 'Логин' не заполнено</p>");
}
elseif (!preg_match("/^\w{3,}$/", $username))
{
exit ("<p class='error'>В поле 'Логин' введены недопустимые символы</p>");
}
if ($emaila == '')
{
exit ("<p class='error'>Поле 'E-mail' не заполнено</p>");

}// Проверяем e-mail на корректность
elseif (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $emaila))
{
exit ("<p class='error'>Указанный 'E-mail' имеет недопустимый формат</p>");
}
if(!empty($icq))
{
if (!preg_match("/^\d{8,9}$/", $icq))
{
exit ("<p class='error'>Указанный 'ICQ-номер' имеет недопустимый формат<br>Применяемый формат это от 8 или 9 цифр идущих подряд без пробелов</p>");
}
if($icq == '0'){unset($icq);}
}

if ($site == ''){unset($site);}
if(!empty($site))
{
//if(!preg_match("/^(?:http:\/\/)?[-0-9a-z._]*.\w{2,4}[:0-9]*$/", $site))
if(!preg_match("/^(http:\/\/)?([^\/]+)/i", $site) || (!(eregi("http:\/\/", $site))))
{
exit("<p class='error'>Неверно введен URL-адрес в поле Сайт!</p>");
}
if($site == 'http://'){unset($site);}
}

if(!empty($city))
{
if(!preg_match("/([а-яА-Я0-9_\-])/i", $city))
{
exit("<p class='error'>Указанный 'Город' имеет недопустимый формат!<br>В названии города разрешено использовать только кириллицу.</p>");
}
}

if ($password == '' || $password2 == '')
{
exit ("<p class='error'>Поле 'Пароль' не заполнено</p>");
}
// Пароль может состоять из букв, цифр и подчеркивания
elseif(!preg_match("/^\w{3,}$/", $password))
{
exit ("<p class='error'>В поле 'Пароль' введены недопустимые символы</p>");
}
elseif($password!=$password2)
{
exit ("<p class='error'>Пароли не совпадают!</p>");
}
elseif($exuser=='1')
{
exit ("<p class='error'>Имя пользователя <b>$username</b> уже зарегистрировано! Придумайте другое =)</p>");
}
else
{
if(isset($_POST['upload']))
{
include("blocks/file_img.php");
if($error_count > 0)
{
for($i = 0; $i <= $error_count; ++$i)
{
echo $_FILES['userfile']['error'][$i];
}
}

else
{
if(!empty($userfile))
{
if (file_exists("$path/$userfile")) {exit("<p class='error'>Файл с таким именем уже существует на сервере! Измените имя на другое!<p>");}
if (!preg_match("/^[a-z0-9\.\-_]+\.(jpg|gif|png|jpeg)+$/is",$userfile)) {exit("<p class='error'>Запрещено использовать РУССКИЕ буквы в имени файла изображения аватарки!</p>");}
else
{
if(move_uploaded_file($file_temp, ''.$path.'' .$file_name.''))//загружаем файл
{
echo '<p>Загрузка аватарки успешно завершена!</p>';
echo '<p><b>Информация о загруженном аватаре:</b></p><ul><li>Имя загруженного файла: '.$userfile.'</li><li>Новое имя файла: '.$file_name.'</li><li>Тип файла: '.$file_type.'</li><li>Размер файла: '.$file_size.'</li><li>Путь к временному файлу: '.$file_temp.'</li><li>Ошибок в файле: '.$file_err.'</li></ul>';
$mdPassword = ($password);
$date = date("Y-m-d");
$query = "INSERT INTO users (username,password,email,icq,site,city,avatar,date)"."VALUES ('$username','$mdPassword','$emaila','$icq','$site','$city','$file_name','$date')";
$result = mysql_query($query, $db);
echo "<p class='error'>Спасибо за регистрацию!<br>Теперь вы можете войти в свой аккаунт использую имя и пароль, введенные при регистрации!!</p>";
}
else{ echo '<h3>Ошибка загрузки!</h3>'; }
}
}
//else{exit("<p class='error'>Поле выбора изображения пустое!</p>");}

}
}

else //заносим данные без загруженного аватара
{ $no_avt = "no_avatar.gif"; //аватар по умолчанию
$mdPassword = ($password);
$date = date("Y-m-d");
$query = "INSERT INTO users (username,password,email,icq,site,city,avatar,date)"."VALUES ('$username','$mdPassword','$emaila','$icq','$site','$city','$no_avt','$date')";
$result = mysql_query($query, $db);
echo "<p class='error'>Спасибо за регистрацию!<br>Теперь вы можете войти в свой аккаунт использую имя и пароль, введенные при регистрации!</p>";
}
}
}

// начнем востанавливать пароль, формочка
if($_GET['do'] == "lostpass")
{
echo "<form action='member.php?do=lostpassword' method='post'><br>";
echo '<table width="95%" align="center" cellpadding="4" cellspacing="0" border="0" class="gf">';
echo '<tr><td colspan="2" align="center" class="comment_style2">Восстановление пароля</td></tr>';
echo "<tr><td align='right' class='reg'>Ваш e-mail адрес:</td><td><input type='text' name='emaila' size='30'></td></tr>";
echo "<tr><td> </td><td><input class='sub_vost' type='submit' value='Выслать пароль'></td></tr></table></form>";
}
if($_GET['do'] == "lostpassword")
{
if($_SESSION["loged"] == "yes")
{
echo "<p>Вы уже в системе!</p>";
}
else
{
// запросим данные с базы
$emaila = $_POST["emaila"];
$result = mysql_query("SELECT * FROM users where email='$emaila'", $db);
$chck_db = mysql_numrows($result);

if ($emaila == "")
{
echo "<p class='error'>Ошибка ввода. Введите ваш e-mail адрес!</p>";
}
else
{
if($chck_db=='0')
{
echo "<p class='error'>Пользователь c таким e-mail'ом в базе не существует!</p>";
}
else
{
$pas = mysql_fetch_array($result);
// тут создадим письмо.
$subject = "Забытый Пароль";
$body = "Ваш пароль для сайта: ".$pas['password']."";
$sql_query = "SELECT email FROM users where username='$user'";
$result = mysql_query($sql_query);

while ($row = mysql_fetch_array($result))
{
$address = $row[0];
@mail($address ,$subject , $body);
echo "<p class='error'>Ваш пароль отправлен на E-mail введенный при регистрации: ".$address."</p>";
}
}
}
}
}


// начинаем смену пароля
if($_GET['do'] == "changepass")
{
if($_SESSION["loged"] == "yes")
{
?>
<form action="member.php?do=changepassword" method="post"><br>
<
table width="95%" align="center" cellpadding="4" cellspacing="0" border="0" class="gf">
<
tr><td colspan="2" align="center" class="comment_style2">Изменение пароля</td></tr>
<
tr><td align="right" class="reg">Старый пароль:</td><td><input type="password" name="oldpass" size="30"></td></tr>
<
tr><td align="right" class="reg">Пароль:</td><td><input type="password" name="newpass" size="30"></td></tr>
<
tr><td align="right" class="reg">Повторите пароль:</td><td><input type="password" name="newpassagain" size="30"></td></tr>
<
tr><td> </td><td><input class="sub_izm" type="submit" value="Изменить"></td></tr>
</
table>
</
form>
<?
}
else
{
echo "<p class='error'>Вы должны войти в аккаунт!</p>";
}
}

// Продолжаем смену пароля
if($_GET['do'] == "changepassword")
{
if($_SESSION["loged"] == "yes")
{
// берем даныые по переменной сессии пользователя
$result = mysql_query("SELECT * FROM users where username='{$_SESSION["username"]}'", $db);
$rows = mysql_fetch_array($result);
$pass = $rows["password"];
$oldpass = trim($_POST["oldpass"]);
$newpass = trim($_POST["newpass"]);
$newpassagain = trim($_POST["newpassagain"]);

if($newpass=='' OR $newpassagain=='' OR $oldpass=='')
{
echo "<p class='error'>Введите пароли</p>";
}
elseif(!preg_match("/^\w{3,}$/", $newpass))
{
echo("<p class='error'>В поле 'Пароль' введены недопустимые символы</p>");
}
elseif($newpass!=$newpassagain)
{
echo "<p class='error'>Новые пароли несовпадают!</p>";
}
elseif($pass != ($oldpass))
{
echo "<p class='error'>Старый пароль неверный!</p>";
}
else
{
$mdnewpass = ($newpass);
mysql_query("update users set password='$mdnewpass' where username='{$_SESSION["username"]}'");
echo "<p class='error'>Пароль успешно изменен! Запомните его!</p>";
echo "<p>Сейчас вы будите пренаправлены на главную страницу, чтобы заново авторизоваться</p>";
echo "<html><head><meta http-equiv='Refresh' content='5; URL=/index.php'></head></html>";
}
}

if($mdnewpass!=NULL) { unset($_SESSION["loged"]); }
else
{
echo "<p class='error'>Вы должны войти в аккаунт!</p>";
}
}

//Начинаем редактировать аккаунт
if($_GET['do'] == "editaccount")
{
if($_SESSION["loged"] == "yes")
{
$result = mysql_query("SELECT email,icq,site,city,avatar FROM users where username='{$_SESSION["username"]}'");
$row = mysql_fetch_array($result);
$email = $row["email"];
$icq = $row["icq"];
$site = $row["site"];
$city = $row["city"];
$av = $row["avatar"];
//$id = $row["id"];
$no_avt = "no_avatar.gif";
if(!isset($_POST['edit']))
{?>
<form action="member.php?do=edit_account" method="post" enctype="multipart/form-data"><br>
<
table width="95%" align="center" cellpadding="4" cellspacing="0" border="0" class="gf">
<
tr><td colspan="2" align="center" class="comment_style2">Редактирование профиля</td></tr>
<
tr><td align="right" class="reg">Ваше имя:</td><td><input type="text" disabled readonly name="username" value="<? echo $_SESSION["username"]; ?>" size="30"></td></tr>
<
tr><td align="right" class="reg">Ваш E-Mail:</td><td><input type="text" name="emaila" value="<?=$email?>" size="30"></td></tr>
<
tr><td align="right" class="reg">ICQ:</td><td><input type="text" name="icq" value="<? echo ''.($icq == 0?"":"$icq").''; ?>" size="30" maxlength="9"></td></tr>
<
tr><td align="right" class="reg">Сайт:</td><td><input type="text" name="site" value="<?=$site?>" size="30" maxlength="50"></td></tr>
<
tr><td align="right" class="reg">Город:</td><td><input type="text" name="city" value="<?=$city?>" size="30" maxlength="150"></td></tr>
<
tr><td align="right" class="reg">Текущий аватар:</td><td><? echo ''.($av == NULL?"<img src=\"img/avatars/".$no_avt."\">":"<img src=\"img/avatars/".$av."\">").'';?></td></tr>
<?if ($av != $no_avt){?>
<tr><td> </td><td><a href="member.php?do=editaccount&del=1">Удалить текущий аватар</a></td></tr>
<?}?>
<tr><td align="right" class="reg">Загрузить новый аватар:</td><td><input type="checkbox" name="upload2"> Да</td></tr>
<
tr><td align="right" class="reg">Выберите новый аватар:</td><td><input type="file" name="userfile"></td></tr>
<
tr><td> </td><td class="reg">Разрешается использовать картинки:<br>- разрешением не более 120 х 120<br>- расширением только gif,png,jpg,jpeg<br>- размером менее 70 Кб</td></tr>
<
tr><td> </td><td><input class="sub_izm" type="submit" name="edit" value="Изменить"></td></tr>
</
table>
</
form>
<? }
if(isset($_GET['del']))
{
if($_GET['del']==1)
{
if($av != $no_avt){unlink('./img/avatars/'.$av.'');}
mysql_query("UPDATE users SET avatar='".$no_avt."' WHERE username='$_SESSION[username]'",$db);
echo "<html><head><meta http-equiv='Refresh' content='0; URL=member.php?do=editaccount'></head></html>";
}
else{exit("Неверный формат запроса");}
}
}

else
{
echo "<p class='error'>Вы должны войти в свой аккаунт!</p>";
}
}

// Заканчиваем редактировать аккаунт
if($_GET['do'] == "edit_account")
{
$emaila = trim($_POST["emaila"]);
$icq = trim($_POST["icq"]);
$site = trim($_POST["site"]);
$city = trim($_POST["city"]);
if ($emaila == '')
{
exit("<p class='error'>Поле 'E-mail' не заполнено! Оно является обязательным!</p>");
}
elseif (!preg_match("/^[a-zA-Z0-9_\.\-]+@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,6}$/", $emaila))
{
exit("<p class='error'>Указанный 'E-mail' имеет недопустимый формат</p>");
}
if(!empty($icq))
{
if (!preg_match("/^\d{8,9}$/", $icq))
{
exit("<p class='error'>Указанный 'ICQ-номер' имеет недопустимый формат<br>Применяемый формат это от 8 или 9 цифр идущих подряд без пробелов</p>");
}
if($icq == '0'){unset($icq);}
}

if ($site == ''){unset($site);}
if(!empty($site))
{
if(!preg_match("/^(http:\/\/)?([^\/]+)/i", $site) || (!(eregi("http:\/\/", $site))))
{
exit ("<p class='error'>Неверно введен URL-адрес в поле Сайт!<br>Формат ввода сайта: http://yourdomain.domain</p>" class="sh_symbol">);
}
if($site == 'http://'){unset($site);}
}

if(!empty($city))
{
if(!preg_match("/([а-яА-Я0-9_\-])/i", $city))
{
exit("<p class='error'>Указанный 'Город' имеет недопустимый формат!<br>В названии города разрешено использовать только кириллицу.</p>");
}
}

if($_SESSION["loged"] != "yes")
{
echo "<p class='error'>Вы должны войти в аккаунт!</p>";
}
else
{
if(isset($_POST['edit']))
{
if(isset($_POST['upload2']))
{
include("blocks/file_img.php");
if($error_count > 0)
{
for($i = 0; $i <= $error_count; ++$i)
{
echo $_FILES['userfile']['error'][$i];
}
}

else
{
if(!empty($userfile))
{
if($file_size>"0" and $file_size<$max_file_size)
{
if (file_exists("$path/$userfile")) {exit("<p class='error'>Файл с таким именем уже существует на сервере! Измените имя на другое!<p>");}
if (!preg_match("/^[a-z0-9\.\-_]+\.(jpg|gif|png|jpeg)+$/is",$userfile)) {exit("<p class='error'>Запрещено использовать РУССКИЕ буквы и пробелы в имени файла изображения!</p>");}
$findtchka=substr_count($userfile, "."); if ($findtchka>1) {exit("<p class='error'>ТОЧКА встречается в имени файла $findtchka раз(а). Это ЗАПРЕЩЕНО!</p>");}
else
{
if(move_uploaded_file($file_temp, ''.$path.'' .$file_name.''))
{
$result = mysql_query("SELECT avatar FROM users where username='$_SESSION[username]'", $db);
$row = mysql_fetch_array($result);if(move_uploaded_file($file_temp, ''.$path.'' .$file_name.''))
if($row['avatar'] != 'no_avatar.gif') {unlink(''.$path.'' .$row['avatar'].'');}
mysql_query("UPDATE users SET email='".$emaila."', icq='".$icq."', site='".$site."', city='".$city."', avatar='".$file_name."' WHERE username='$_SESSION[username]'",$db);
echo "<p>Информация в профиле успешно изменена!<br>Ваша старая аватарка удалена!</p>";
echo '<p>Загрузка новой аватарки успешно завершена!</p>';
echo '<p><b>Информация о загруженном аватаре:</b></p><ul><li>Имя загруженного файла: '.$userfile.'</li><li>Новое имя файла: '.$file_name.'</li><li>Тип файла: '.$file_type.'</li><li>Размер файла: '.$file_size.'</li><li>Путь к временному файлу: '.$file_temp.'</li><li>Ошибок в файле: '.$file_err.'</li></ul>';
echo "<html><head><meta http-equiv='Refresh' content='2; URL=member.php?do=editaccount'></head></html>";
}
else{ echo '<h3>Ошибка загрузки!</h3>'; }
}
}

else{exit("<p class='error'>Неправильный размер изображения в байтах</p>");}
}

//else{exit("<p class='error'>Поле выбора изображения пустое!</p>");}
}
}

else
{
mysql_query("UPDATE users SET email='$emaila', icq='$icq', site='$site', city='$city' WHERE username='{$_SESSION["username"]}'");
echo "<p class='error'>Информация изменена!</p>";
echo "<html><head><meta http-equiv='Refresh' content='0; URL=member.php?do=editaccount'></head></html>";
}
}
}
}

// Вход
if($_GET['do'] == "login")
{
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
if($username=='' OR $password=='' OR ($username=='' AND $password==''))
{
echo "<p class='error'>Вход не осуществлен!<br>Вы не ввели логин или пароль!</p>";
}
else
{
if($_SESSION["loged"] == "yes") { echo "Вы уже в системе!"; }
else
{
$result = mysql_query("SELECT * FROM users where username='$username'", $db);
$rows = mysql_fetch_array($result);
$pass = $rows["password"];
$user = $rows["username"];
// Если пароли совпали то создами переменные сессии (вход да) и (имя пользователя)
if($pass == ($password))
{
$_SESSION["loged"] = "yes";
$_SESSION["username"] = $username;
//$userfile = $_SESSION["userfile"]["name"];

echo <<<HTML
<script LANGUAGE="javascript">
window.location.href = "index.php"
</SCRIPT>

HTML;
}
else { echo "<p class='error'>Неверный пароль!</p>"; }
}
}
}


//Выход
if($_GET['do'] == "logout")
{
// Для выхода вам всеголиш нужно уничтожить переменные. Уничтожаются также как и обычные переменные
unset($_SESSION["loged"]);
unset($_SESSION["username"]);
//echo "<p class='error'>Вы успешно вышли!</p>";
echo "<BR><BR><BR>";

//Обновим страничку автоматом для того чтобы обновился блок входа.
echo <<<HTML
<script LANGUAGE="javascript">
window.location.href = "index.php"
</SCRIPT>

HTML;
}

?>










Спустя 8 минут, 55 секунд (19.03.2010 - 03:28) shmit написал(а):
Вы вышли исправил, echo был закомментирован.
//echo "<p class='error'>Вы успешно вышли!</p>";
А вот дальше не знаю(

Спустя 18 минут, 19 секунд (19.03.2010 - 03:46) Adil написал(а):
блин прикрепи сам .php файл

Спустя 3 минуты, 12 секунд (19.03.2010 - 03:50) shmit написал(а):
Вот

Спустя 20 минут, 53 секунды (19.03.2010 - 04:10) Adil написал(а):
А можно весь скрипт регистрации? Так намного проще будет разобраться, чем везде встречая слово "инклюд".. вот то что ты скачал дай проверить.. если проблема не в нем, то возможно где-то ты накосячил..

Спустя 9 минут, 9 секунд (19.03.2010 - 04:20) shmit написал(а):
Это и есть весь скрипт, инклюд я убрал ( там мои подключения к шапки футера, и менюшки.


Спустя 5 часов, 26 минут, 1 секунда (19.03.2010 - 14:23) shmit написал(а):
Twin, но в твоём скрипте нету аватара(((((((

Спустя 3 минуты, 43 секунды (19.03.2010 - 14:27) Adil написал(а):
twin почему в твоем скрипте нет аватара?!

shmit все-таки лучше разобраться и сделать самому, но если так хочется, то просто приложи файл, который скачал, без своих изменений. Это важно!

Спустя 7 минут, 39 секунд (19.03.2010 - 14:34) shmit написал(а):
ДА я хочу разобраться и научиться, базовые знания у меня есть, а дальше я не могу продвинуться, стою на месте, очень хочу сделать сам регистрацию(

Спустя 13 минут, 27 секунд (19.03.2010 - 14:48) Kuliev написал(а):
Цитата (shmit @ 19.03.2010 - 16:34)
ДА я хочу разобраться и научиться, базовые знания у меня есть, а дальше я не могу продвинуться, стою на месте, очень хочу сделать сам регистрацию(

В чем тогда проблема?

Ничего сложного в написании регистрации нет, алгоритм простой нужно два поля логин и пароль записать в базу и все. Ну конечно пароль зашифровать и избежать SQL инъекций!

Спустя 6 минут, 34 секунды (19.03.2010 - 14:54) shmit написал(а):
Это будет не регистрация тогда , а так что попало, вверху я выложил скрипт с аватаром и всеми делами, вот это и я понимаю регистрация, только говорят, что дырявая.

Спустя 21 минута, 44 секунды (19.03.2010 - 15:16) ApuktaChehov написал(а):
>>Это будет не регистрация тогда , а так что попало, вверху я выложил скрипт с аватаром и всеми делами, вот это и я понимаю регистрация, только говорят, что дырявая. <<

Но почему же не регистрация? Это обычная, самая простая регистрация.
А если тебе нужно добавить много чего, смысл такой же. Что ты пароль или логин в базу пишешь, что icq или почту, смысл один и тот же.

А что касаемо твоего скрипта, то это страшная каша, в которой ты сам запутаешься через пару месяцев.

Спустя 16 минут, 16 секунд (19.03.2010 - 15:32) shmit написал(а):
Vasinsky Писал не я, я знаю лишь базовые функции и то не все их могу применить.
ApuktaChehov Мне нужна хорошая регистрация, по скольку у меня довольно серьезный проект на территории Украины, мы занимаемся моддингом компьютерный системных блоков, кому интересно вот ссылка на ютуб, только это не наша работа http://www.youtube.com/watch?v=DtuVE2CC7qw . По этому я хочу что бы все было идеально, в пхп я относительно недавно, по этому и приходится брать чужие скрипты что-то менять и ставить(((( Насчёт скрипта Twina может он и хорош, но нет аватара, а это мне не подходит user posted image

Спустя 4 минуты, 57 секунд (19.03.2010 - 15:37) Игорь_Vasinsky написал(а):
Так давай всё дружно вместе соберём. последовательно здесь и сейчас ?

делов то: получить данные обработать обезопасить и записать в базу

Только как выяснилось утром - что касаемо безопастности - тут я тебе не помошник.

Спустя 27 минут, 22 секунды (19.03.2010 - 16:05) ApuktaChehov написал(а):
Цитата (shmit @ 19.03.2010 - 15:32)
ApuktaChehov Мне нужна хорошая регистрация, по скольку у меня довольно серьезный проект

Если у Вас не получается написать хорошую регистрацию, тогда она заказывается у сторонних разработчиков, и соответственно за деньги.
С другой стороны чего Вы конкретно желаете. Можно написать многофункциональную систему, но дырявую и тормазнутую, а можно совсем простую, но фиг кто взломает просто так и работать она будет как молния.

Тут все упирается в ваши финансовые возможности и желания.

ИМХО, если Вы создаете серьезный проэкт, реально серьезный, то скрипты такого уровня использовать несерьезно.

Спустя 16 минут, 4 секунды (19.03.2010 - 16:21) shmit написал(а):
А возможен такой вариант, что мне напишут и обьяснят как это написали, я хочу понять PHP, и сколько это будет стоит желательно в USD? Либо есть где-то в сети хорошая регистрация?

Мне нужная простая регистрация, ( Имя, пароль, эмейл аська, аватар, и редактирование этих данных пользователем.)

Спустя 5 минут, 2 секунды (19.03.2010 - 16:26) ApuktaChehov написал(а):
Вот держи:
ссылка

Спустя 1 минута, 40 секунд (19.03.2010 - 16:27) shmit написал(а):
Мля

Спустя 1 минута, 2 секунды (19.03.2010 - 16:28) ApuktaChehov написал(а):
А вот еще про платные курсы с обучением:
курсы

Спустя 6 минут, 16 секунд (19.03.2010 - 16:35) Игорь_Vasinsky написал(а):
Давай начнём.

Значит из формы ты получаешь переменные отосланные предподчтительно методои $_POST

которые надо проверить на валидность (правильность) и сделать так чтоб эти данные переданные из формы не могли принести вред твоему сайту,

Сначала проверить - > данные отправлены или нет.

-если имя - то только буквы и цифры
-если пароль - тоже + проверить его ещё раз, а то пользователь ошибётся при вводе и не сможет войти
-если емайл - значить @ .ru(com, net и т.д)
-если сайт - то http://domn . зона
- если аватар - то тип(картинка), размер, вес

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

значит использывать фильтр дл этих данных и отсеять всё опасное (теги, экранировать одинарные ковычки, т.к. это вызовет ошибку при записи в б.д)

Это ты сможешь показать здесь ? с этим знаком, это только начало , многое ещё впереди

Спустя 6 часов, 23 минуты, 44 секунды (19.03.2010 - 22:58) shmit написал(а):
Vasinsky , боюсь я не потяну(((

Спустя 20 минут, 59 секунд (19.03.2010 - 23:19) twin написал(а):
Игорь_Vasinsky
Цитата
-если имя - то только буквы и цифры

почему?
Цитата
значит использывать фильтр дл этих данных и отсеять всё опасное (теги, экранировать одинарные ковычки, т.к. это вызовет ошибку при записи в б.д)

писанулся - доделай. что за фильтр такой? чего мы боимся панически?
Этого:
<script type="text/javascript" language="javascript">ай, нас поломали нафиг!!!</script>
Скажи тогда, как же ты видишь это, не фильтрованное такое пиво?

Спустя 4 часа, 5 минут, 51 секунда (20.03.2010 - 03:25) shmit написал(а):
Начало есть, это для логина

<?php
$user = $_POST['username'];
if(!preg_match("/^[a-zA-Z0-9]+$/", $user)) {
echo "Имя пользователя задано в неправильном формате";
} else {
echo "Имя пользователя задано в правильном формате";
}
?>





Нашел очень классную статью о регулярных выражениях, разобрался.

Спустя 7 часов, 29 минут, 37 секунд (20.03.2010 - 10:55) ApuktaChehov написал(а):
Какая-то косячная проверка, так как пропустит логин с одной буквой.
А еще нет нижнего подчеркивание, тире. Это как минимум.
Юзеры любят использовать разные символы в своих логинах. К тому же не надо писать a-z и A-Z можно в конец поставить флаг i. Тогда проверка будет без учета регистра.

Короче вот проверка по лучше.
if(!preg_match("/^[^ ]{4,20}$/i", $_POST['username'])) {
echo "Имя пользователя задано в неправильном формате";
} else {
echo "Имя пользователя задано в правильном формате";
}

Пропускает любые символы, кроме пробелов, к тому же, логин должен быть минимум 4 максимум 20 символов. Но, это по желанию.

P.S. Я не спец, по этому тоже мог накосячить. Ждем мнения экспертов wink.gif

Спустя 16 минут, 26 секунд (20.03.2010 - 11:11) twin написал(а):
Пробел вообще то не так обозначается. Символы все же лучше указать разрешенные, если есть ограничения.
И ошибки сразу не надо в поток. В переменную их. В массив. Потому что проверка не одна же будет.

$error = array();

if(!empty($_POST['username']) && !preg_match("/^[а-яёa-z0-9_-]{4,20}$/i", $_POST['username']))
$error[] = "Имя пользователя задано в неправильном формате";

как то так хотя бы для начала

Спустя 1 час, 45 минут, 11 секунд (20.03.2010 - 12:56) shmit написал(а):
twin, можешь обьяснить,
$error = array(); Что это за массив?
И как понять если пустая
переменная усернейм и символы не проходят проверку то пишем пользователю
$error[] = "Имя пользователя задано в неправильном формате"; ?

Спустя 11 минут, 41 секунда (20.03.2010 - 13:08) shmit написал(а):
ApuktaChehov .
Юзеры любят использовать разные символы в своих логинах. К тому же не надо писать a-z и A-Z можно в конец поставить флаг i. Тогда проверка будет без учета регистра.
Что значит без учета регистра?

Спустя 52 минуты, 56 секунд (20.03.2010 - 14:01) ApuktaChehov написал(а):
Это значит что для проверки будет все равно использовал юзер большие(заглавные) или маленькие(прописные) буквы.

Спустя 3 часа, 2 минуты, 50 секунд (20.03.2010 - 17:04) shmit написал(а):
Игорь_Vasinsky
Так что, будем делать регистрацию?)

Спустя 11 минут, 39 секунд (20.03.2010 - 17:16) Игорь_Vasinsky написал(а):
Будем конечноЮ почему нет то. Тока я не вижу порыва..

Спустя 2 часа, 7 минут, 4 секунды (20.03.2010 - 19:23) shmit написал(а):
Сейчас пишу, то что Вы написали, скоро выложу, то что получилось.

Спустя 1 час, 6 минут, 23 секунды (20.03.2010 - 20:29) twin написал(а):
Цитата
twin - чёть я не помню что мы на ты переходили

Вообще у нас так принято, не я придумал. но если это принципиально, могу на Вы.
Цитата
Сначала гость ждёт помощи - все по своим делам лазют, тока рот откроешь и все на тебя готова накинуться.

Ничего подобного. Никто не накидывался. Я просто спросил "почему?"
Если ВЫ советуете что то людям, нужно обосновать это. А все преподносится так, что это единственно првильное возможное решение.

Цитата
По поводу обработки данных - вы мой ответ на вашу задачу токак тока проверяли, и вывод такой: пока сам не вникну и не освою - мне на эту тему отвечать будет как минимум - неправильно, т.к. я сам там ещё дуовый.

Не совсем верно. Я как то писал об этом. Вот только ерошиться не надо, будет польза для всех.

Спустя 7 минут, 22 секунды (20.03.2010 - 20:36) twin написал(а):
shmit
Цитата
twin, можешь обьяснить,
$error = array(); Что это за массив?

Могу. Это не я даже, это kirik писал))

Спустя 6 минут, 52 секунды (20.03.2010 - 20:43) Игорь_Vasinsky написал(а):
twin лан проехали.

Спустя 2 минуты, 54 секунды (20.03.2010 - 20:46) Игорь_Vasinsky написал(а):
shmit

это ещё без аватара, для аватара столько же сколько для всех придётся написать.

Спустя 24 минуты, 23 секунды (20.03.2010 - 21:11) Игорь_Vasinsky написал(а):
я немного подскажу, а вы сами составти код обработки переданных данных из формы:

с начала

1. нужно исключить из данных - пробелы в конце м в начале
2. удалить все теги php и html
3. Обезапаситься от " ' " "/" или запретить или вырезать
4. Подсчитать кол-во символов - установить лимит

регулярные выражения: (сам не силён - взял с инета)

для проверки login (a-z а-я 0-9 - _):

preg_match("/[^-_a-zа-я]/i",$login)


для проверки password (a-z а-я 0-9 - _):

preg_match("/[^-_a-zа-я]/i",$password)


для ICQ (только цифры)

preg_match("|^[\d]+$|", $icq


для e@mail:

preg_match("%^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)
@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$%"
, $email


для URL:

preg_match("/^((www.)?([\w, -]+.)
(com|net|org|info|biz|spb\.ru|msk\.ru|com\.ru|org\.ru|net\.ru|ru|su|us|bz|ws))$/"
, $url


источник: http://www.yukosh.ru/library/ideas/

Спустя 16 минут, 4 секунды (20.03.2010 - 21:27) twin написал(а):
Цитата
1. нужно исключить из данных - пробелы в конце м в начале
2. удалить все теги php и html
3. Обезапаситься от " ' " "/" или запретить или вырезать
4. Подсчитать кол-во символов - установить лимит

Не надо так делать, еще раз говорю. Ничего вырезать не надо. Пробелы только можно, остальное то зачем? Почему тут на форуме я могу написать <twin> , а ваш скрипт посчитает это за тег и вырежет?

Спустя 21 минута, 41 секунда (20.03.2010 - 21:48) Игорь_Vasinsky написал(а):
twin ну давайте решим раз и навсегда

код пишу я, я решил что в логине и пароле разрешу только разрешённые символы, я допустим не хочу видеть у себя на сайте </Это*<<--->>'Я', достаточно будет и всяких : -АлКоГоЛиК-

рад вашему присутствию. выслушаю конструктивные высказывания

shmit какие символы вы хотите видеть в логине ?

если что есть htmlspecialchars()

Спустя 7 минут, 13 секунд (20.03.2010 - 21:56) ApuktaChehov написал(а):
Цитата (Игорь_Vasinsky @ 20.03.2010 - 21:48)
код пишу я, я решил что в логине и пароле разрешу только разрешённые символы, я допустим не хочу видеть у себя на сайте </Это*<<--->>'Я', достаточно будет и всяких  : -АлКоГоЛиК-

Я, конечно понимаю, что сайт Ваш, но пишите его вы для кого?
Мне было бы обидно, что я не могу зарегистрироваться на сайте, с моим любимым ником, когда на других могу.

К тому же сейчас, на сколько я понял, Вы помогаете писать этот самый сайт shmit -у. Так давай спросим, чего он желает?

Спустя 4 минуты, 24 секунды (20.03.2010 - 22:00) Игорь_Vasinsky написал(а):
Цитата
но пишите его вы для кого?


написано серьёзный проект.

Давайти ка оставим это право выбора shmit

twin - помните о чём я говорил - вот та же картина

Спустя 48 секунд (20.03.2010 - 22:01) shmit написал(а):
Ребят, честно говоря, мне все равно какой будет логин у пользователей, с одной стороны, престиж сайта падает когда на сайте вот такое ( -АлКоГоЛиК- ) но у медали 2 стороны, нужно учитывать мнение пользователей. Я просто хочу хорошую систему регистрации, надежную, удобную, уже второй день читаю как её можно грамотно сделать, много чего не понимаю, надеюсь на Вашу помощь. Мне все равно, это не повод для споров, давайте вместе сделаем хорошую систему, чтобы такие как я не заморачивались потом, а просто брали этот скрипт и пользовались.

Спустя 2 минуты, 13 секунд (20.03.2010 - 22:03) shmit написал(а):
twin, Кирик мне помогал однажды, нормальный чел)))

Спустя 9 минут, 39 секунд (20.03.2010 - 22:13) Игорь_Vasinsky написал(а):
shmit - ну так как там у вас ? продвижение есть ?

Спустя 9 минут, 46 секунд (20.03.2010 - 22:22) twin написал(а):
Цитата
код пишу я, я решил что в логине и пароле разрешу только разрешённые символы, я допустим не хочу видеть у себя на сайте </Это*<<--->>'Я', достаточно будет и всяких : -АлКоГоЛиК-

Это вопросы модерации или премодерации. Можно и из разрешенных символов такой логин состряпать, что мама не горюй. Но декларируется это не как модерация, а как основа безопасности. Что ни какой связи между собой не имеет. Или я не прав:
Цитата
2. удалить все теги php и html
3. Обезапаситься от " ' " "/" или запретить или вырезать

А если у меня ник Mc'Donald, а вы обезопасились и вырезали символ. Приятно будет, если вместо
Игорь_Vasinsky бодет Игорь_ если запретить и вырезать латиницу? Это посягательство на частную жизнь уже.

shmit
Цитата
престиж сайта падает когда на сайте вот такое ( -АлКоГоЛиК- )

Если полагаться в вопросах модерации на технику - престиж не просто будет падать, его изначально не появится.

Спустя 8 минут, 24 секунды (20.03.2010 - 22:31) Игорь_Vasinsky написал(а):
Цитата
Игорь_Vasinsky бодет Игорь_ если запретить и вырезать латиницу? Это посягательство на частную жизнь уже


да чтож это такое blink.gif , при регистрации пишу что в логине можно использывать только разрешённые символы, не нравиться - не регистрируйся smile.gif


Цитата
А если у меня ник Mc'Donald


ни чё страшного - я думаю вас узнают и так McDonald

Спустя 6 минут, 22 секунды (20.03.2010 - 22:37) twin написал(а):
Да страшно. Очень даже страшно. Ну если конечно наплевать на юзеров, то можно и из бабушки дедушку сделать. Только тогда это не ресурс будет, а игрушка для владельца. Есть нормы этики и никому не позволено менять принудительно мои аутентификационные данные. Это моя собственность.
Запретить регаться конечно можно, но тогда потеряете половину потенциального электората.
Хотя вам решать, можно и послать всех лесом.

Спустя 3 минуты, 50 секунд (20.03.2010 - 22:41) Игорь_Vasinsky написал(а):
shmit - как называется ваш ресурс ? Ккакая тематика ? Кто ваш потенциальный посетитель и кого бы вы хотели видеть ?

Спустя 22 минуты, 23 секунды (20.03.2010 - 23:03) shmit написал(а):
Игорь_Vasinsky ,
Моддинг компьютерных системных блоков, полная модернизация корпусов начиная от механических видоизменений заканчивая покраской и аэрографией, тоже самое касается ноутбуков, нетбуков, и частично мобильных телефонов.

Спустя 4 минуты, 23 секунды (20.03.2010 - 23:08) Игорь_Vasinsky написал(а):
Цитата
Кто ваш потенциальный посетитель и кого бы вы хотели видеть ?


Спустя 8 минут, 9 секунд (20.03.2010 - 23:16) shmit написал(а):
Потенциальные клиенты, люди интересующиеся моддингом, предприятия которые хотят видеть свои компьютеры с фирменным логотипом либо другими изменениями.

Спустя 44 секунды (20.03.2010 - 23:17) Игорь_Vasinsky написал(а):
Вообщето вопрос не актуален.

Сдаюсь, на сайте возможны (а по логике и основная масс) людей специфических, а значит ЗДАЮСЬ.

twin будьте последовательны, сказали а - скажите и б - ваше предложение ро обработке данных.... wink.gif

Спустя 8 минут, 41 секунда (20.03.2010 - 23:25) Игорь_Vasinsky написал(а):
будем надеятся что заглянет, можно втихаря записаться в подмасетья и перенять опыт..... cool.gif

Спустя 4 минуты (20.03.2010 - 23:29) shmit написал(а):
)))

Спустя 11 минут, 45 секунд (20.03.2010 - 23:41) twin написал(а):
Дык я не понял, обрабатывать для чего? Если для безопасности, то смотря как будет строиться система. С использованием бд или просто на файлах.

Для модерации максимум в логине нужно убрать пробелы по краям и можно ограничить длину разумными пределами. Пароль нужно проверять только на совпадение с контрольным, и то меня лично это напрягает. Ну рас так уж принято... Можно ограничить минимальную длину пароля (опять же для подстраховки). Потому что во взломе аккаунта в первую очередь обвинят владельца ресурса. Ни кто не станет разбираться, что нерадивый юзер выбрал себе пароль 111.

Все остальное - обработка. Это довольно сложный комплекс мер - корректная обработка данных. Игорь попытался решить задачу - зря плюнул. Разобравшись один раз в этом вопросе, начинаешь совсем по другому смотреть на вещи.

Спустя 5 минут, 58 секунд (20.03.2010 - 23:47) Игорь_Vasinsky написал(а):
Неет. я не плюнул, не вкоем случае,, просто щас я не дома в выходные и комп левый, а задачу я решу, обязательно решу и листинг приведу в соответствии с принятым стандартом.

Я ознакамливаюсь с материалами, изучаю, ставлю акценты. Я даж распечатываю.

Эта задача в дальнейшем мне на хлеб зарабатывать поможет - эсли я хочу делать стоищие сайты.

p.s. Я просто раньше дикарём php осваивал, среди знакомых таких нет, только в инете. вот здесь решил корни пустить, есть на кого равняться, это не только про вас тут таких хватает ребят.

И эта подпись будет висеть до того момента - пока задача на корректную обработку данных не будет решена.

я оч сильно разачаровался по этому результату, у меня ж просили даже на предв проверку...я был уверен.

лан.... усё .. больше не офтоплю.

Спустя 5 минут, 42 секунды (20.03.2010 - 23:53) shmit написал(а):
Хм, так что делаем, читаем учимся и через месяц собираемся?) или как?)

Спустя 6 минут, 38 секунд (20.03.2010 - 23:59) Игорь_Vasinsky написал(а):
ну можно с понедельника продолжать: алгоритм мне известен, безопасность подучу...

а главное был опыт.

а пока спать... меня через личку вызывать.

Спустя 41 секунда (21.03.2010 - 00:00) twin написал(а):
Не думаю что для этого вопроса нужен месяц. Задачу решали ребята, там есть ответы и разборы. Так что ничего страшного. Но решить надо, если хотите действительно профессиональный скрипт.
Там все условия специально так подобраны, что решить её можно только тогда, когда будет все правильно сделано. Неверные решения вызовут отклонения от требований.

Спустя 1 минута, 18 секунд (21.03.2010 - 00:01) Игорь_Vasinsky написал(а):
конечно решим. wink.gif тут же не google пишется.

Спустя 2 дня, 3 часа, 2 минуты, 37 секунд (23.03.2010 - 03:04) shmit написал(а):
twin, у меня вопросик, что именно дырявого в том скрипте , что я выложил, он корявый в плане безопасности, если можно детальнее, и посоветуй пожалуйста литературу по PHP, хочу купить.

Спустя 3 часа, 21 минута, 14 секунд (23.03.2010 - 06:25) Игорь_Vasinsky написал(а):
shmit ну... мы же решили - написать сами... вот и поёмёшь по тихоньку и как написать и как обезопаситься. Вчера чёт тебя не было. в личку стучись к вечеру, начнём.

Спустя 51 минута, 32 секунды (23.03.2010 - 07:17) Игорь_Vasinsky написал(а):
Цель: Разработать страницу с формой и обработчик формы для записи даных в БД, авторизация.

Страница формы поля:

1. Логин (допустимы любые символы)
2. Пароль(допустимы любые символы)
3. Проверка пароля (сравнение)
3. email (проверка на коректность, может активация)
4. ICQ (только цифры)
5. аватар (разрешены gif jpg png не более 34 кб, проверка типа, копирование в директорию, имя на eng - проверить на наличие в папке такого имени)
6. каптча

Обработчик формы и запись в бд

1. Получить данные
2. Обработать данные на предмет xss атак и sql инъекций
3. Проверить на наличие (уникальность) логина в БД
4. Если уникален - то записать данные в бд , если нет - проедложить сменить
5. Запись в БД
6. Защита от повторной записи ( защитимся от "F5")

Авторизация

1. Проверка логин + пароль

Управление пользователями

1. Удаление пользователей из БД







Реализация:

1. Страница с формой листинг index.php


<?php
session_start();
error_reporting(E_ALL);

if (!isset($_SESSION['login']))
{
$_SESSION['login'] = "";
}

if (!isset($_SESSION['email']))
{
$_SESSION['email'] = "";
}

if (!isset($_SESSION['icq']))
{
$_SESSION['icq'] = "";
}

echo "
<form action='add_user.php' method='POST' enctype='multipart/form-data'>
<table>
<tr>
<td>Логин:</td>
<td><input type = 'text' name = 'login' maxlength = '12' value = '"
.$_SESSION['login']."' size = '30'><br /></td></tr>
<tr>
<td>Пароль:</td>
<td><input type = 'password' name = 'pass' maxlength = '12' size = '30'><br /></td></tr>
<tr>
<td>Ещё раз:</td>
<td><input type = 'password' name = 'confirm' maxlength = '12' size = '30'><br /></td></tr>
<tr>
<td>E@mail:</td>
<td><input type = 'text' name = 'email' maxlength = '20' value = '"
.$_SESSION['email']."' size = '30'><br /></td></tr>
<tr>
<td># ICQ:</td>
<td><input type = 'text' name = 'icq' maxlength = '10' value = '"
.$_SESSION['icq']."' size = '30'><br /></td></tr>
<tr>
<td>Аватар:</td>
<td><input type='file' name='file'><br /><td></tr>
<tr>
<td colspan = '2' align = 'center' style = 'font-size:30px; font-weight: bold'>
"
;

// Это не каптча, просто случайное число,
// тут много старших товарищей, которые без желания, а иногда с ним,
// но по просьбе покажут как сделать настоящую каптчу

//записали число и передади его на проверку

echo $captcha = rand(12938, 99999);

//для PHP 4 или ранее session_register('captcha');
$_SESSION['captcha'] = $captcha;

echo "
</td></tr>
<tr>
<td>Код :</td>
<td><input type = 'text' name = 'captcha' maxlength = '5' size = '30'><br /></td></tr>
<tr>
<td colspan = '2'><input type='hidden' name='session_id' value='"
.session_id()."'></td><tr>
<tr>
<td colspan = '2' align = 'center'><input type='submit' value='регистрация нового участника'></td></tr>
</table>
</form>

"
;
?>


2. Обработчик формы и запись в БД листинг add_user.php


<?php
session_start();
error_reporting(E_ALL);

$valid = "true";

// session_register('var'); для PHP 4 и ранее
// $_SESSION['var'] = $var; для PHP 5 и наверно старше

// Проверяем чтобы поле логина не было пустым

if (!empty($_POST['login']))
{
$login = htmlspecialchars(trim($_POST['login']));
$_SESSION['login'] = $login;
}

else
{
echo "Поле Логин - не заполнено ! <br />";
$valid = 'false';
}

// Проверяем чтобы пароль не был пустым

if (!empty($_POST['pass']) && strlen(trim($_POST['pass'])) > 6)
{
$pass = htmlspecialchars(trim($_POST['pass']));
}
else
{
echo "Поле Пароль - не заполнено или содержит менее 6-и символов ! <br />";
$valid = 'false';
}

// Проверяем чтобы подтверждение пароля не был пустым

if (!empty($_POST['confirm']))
{
$confirm = htmlspecialchars(trim($_POST['confirm']));
}
else
{
echo "Введите подтверждение пароля !<br /> ";
$valid = 'false';
}

// Проверяем чтобы пароль и подтверждение пароля - совпадали

if (trim($_POST['pass']) !== trim($_POST['confirm']))
{
echo "Введённые пароли не совпадают!<br />";
$valid = 'false';
}


//Проверяем email

if (empty($_POST['email']))
{
echo "Ведите ваш email !<br />";
$valid = 'false';
}
elseif(!preg_match("/^(?:[a-z0-9_]+(?:[-_]?[a-z0-9]+)?@[a-z0-9]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($_POST['email'])))
{
echo "Проверьте введённый email !<br />";
$valid = 'false';
}
else
{
$email = htmlspecialchars(trim($_POST['email']));
$_SESSION['email'] = $email;
}

//ICQ

if (empty($_POST['icq']))
{
$icq = 'отсутствует';
$valid = 'false';
}
else
{
if (!ereg("[0-9]", $_POST['icq']))
{
echo "Введёный номер ICQ не корректен !<br />";
$valid = 'false';
}
else
{
$icq = trim($_POST['icq']);
$_SESSION['icq'] = $icq;
}
}


// Проверка session_id

if ($_POST['session_id'] !== session_id())
{
echo "<b>Произошла</b> ошибка базы данных !<br />";
$valid = 'false';
}


// Проверка captcha

if (trim($_POST['captcha']) !== trim($_SESSION['captcha']))
{
echo "Не верно введено проверочное число !<br />";
$valid = 'false';
}



//////////////////////////////////////////////////////////////////////////////////////
// Аватара его мы проверяем когда все остальные данные проверены
//////////////////////////////////////////////////////////////////////////////////////

if (!empty($_FILES['file']['name']) && $valid !== "false")
{

// максимальный вес аватара 50 кб
$max_file_size = "50740";

// Каталог куда загружаются аватары - нужно будет создать папку
$avatardir="./avatar";

// допустимые расширения
$valid_types = array("gif","jpg","png","jpeg");

// определяем имя файла
$pic = $_FILES['file']['name'];

// Запоминаем размер файла
$size = $_FILES['file']['size'];

$bag = "Извините. В имени Файла <b>запрещено</b> использовать .php, .html, .htm <br />";
$findtchka=substr_count($pic, ".");
$ext = strtolower(substr($pic, 1 + strrpos($pic, ".")));

// проверяем расширение
if (!in_array($ext, $valid_types))
{
echo '<b style="color:red">ERROR: </b>ФАЙЛ НЕ загружен. Возможные причины:<br />
- разрешена загрузка только файлов с такими расширениями: gif, jpg, jpeg, png<br />
- Вы пытаетесь загрузить не графический файл;<br />
- неверно введён адрес или выбран файл;<br />'
;
$valid = 'false';
}


// считаем кол-во точек в выражении - если большей одной - СВОБОДЕН!
elseif ($findtchka > 1)
{
echo "<b style='color:red'>ERROR: </b>Ошибка загрузки файла! <br />";
$valid = 'false';
}


// если в имени есть .php, .html, .htm - свободен!
elseif (preg_match("/\.php/i",$pic)) {echo $bag. "<br />"; $valid = 'false';}
elseif (preg_match("/\.html/i",$pic)) {echo $bag. "<br />"; $valid = 'false';}
elseif (preg_match("/\.htm/i",$pic)) {echo $bag. "<br />"; $valid = 'false';}


// защищаем от РУССКИХ букв в имени файла и проверяем расширение файла
elseif (!preg_match("/^[a-z0-9\.\-_]+\.(jpg|gif|png|jpeg)+$/is",$pic))
{
echo "<b style='color:red'>ERROR: </b>Запрещено использовать РУССКИЕ буквы в имени файла !<br />";
$valid = 'false';
}


// Проверяем, может быть файл с таким именем уже есть на сервере
/*
elseif (file_exists("$avatardir/$pic"))
{
echo "<b style='color:red'>ERROR: </b>Файл с таким именем уже существует на сервере! Замените имя на другое !<br />";
}
*/

// если вес файла больше разрешённого

elseif ($size > $max_file_size)
{
echo "<b style='color:red'>ERROR: </b>Вы превысили допустимый размер фото! <br/>
Максимально допустимый размер аватара: <b>20</b> Кб.<br />"
;
$valid = 'false';
}


// "Габариты" аватара > 120 х 120 - ДО свиданья! :-)
elseif ($size[0] >150 or $size[1] >150)
{
echo "<b style='color:red'>ERROR: </b>Не допустимые габариты аватара !<br />";
$valid = 'false';
}


// и наконец если аватара подходит - то копируем в указанную папку на сервер
elseif ($size > "0" and $size < $max_file_size)
{
// Переименовываем ("логин".gif) и копируем в папку с аватарами
copy($_FILES['file']['tmp_name'], $avatardir."/".$login.".gif");
// вот новое имя аватар - для БД
$avatar = $login.".gif";
}
}


// если файл не был загружен - провишем юзеру свой
else $pic = 'noavatar.gif';

/////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////



// Если есть ошибка при заполнении формы - то нарисуем ссылку "вернутся"

if ($valid == 'false')
{
echo "<a href='index.php'>вернутся к форме</a>";
}
else
{
//Дамп SQL БД db_users
/*
CREATE TABLE `users` (
id int AUTO_INCREMENT ,
login varchar( 14 ) NOT NULL ,
pass varchar( 16 ) NOT NULL ,
ip varchar( 20 ) NOT NULL ,
date varchar(20) NOT NULL ,
active int NOT NULL ,
ban int NOT NULL,
primary key(id)
)
*/


// Перед добавлением в БД нового пользователя - необходимо определить - занят или свободен желаемый логин
// Подключение БД (использывать в отдельном файле, например config.php и вставлять через include)

define("HOST", "localhost");
define("USER", "root");
define("PASS", "");
define("DB", "users");

// Подключение
$link = mysql_connect(HOST, USER, PASS) or (mysql_error()."<br /> Не могу подключиться к серверу!");

// Выбор базы
mysql_select_db(DB, $link);

// Установка кодировки
mysql_query("SET NAMES utf8");
mysql_query("set character_set_client='utf8'");
mysql_query("set character_set_result='utf8'");
mysql_query("set colltion_connection='utf8_general_ci'");

// теперь папанькина функция
// Убиваем магические кавычки


function stripslashesDeep($data)
{
if(is_array($data))
$data = array_map("stripslashesDeep", $data);
else
$data = stripslashes($data);
return $data;
}

if(get_magic_quotes_gpc())
{
$_GET = stripslashesDeep($_GET);
$_POST = stripslashesDeep($_POST);
$_COOKIE = stripslashesDeep($_COOKIE);
$_REQUEST = stripslashesDeep($_REQUEST);
}

// определим ещё кое что
$ip = $_SERVER['REMOTE_ADDR'];
$date = date("d.m.y");
$login = mysql_real_escape_string($login);
$pass = mysql_real_escape_string($pass);



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

$sql = "SELECT * FROM users WHERE login = '".$login."'";
$result = mysql_query($sql);
$num = mysql_num_rows($result);

// если нашлась хотябы одна строка в базе по нашему запросу, где мы искали логин
if ($num > 0)
{
echo "Данный логин уже занят !<br />";
}
// совпадений не найдено - записываем данные нового пользователя
/*
$login - логин пользователя
$pass - пароль (в md5 не будем маскировать, вдруг понадобиться восстановить)
$email - мыло
$icq - аська
$avatar - аватара
$ip - ...
$date - ...
$active - если будем делать активацию через мыло - 0 , если нет - 1
$ban - 1 - в бане, 0 - прощённый
*/




else
{
mysql_query(" INSERT INTO users (login, pass, ip, date, active, ban) VALUES ('".$login."', '".$pass."', '".$ip."', '".$date."', '0', '0')") or die (mysql_error()."Ошибка добавления нового пользователя !<br />");

// Отправим майл для активации аккаунта mail()
// Формируем письмо:
// мы отправим эту ссылку, а на сайте после получения GET (обоих) - если совпадения есть - то в БД active запишем 1

$to = $email;
$subject = "Регистрация на MySITE.ru";
$message = "
Для активации аккаунта пройдите по ссылке:
(http://www.my_site.ru/activate.php?login="
.$login."&date=".$date.")";
$headers = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: robot@mySite.ru\r\n";
$headers = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: robot@mySite.ru\r\n";

// Если в не надо активации то в БД в active записывай 1 при
//регистрации, а след 4 строки закомментируй


$sendmail = mail($to, $subject, $message, $headers);
if ($sendmail) echo "Спасибо за регистрацию, на ваш email
"
.$email." отправлено письмо с сылкой для активации";
else echo "Произошёл сбой в работе почтового сервера";
}

}


// отключились, потому что электричество надо экономить.
mysql_close();

?>



В общем я почти всё зделал за тебя, вот остальное покажи здесь:

1. activate.php - активация аккаунта
(в самом конце кода описано как реализовать этот момент)

2. administrate.php - удаление, бан участников

може что то ещё по желанию...

Код написан от чайника для чайника и смотрится почти читабельно. будут вопросы пиши.

Спустя 28 минут, 7 секунд (23.03.2010 - 07:45) twin написал(а):
Игорь_Vasinsky

Цитата
2. Пароль (допустимы eng + цифры)

Почему?
Цитата
5. аватар (разрешены gif jpg png не более 14 кб, проверка типа, копирование в директорию, имя на eng - проверить на наличие в папке такого имени)

Не правильный подход. Не нужно ограничивать ни размер, ни вес. Вернее нужно, но не так жестко. Нужно отресайзить и ужать. И уж тем более ни к чему проверять наличие. Переименовать просто уникальным именем.
Цитата
1. Получить данные
2. Обработать на предмет xss атак и sql инъекций
3. Проверить на налочие логина в БД
4. Записать данные в бд
5. Использывание ip и логина для возможного бана
6. Запись в БД
7. Защита от повторной записи ( защитимся от "F5")

Тут сумбурно очень. Никакого порядка нет.
1. Получить данные
2. Проверить корректность заполнения (валидация)
3. Проверить уникальность логина
5. В случае ошибко обработать для вывода и вернуть данные в форму
6. Иначе обработать данные для бд и создать учетную запись
6.1. Сбросить массив POST и прошивку формы.

Цитата
В поле session_id "hidden" мы передадим идентификатор сессии и сравним его с текущим, вдруг умник переделает орму под себя и воспользуется нашим обработчиком.
Кто помешает ему посмотреть сессионную куку? Там есть этот идентификатор.

Спустя 4 минуты, 59 секунд (23.03.2010 - 07:50) twin написал(а):
shmit
Цитата
twin, у меня вопросик, что именно дырявого в том скрипте , что я выложил, он корявый в плане безопасности, если можно детальнее

Детальнее нельзя, времени жалко на детализацию. Но после этой строчки дальше можно не читать.
$result = mysql_query("SELECT * FROM users where username='$username'", $db);

Видно сразу, что афтор далек от реальных вещей и скрипт написан шаляй-валяй.

Спустя 7 часов, 23 минуты, 44 секунды (23.03.2010 - 15:14) yok написал(а):
Такую же задачу решаю, регистрацию. Читаю тему и вот вопрос
это необходимо??? я не задумывался об этом.

----------------------------------
<input type='hidden' name="session_id" value="<?php session_id(); ?>"><br />
-----------------------------------------------------

Даже если подделает форму, какой может быть ущерб??


Спустя 2 часа, 18 минут, 1 секунда (23.03.2010 - 17:32) Игорь_Vasinsky написал(а):
сессия на одном сервере (на котором поддельная форма) - и на другом - где сам обработчик - совершенно разные, а значит проверка не будет пройдена.


Спустя 5 часов, 26 минут, 49 секунд (23.03.2010 - 22:58) shmit написал(а):
Игорь_Vasinsky ,
Постараюсь доделать, если получится, ыыы! Хотя не знаю, что из этого получится.

Спустя 9 минут, 51 секунда (23.03.2010 - 23:08) Игорь_Vasinsky написал(а):
НУ у тебя есть мы тута. пиши, вместе разберём, ещё надо чтоб батька взгляну... всяко много дыр найдёт, зато читать ему понравится.

Спустя 6 часов, 58 минут, 19 секунд (24.03.2010 - 06:07) Игорь_Vasinsky написал(а):
нашёл свой громадный косяк (ну не один.... но про этот расскажу):

в логин (как блин насоветовали) пропускаем всё
а аватар - переименовывается по логину, поэтому может содержать " ' < > и разумеется русские буквы

аватар перед копированием не разрешает пропуск аватара с русск. буквами, так же не допускается в названиях файлов использовать " '

так что нужна регулярка на логин.

или тругая метода преименования аватары

Спустя 36 минут, 14 секунд (24.03.2010 - 06:43) twin написал(а):
Стиль конечно уже лучше, но сам скрипт - полный сумбур.
Чесно говоря, совсем не хочется писать второй мануал. Почитайте хотя бы про основные принципы построения. Не нужно код использовать, просто почитайте.
По стилю - ставь скобки под началом оператора:
    elseif ($findtchka > 1)
{
echo "<b style='color:red'>ERROR: </b>Ошибка загрузки файла! <br />";
$valid = 'false';
}

или так
    elseif ($findtchka > 1){
echo "<b style='color:red'>ERROR: </b>Ошибка загрузки файла! <br />";
$valid = 'false';
}


А по скрипту обратите внимание на защиту пароля, возврат данных в форму (сессия там зря), и разделение логики и отображения.

С магическими кавычками таки перемудрил. Зачем то обработал все подряд уже после того, как получил данные. Вот ты же вынул их:
   if (!empty($_POST['login']))
{
$login = htmlspecialchars(trim($_POST['login']));

зачем после этого чистить массивы?
И для чего там htmlspecialchars()?

Про аватарки отдельный разговор - полный бардак. Научитесь сначала регалку нормальную делать, потом уже с аватарками можно мудрить.

Спустя 23 минуты, 26 секунд (24.03.2010 - 07:06) Игорь_Vasinsky написал(а):
Цитата
И для чего там htmlspecialchars()?


в логине рарешил использовать любые символы, в БД теги записывал бы, а так преобразуе.

По защите пароля, было желание в md5 кодировать, но тогда пришлось бы обходиться без опции васстоновления пароля.

unsure.gif Чёт это бардак, файл принимает проверяет - переименовывает и копирует.

это типа я вот так не делал:

// Инициализация переменных
$user_login = !empty($_POST['user_login'])?$_POST['user_login']:NULL;
$user_password = !empty($_POST['user_password'])?$_POST['user_password']:NULL;

А по поводумоделировать ситуацию, та она смоделирована.

Спустя 20 минут, 31 секунда (24.03.2010 - 07:27) twin написал(а):
Ну, хозяин - барин.
Быстрый ответ:

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