Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > проверочный код


Автор: hripun 15.4.2009, 18:59
Написал форму регистрации вставил код с циферками для проверки , но не могу сделать что бы проверял подленность кода(( любвые цифры вносиш и все равно регит(( что еще нужно ?


Код
 
<form method='post' action='register_new.php'>
           Логин:*<br>(до 16 символов)<br>
        <input type='text' name='username' size=20 maxlength=16><br>
                
           Ник:*<br>(до 16 символов)<br>
        <input type='text' name='usergame' size=20 maxlength=16><br>
           
           Пароль:*<br>(более 6 символов)<br>
        <input type='password' name='passwd' size=20 maxlength=16><br>
                         
           Ещё раз пароль:*<br>
        <input type='password' name='passwd2' size=20 maxlength=16><br>

        <?php $_SESSION["code"]=rand(1000, 99999);?>
               <p>Код проверки:*<br>
        
      &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;<?php echo $_SESSION["code"];?><br>
      
           <input type="text" name="code"size=16> <br><br>                       
        <input type='submit' value='Регистрация'>
     </form>



register_new.php
Код

<?php
   // Включить файлы функций для данного приложения
   require_once('pak_fns.php');

  // Создать короткие имена переменных
  $email=$_POST['email'];
  $username=$_POST['username'];
  $passwd=$_POST['passwd'];
  $passwd2=$_POST['passwd2'];
   $code=$_POST['code'];
   
   // Запустить сеанс, который может потребоваться позже.
   // Его следует запустить сейчас, поскольку он должен
   // находиться перед заголовками.
   session_start();
 
   try
   {
     // Проверить, заполнены ли поля формы
     if (!filled_out($_POST))
     {
        throw new Exception('<h4>Вы не заполнили фору регистрации,<br> ' 
                            .'вернитесь и повторите попытку.
                            </h4><h4> <a href="register_form.php"><<Назад</a></h4>' );
    } 

?>     
      
<?php
     // Недопустимый адрес электронной почты
     if (!valid_email($email))
     {
    throw new Exception('<h4>Недопустимый адрес электронной почты.<br> Пожалуйста, '
                     .'вернитесь и повторите попытку.<h4> <a href="register_form.php"><<Назад</a></h4>');

     } 

     // Несовпадающие пароли 
     if ($passwd != $passwd2)
     {
        throw new Exception('<h4>Введенные пароли не совпадают.<br>Пожалуйста, ' 
                  .'вернитесь и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');
     }

     // Проверить длину пароля.
     if (strlen($passwd) < 1)
     {
        throw new Exception('<h4>Пароль должен иметь не менее 6 символов.<br> ' 
       .'Пожалуйста вернитесь и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');

     }

     // Проверить длину имени пользователя.
     if (strlen($username) > 16)
     {
        throw new Exception('<h4>Логин должен быть не более 16 символов.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');

     }
     // Проверить подленность цифрового пароля.

        if ($_SESSION["code"]==$_POST["code"]) )
       {
        throw new Exception('<h4>Неправильно введен код проверки.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');

       }

     // Предпринять попытку регистрации. Эта функция также
     // генерирует исключение.
     register($username,$usergame, $email, $passwd,$vozrast,$description,$pol);

     // Зарегистрировать переменную сеанса 
     $_SESSION['valid_user'] = $username;
     
     // Вывести ссылку на страницу, предназначенную для 
     // зарегистрированных пользователей
     do_html_header('<h4>Вы успешно зарегистрированы!</h4>');
     echo '<h4>Ваша регистрация прошла успешно.<br>

Автор: NNaarreekk 15.4.2009, 19:32
Сделай:
Код

die($_SESSION["code"].'=='.$_POST["code"]);

и посмотри что выводит.

Если не совпадают а регистрация все равно идет,то $_POST["code"] замени на $code (Может Пост где-то меняется).

Автор: hripun 15.4.2009, 19:39
попробовал :
Код

// Проверить подленность цифрового пароля.

        die($_SESSION["code"].'=='.$code
       {
        throw new Exception('<h4>Неправильно введен код проверки.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');



И так :
Код

// Проверить подленность цифрового пароля.

        die($_SESSION["code"].'=='.$_POST["code"])
       {
        throw new Exception('<h4>Неправильно введен код проверки.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');



Выводит только 
Parse error: parse error, unexpected T_THROW in T:\home\localhost\www\registr\register_new.php on line 68

Автор: enof 15.4.2009, 19:43
Цитата(hripun @  15.4.2009,  19:59 Найти цитируемый пост)
Написал форму регистрации

без знания синтаксиса языка? smile 
точку с запятой поставьте.

Автор: hripun 15.4.2009, 19:48
Да знания очень слабые  по этому и спрашиваю совета!я только учусь всему . Смейся если хочеш ) мне не стыдно спрашивать то что не знаю smile .. а писал сидя с учебником в руках...
только не понял где запятую надо поставить(

Автор: bars80080 15.4.2009, 20:03
так вот же, точка с запятой в конце
Код

die($_SESSION["code"].'=='.$_POST["code"]);

а здесь
Код

echo '<h4>Ваша регистрация прошла успешно.<br>

что за обрыв?

Автор: enof 15.4.2009, 20:05
Цитата(hripun @  15.4.2009,  20:48 Найти цитируемый пост)
Смейся если хочеш )

Я не смеялся, а просто усомнился в том, что код был написан вами, ибо без знаний синтаксиса вообще-то это сложно. smile 
die() - функция(точнее языковая конструкция). В PHP каждая инструкция должна завершаться точкой с запятой, а так как выражение
Код

die($_SESSION["code"].'=='.$_POST["code"])

и является инструкцией, то нужно поставить ;

p.s.
Чтобы прочитать описание любой функции, нужно к адресу http://php.net/ добавить название функции.
http://php.net/die

Автор: hripun 15.4.2009, 20:07
просто до конца код не вставлял ,думал не нужен ) вот что дальше 
Код

do_html_url('login.php', 
                 '<h4>Залогинтесь заного!</h4>');
     // Конец страницы
     do_html_footer(); 
 
   }
      


   catch(Exception $e)
   {
     do_html_header('Ошибка:');
     echo $e->getMessage();
     do_html_footer();
     exit;
   } 
?>


а точка с запятой там не чего не меняет 
с ; в конце вот такая ошибка 
Notice: Undefined index: code in T:\home\localhost\www\registr\register_new.php on line 66
==4324

Автор: bars80080 15.4.2009, 20:12
Цитата(hripun @  15.4.2009,  20:07 Найти цитируемый пост)
а точка с запятой там не чего не меняет  

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

Автор: hripun 15.4.2009, 20:13
Просто ошибки меняются и всё ( а работать не хочет

Автор: enof 15.4.2009, 20:15
Какие ошибки?

Автор: hripun 15.4.2009, 20:19
с таким кодом без кавычек
Код

die($_SESSION["code"].'=='.$_POST["code"])

пишет :
Parse error: parse error, unexpected '{' in T:\home\localhost\www\registr\register_new.php on line 67

с таким кодом
Код

die($_SESSION["code"].'=='.$_POST["code"]);


пишет :
Notice: Undefined index: code in T:\home\localhost\www\registr\register_new.php on line 66
==4324

Во как..

Автор: enof 15.4.2009, 20:23
session_start() ?

Автор: hripun 15.4.2009, 20:26
не пойму вопроса..

Автор: enof 15.4.2009, 20:28
http://php.net/session_start

Автор: hripun 15.4.2009, 20:36
а конуретно ребят кто может сказать как мне исправить ошибку ? просто если убрать проверку 
Код

die($_SESSION["code"].'=='.$_POST["code"]);

этого кода все регит и проверяет отлично.... дело только в этой проверке...

Автор: enof 15.4.2009, 20:42
Вы так далеко не уедите.
Я привел вам ссылку на ман, что именно вам не ясно? Вы хотя бы посмотрели, что там?
Перед использованием сессии нужно ее инициализировать. Для этого и предназначена функция session_start()
Вызывать ее нужно до любого вывода. Почему, поймете потом, когда разберетесь, что из себя представляет протокол http.

Автор: hripun 15.4.2009, 20:52
хех.. Вы мне дали то что я и так смотрю, смотрел и еще долго смотреть буду.... С сесией у меня все норм так как я уже говорил без этой конкретно проверки все норм регится. Я вот думал что какой нить конкретно покажут косяк который у меня не получается и помогут конкретнее его решить...

Автор: enof 15.4.2009, 21:09
Приведите полностью код, который не работает.
Похоже на php.net вы так и не побывали.

Автор: hripun 15.4.2009, 21:12
Код

function display_registration_form()/*регистрация пользователей*/
{
?> 
     <form method='post' action='register_new.php'>
           Логин:*<br>(до 16 символов)<br>
        <input type='text' name='username' size=20 maxlength=16><br>
                
           Ник:*<br>(до 16 символов)<br>
        <input type='text' name='usergame' size=20 maxlength=16><br>
           
           Пароль:*<br>(более 6 символов)<br>
        <input type='password' name='passwd' size=20 maxlength=16><br>
                         
           Ещё раз пароль:*<br>
        <input type='password' name='passwd2' size=20 maxlength=16><br>
                                         
           Email:*<br>
        <input type='text' name='email' size=20 maxlength=100><br>
               
        <?php $_SESSION["code"]=rand(1000, 99999);?>
               <p>Код проверки:*<br>
        
      &nbsp; &nbsp;&nbsp; &nbsp;&nbsp;<?php echo $_SESSION["code"];?><br>
      
           <input type="text" name="code"size=16> <br><br>                       
        <input type='submit' value='Регистрация'>
     </form>


<?php
 }  



Добавлено @ 21:15
Код

<?php
   // Включить файлы функций для данного приложения
   require_once('bookmark_fns.php');

  // Создать короткие имена переменных
  $email=$_POST['email'];
  $username=$_POST['username'];
  $passwd=$_POST['passwd'];
  $passwd2=$_POST['passwd2'];
  $code=$_POST['code'];
   
   // Запустить сеанс, который может потребоваться позже.
   // Его следует запустить сейчас, поскольку он должен
   // находиться перед заголовками.
   session_start();
 
   try
   {
     // Проверить, заполнены ли поля формы
     if (!filled_out($_POST))
     {
        throw new Exception('<h4>Вы не заполнили фору регистрации,<br> ' 
                            .'вернитесь и повторите попытку.
                            </h4><h4> <a href="register_form.php"><<Назад</a></h4>' );
    } 

?>     
      
<?php
     // Недопустимый адрес электронной почты
     if (!valid_email($email))
     {
    throw new Exception('<h4>Недопустимый адрес электронной почты.<br> Пожалуйста, '
                     .'вернитесь и повторите попытку.<h4> <a href="register_form.php"><<Назад</a></h4>');

     } 

     // Несовпадающие пароли 
     if ($passwd != $passwd2)
     {
        throw new Exception('<h4>Введенные пароли не совпадают.<br>Пожалуйста, ' 
                  .'вернитесь и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');
     }

     // Проверить длину пароля.
     if (strlen($passwd) < 1)
     {
        throw new Exception('<h4>Пароль должен иметь не менее 6 символов.<br> ' 
       .'Пожалуйста вернитесь и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');

     }

     // Проверить длину имени пользователя.
     if (strlen($username) > 16)
     {
        throw new Exception('<h4>Логин должен быть не более 16 символов.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');

     }
     // Проверить подленность цифрового пароля.

       die($_SESSION["code"].'=='.$_POST["code"]);
       {
        throw new Exception('<h4>Неправильно введен код проверки.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');

       }

     // Предпринять попытку регистрации. Эта функция также
     // генерирует исключение.
     register($username,$usergame, $email, $passwd,$vozrast,$description,$pol);

     // Зарегистрировать переменную сеанса 
     $_SESSION['valid_user'] = $username;
     
     // Вывести ссылку на страницу, предназначенную для 
     // зарегистрированных пользователей
     do_html_header('<h4>Вы успешно зарегистрированы!</h4>');
     echo '<h4>Ваша регистрация прошла успешно.<br></h4>';
     do_html_url('login.php', 
                 '<h4>Залогинтесь заного!</h4>');
     // Конец страницы
     do_html_footer(); 
 
   }
      


   catch(Exception $e)
   {
     do_html_header('Ошибка:');
     echo $e->getMessage();
     do_html_footer();
     exit;
   } 
?>
<?php vremya_zagruzki();?>

   вот собственно весь код относящийся к тому что нужно

Автор: NNaarreekk 15.4.2009, 21:37
Цитата(hripun @  15.4.2009,  23:12 Найти цитируемый пост)
       die($_SESSION["code"].'=='.$_POST["code"]);
       {
        throw new Exception('<h4>Неправильно введен код проверки.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');
       }


hripun, ЖЖОШЬ!!

Ребят поняли что он сделал??)))))))))

Заменил if($_SESSION["code"]==$_POST["code"]) на die($_SESSION["code"].'=='.$_POST["code"]);!!))


enof, ты был прав на php.net он не зашел!

hripun, изменяешь 62-ю строку:
Код

//Было
 die($_SESSION["code"].'=='.$_POST["code"]);
//изменяешь на
 die($_SESSION["code"].'=='.$_POST["code"]);
if($_SESSION["code"]==$_POST["code"])


И потом пишешь здесь на форуме что выводится в странице....должно выводится или что-то типа:
Код

1234==1234

или
Код

1234==2569

Автор: enof 15.4.2009, 21:45
Цитата(NNaarreekk @  15.4.2009,  22:37 Найти цитируемый пост)
Ребят поняли что он сделал?

Да я сразу понял, потому что die() было названо проверкой, и после этого почему-то ничего не работало.
Хотел чтобы сам дошел, видимо не нужно это smile 

Автор: hripun 15.4.2009, 21:55
Заменил все как написали... но вот теперь что пишет 

Parse error: parse error, unexpected T_THROW in T:\home\localhost\www\registr\register_new.php on line 64

ругается на эту строчку-   throw new Exception('<h4>Неправильно введен код проверки.<br>' . ' Пожалуйста вернитесь  и повторите попытку.</h4><h4>



Автор: enof 15.4.2009, 22:00
Это синтаксическая ошибка, без кода понять, в чем именно косяк, невозможно.

Автор: NNaarreekk 15.4.2009, 22:03
Если честно то я вообще не понимаю что это за throw new Exception!
В РНР есть такая штука или рукописная?

Автор: enof 15.4.2009, 22:09
NNaarreekk,  smile исключительные ситуации.

Автор: hripun 15.4.2009, 22:17
throw new Exception! я если честно сам слабо догояю что такое((( так написано в книге по PHP там кстати написано то что мне Enof давал в ссылке..
Я уже говорил что только учусь всему .. но  понять из книг без чьей то помощи мне очегь тяжко ,по тому как там сильно заумно написано ..

Написано примерно это ---Ключевое слово throw (от англ. - выбросить) предназначено для того, чтобы передать управление блоку catch.

Для передачи текста ошибки в блок обработки исключения мы использовали класс Exception

Автор: NNaarreekk 15.4.2009, 22:29
hripun, выброси эту книгу на х.... к черту!
Для новичка такие штучки не нужны... Сначала сделай обычным echo, a потом если захочешь чтоб твой код никто не понял перейди на эти throw! smile 

т.e.:
Код

     if (!valid_email($email))
     {
    echo'<h4>Недопустимый адрес электронной почты.<br> Пожалуйста, '
                     .'вернитесь и повторите попытку.<h4> <a href="register_form.php"><<Назад</a></h4>';
     } 
//это к примеру!

Автор: enof 15.4.2009, 22:37
NNaarreekk, В ваших постах чувствуется высокомерие и это выглядит смешно, особенно фразы типа этой
Цитата(NNaarreekk @  15.4.2009,  23:29 Найти цитируемый пост)
если захочешь чтоб твой код никто не понял перейди на эти throw!

hripun, Что за книга? Купите нормальную. smile 

Автор: hripun 15.4.2009, 22:40
последую совету ) хотя и эта книга не плоха..только не для моих мозгов ведат)) вы мне можете посоветовать хоть что то по данной теме вопроса ? как сделать эту чертовы проверку ????????

Автор: NNaarreekk 15.4.2009, 22:42
hripun, везде измени эти trow на echo и потом посмотри что выдаст.
Там уже видно будет.

Автор: hripun 15.4.2009, 22:53
заменил ... тоже самое тока вид с боку 

Parse error: parse error, unexpected T_ECHO in T:\home\localhost\www\registr\register_new.php on line 64

Автор: NNaarreekk 15.4.2009, 23:03
Это значит ; забыл поставить...посмотри строкой выше что не так!

Автор: bars80080 16.4.2009, 00:11
user posted image

Автор: Photon 16.4.2009, 05:32
Лично у меня только один вопрос:
в том файле, где определяется (а лучше в том, где используется) функция display_registration_form вообще есть session_start()

Если его там нет, так какого ж пихать в $_SESSION['code'] какие-то значения? smile

Автор: hripun 16.4.2009, 10:22
вообще эта строка,отвечает за остановку выполнения сценариев, если код безопасности введен не верно:
Код

die($_SESSION["code"] == $_POST["code"]);


throw new Exception нужен для генерации исключений, напр. не введено имя /пароль,он выдает сообщение об ошибке..

Вот что было у меня изначально:
Код

 die($_SESSION["code"] == $_POST["code"]);
       {
        throw new Exception('<h4>Неправильно введен код проверки.<br>' 
       .' Пожалуйста вернитесь  и повторите попытку.</h4><h4> <a href="register_form.php"><<Назад</a></h4>');
       }


при замене die на if упорно выдает ошибку,
однако при замене throw new Exception  на echo регистрация проходит,но код безопасности не проверяеться,так что менять смысла нет.

Добавлено через 9 минут и 56 секунд
Photon  session_start() конечно же имееться,и стоит там,где ему нужно стоять.
Дальше начинаеться блок try,в котором и происходит вся работа.

Автор: hripun 16.4.2009, 10:46
Думаю вся проблема в том,что нужно дописывать в throw new Exception какие то параметры,а не тупо заменять одно другим.

Автор: Photon 16.4.2009, 12:58
Короче, весь код в студию.  И тот, где вызывается display_form_registration, и тот, где происходит обработка. С указанием имен файлов, в которых этот код лежит.

Автор: hripun 16.4.2009, 13:06
пробывал заменять 
Код
if($_SESSION["code"]==$_POST["code"]);

   
и в registration_form так же ставить session_start();...Начинаю регистрироваться - пишет не правильно введен пароль..


Автор: hripun 16.4.2009, 13:27
[code=php]
<?php 
 require_once('bookmark_fns.php');
 do_html_header('Регистрация пользователей');
 session_start();
 pravila_registracii();
 display_registration_form();
 do_html_footer();
 ?>

Автор: Photon 16.4.2009, 13:27
Бля..
Код

session_start();
if ($_SESSION['code'] != $_POST['code']) {
    echo "Мудак, неправильный код проверки";
}


Хрен ли после if делает точка с запятой?

А в другом файле:

Код

session_start();
display_registration_form();

Автор: hripun 16.4.2009, 13:43
Ну что тут скажешь..надо быть внимательнее к мелочам)  Спасибо за помощь   smile 

Автор: Shark 16.4.2009, 14:45
а зачем нужна эта
Код

$code=$_POST['code'];
 строчка, если все равно пишем так: 
Код

if ($_SESSION['code'] != $_POST['code']) {
    echo "Мудак, неправильный код проверки";
}
???
в таком случае либо вообщене писать строчку $code=$_POST['code'];, либо писать так:
Код

if ($_SESSION['code'] != $code) {
    echo "Мудак, неправильный код проверки";
}


и безопаснее писать так:
Код

  $email=trim(htmlspecialchars($_POST['email']));
  $username=trim(htmlspecialchars($_POST['username']));
  $usergame=trim(htmlspecialchars($_POST['usergame']));
  $passwd=trim(htmlspecialchars($_POST['passwd']));
  $passwd2=trim(htmlspecialchars($_POST['passwd2']));
  $vozrast=trim(htmlspecialchars($_POST['vozrast']));
  $description=trim(htmlspecialchars($_POST['description']));
  $pol=trim(htmlspecialchars($_POST['pol']));
  $code=trim(htmlspecialchars($_POST['code']));

Автор: Photon 16.4.2009, 21:03
С тем, что идет в строку запроса MySQL, надо делать так:

Код

$username = mysql_real_escape_string($_POST['username']);


Или использовать mysqli:

Код

mysqli_query('insert into table (login) values(?)',array($_POST['username']));

Автор: hripun 17.4.2009, 10:44
Всё, общими усилиями теперь все работает ))) 
еще один воарос ) как сделать что бы нельзя было зайти на страницу незарегистрированному пользователю? 

Автор: Shark 17.4.2009, 10:51
hripun, одна тема - один вопрос! прочитай правила.. но тут я теб напишу.

если пользователь зареген, но не авторизован можно написать так:
Код

if(empty($_SESSION['login']))
{
echo "Вы не авторизованы. Страница закрыта дя просмотра";
}
else
{
eho "Вы успешно авторизовались. Сотрите страницу";
}

это просто как пример.
чтоб пользователь мог авторизоваться, пишешь форму с 2-мя полями Логин и Пароль... далее по БД сравниваешь введнные данные и если все верно создаешь сессию $_SESSION['login']... и все.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)