Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 04:09   #1
kartixa
 
Регистрация: 20.08.2010
Сообщений: 2
Восклицание Неочень правельный скрипт

Привет все.. ребят помогите разобратса са скриптом регистрации что-то он у меня не так работет как пологаетса ему.. в нем я насчитал уже 2 ошибки..
1) при регистрации нового юзера, скрипт не проверяет есть ли в базе сходства ника
2) скрипт если незаполнены формы та или иная он непоказивает что юзер не заполнил ту или иную форму лад не буду томить вот исходник..

В скрипте нечего не менял только добавил таблицы

PHP код:
<?
include('connectdb.php');

if ((
$_POST['login']!='') || 
    (
$_POST['pass1']!='') || 
    (
$_POST['pass2']!='') || 
    (
$_POST['email']!='')) { 
    
$pass1 $_POST['pass1'];
    
$pass2 $_POST['pass2'];

    if (
strcmp($pass1$pass2) == 0) {
      
$login $_POST['login'];
      
$email $_POST['email'];

      
$sql='SELECT * FROM users WHERE login='.$login
      if (!(
$res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) {
      
$sql 'INSERT INTO users(login, pass, email) 
          VALUES("'
.$login.'", "'.$pass1.'", "'.$email.'")';
      if(
mysql_query($sql)) {
        echo 
'Пользователь '.$_POST['login'].' успешно зарегистрирован! <a href="/index.php">Форма для входа</a>.';
      } else {
        echo 
'При регистрации произошла ошибка, <a href="/register.php">повторите попытку</a>.';
      }
    } else echo 
'Пользователь с таким логином уже зарегистрирован!';
    } else echo 
'Введенные пароли не совпадают, <a href="/register.php">повторите попытку</a>.';
} else {
?>
<form method='post' action='/register.php'>
<BODY BGCOLOR="#000000"><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<CENTER>
<TABLE BORDER WIDTH="30%" WIDTH="50%">
        <TR>
                <TD BGCOLOR="#a9a9a9">Введите Логин:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type='text' size='30' name='login' /></TD>
        </TR>
        <TR>
                <TD BGCOLOR="#a9a9a9">Введите e-mail:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type=text size=30 name='email' /></TD>
        </TR>
        <TR>
                <TD BGCOLOR="#a9a9a9">Пароль:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type='password' name='pass1' size='30' /></TD>
        </TR>
        <TR>
                <TD BGCOLOR="#a9a9a9">Повторите пароль:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type='password' name='pass2' size='30' /></TD>
        </TR>
        <TR>
                <TD COLSPAN=2 ALIGN=center BGCOLOR="#a9a9a9"><input type='submit' value='Зарегистрируйте меня!' /></TD>
        </TR>
</TABLE>
</CENTER>
<? 
}
?>
kartixa вне форума Ответить с цитированием
Старый 22.05.2011, 11:30   #2
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

правильнее было назвать тему "очень неправильный скрипт".
гавно во всем:
PHP код:
<? 
include('connectdb.php'); //что за скобки?

//оператор "ИЛИ" подразумевает, что если хоть одно поле заполнено, значит все хорошо
if (($_POST['login']!='') ||  
    (
$_POST['pass1']!='') ||  
    (
$_POST['pass2']!='') ||  
    (
$_POST['email']!='')) {  
    
$pass1 $_POST['pass1']; 
    
$pass2 $_POST['pass2']; 

    if (
strcmp($pass1$pass2) == 0) { 
      
$login $_POST['login']; 
      
$email $_POST['email']; 

      
//зачем проверять всю таблицу если нам достаточно одного совпадения?
      
$sql='SELECT * FROM users WHERE login='.$login
      
      
//что за логика "НЕ ИЛИ"? в данном случае она точно не уместна
      
if (!($res=mysql_query($sql)) || (mysql_num_rows($res) == 0)) { 
      
$sql 'INSERT INTO users(login, pass, email)  
          VALUES("'
.$login.'", "'.$pass1.'", "'.$email.'")'
      if(
mysql_query($sql)) { 
        echo 
'Пользователь '.$_POST['login'].' успешно зарегистрирован! <a href="/index.php">Форма для входа</a>.'
      } else { 
        echo 
'При регистрации произошла ошибка, <a href="/register.php">повторите попытку</a>.'
      } 
    } else echo 
'Пользователь с таким логином уже зарегистрирован!'
    } else echo 
'Введенные пароли не совпадают, <a href="/register.php">повторите попытку</a>.'
} else { 
?> 

<?  

?>
Код:
<form method='post' action='/register.php'> <!---слеш тут нафиг не нужен... с каких это пор, форма открывается перед тегом body?--->
<BODY BGCOLOR="#000000"><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> <!---дивная конструкция из кучи переносов строки ))---> 
<CENTER> <!---если заботишься о валидности, забудь тег center--->
<TABLE BORDER WIDTH="30%" WIDTH="50%"> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Введите Логин:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type='text' size='30' name='login' /></TD> 
        </TR> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Введите e-mail:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type=text size=30 name='email' /></TD> 
        </TR> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Пароль:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type='password' name='pass1' size='30' /></TD> 
        </TR> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Повторите пароль:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type='password' name='pass2' size='30' /></TD> 
        </TR> 
        <TR> 
                <TD COLSPAN=2 ALIGN=center BGCOLOR="#a9a9a9"><input type='submit' value='Зарегистрируйте меня!' /></TD> 
        </TR> 
</TABLE> 
</CENTER> 
<!---у формы предусмотрен закрывающий тег не просто так--->
нет даже примитивной защиты от ввода левых данных

Последний раз редактировалось Mortimoro; 22.05.2011 в 11:35.
Mortimoro вне форума Ответить с цитированием
Старый 22.05.2011, 11:46   #3
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

PHP код:
<? 
include "connectdb.php"

//проверяем наличие post-запроса формы, если его нет, даем пользователю форму
if(isset($_POST['submit']))
{
    
//объявляем переменные и чистим их от тегов (примитивная защита), в идеале неплохо еще проверить регуляркой на корректность вводимого e-mail, минимальную и максимальную длину логина и пароля.
    
$pass1=strip_tags($_POST['pass1']);
    
$pass2=strip_tags($_POST['pass2']);
    
$login=strip_tags($_POST['login']);
    
$email=strip_tags($_POST['email']);

    
//для проверки используем оператор "И", а не "ИЛИ", как в вышеуказанном примере
    
if($login!='' && $pass1!='' && $pass2!='' && $email!='')
    {
        
//проверяем равность паролей
        
if(strcmp($pass1,$pass2)==0)
        {
            
//ставим LIMIT 1, чтобы не шмонать всю таблицу после того, как значение уже найдено
            
$sql=mysql_query("SELECT * FROM `users` WHERE `login`='".$login."' LIMIT 1");
            
//если в MySQL поставить полю `login` тип UNIQUE, то можно обойтись и без этой проверки - при наличии такого же логина, MySQL просто вернет ошибку и не даст записать нового пользователя. Одним запросом будет меньше.
            
if(mysql_num_rows($sql)==0)
            {
                if(
mysql_query("INSERT INTO `users`(`login`,`pass`,`email`) VALUES('".$login."','".$pass1."','".$email."')"))
                {
                    echo 
'Пользователь '.$login.' успешно зарегистрирован! <a href="index.php">Форма для входа</a>.';
                }
                else echo 
'При регистрации произошла ошибка.';
            }
            else echo 
'Пользователь с таким логином уже зарегистрирован!';
        }
        else echo 
'Введенные пароли не совпадают.';
    }
    else echo 
'Все поля формы должны быть заполнены.';
}
else echo 
'
<form method="post" action="register.php"> 
<TABLE BORDER WIDTH="30%" WIDTH="50%"> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Введите Логин:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type="text" size="30" name="login" /></TD> 
        </TR> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Введите e-mail:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type=text size=30 name="email" /></TD> 
        </TR> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Пароль:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type="password" name="pass1" size="30" /></TD> 
        </TR> 
        <TR> 
                <TD BGCOLOR="#a9a9a9">Повторите пароль:</TD> <TD ALIGN=center BGCOLOR="#a9a9a9"><input type="password" name="pass2" size="30" /></TD> 
        </TR> 
        <TR> 
                <TD COLSPAN=2 ALIGN=center BGCOLOR="#a9a9a9"><input type="submit" name="submit" value="Зарегистрируйте меня!" /></TD> 
        </TR> 
</TABLE>
</form>
'
;
?>
Mortimoro вне форума Ответить с цитированием
Старый 22.05.2011, 21:15   #4
kartixa
 
Регистрация: 20.08.2010
Сообщений: 2
По умолчанию

Mortimoro огромнейшее тибе спс)))) за такое четкое исправление и обьяснение
kartixa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрипт tag Общие вопросы Delphi 5 21.04.2011 23:22
мой сайт взломали и в коды скриптов добавили вот этот скрипт. Что за скрипт? nsbox JavaScript, Ajax 9 21.01.2010 18:19
Скрипт обработчик eldar PHP 5 11.09.2009 19:03
Скрипт pop Under (скрипт попандера) Jensi JavaScript, Ajax 2 13.07.2009 00:17
C#(скрипт) Paranoic Общие вопросы .NET 4 25.04.2008 16:13