За последние 24 часа нас посетили 15940 программистов и 1548 роботов. Сейчас ищут 993 программиста ...

Условие проверки кода капчи

Тема в разделе "Сделайте за меня", создана пользователем alekspvn, 15 окт 2017.

Метки:
  1. alekspvn

    alekspvn Новичок

    С нами с:
    15 окт 2017
    Сообщения:
    2
    Симпатии:
    0
    Ребят помогите пожалуйста написать условие проверки капчи, не пойму как правильно написать. У меня данные с формы должны отправялтьсяя методом POST в файл insert.php , все нормально отправляется, файл captcha.php рисует защитный код, но когда я ввожу провверочные данные , хоть правильно хоть неправильно , все равно данныех с формы записываются в БД. Мне нужно чтоб выдавало ошибку КАПЧИ. и прерывало выполнение, до тех пор пока не будет введён правильный проверочный код.

    index.php
    Код (Text):
    1. <form action="/data/insert.php" method="POST" id="guest-form" name="reg">
    2.     <input id="username" type="text" name="name" placeholder="Username">
    3.     <input id="email" type="text" name="email" placeholder="E-mail">
    4.     <textarea id="message" type="text" name="text" placeholder="Your message"></textarea>
    5.     <img src="data/captcha.php" alt="Картинка" /><br />
    6.     <input id ="captcha" type="text" name="captcha" placeholder="Verify code" /><br />
    7.  
    8.     <input id="submit" class="btn btn-default" type="button" value="Submit">
    9.  
    10. </form>

    Ajax


    Код (Text):
    1. $(document).ready(function(){
    2.             $('#submit').click(function(){
    3.                 var username = $('#username').val();
    4.                 var email = $('#email').val();
    5.                 var message = $('#message').val();
    6.                 var captcha = $('#captcha').val();
    7.                 if(username ===''){
    8.                     alert('Please input data in all fields');
    9.                 }
    10.                 else{
    11.                 $.ajax({
    12.                     type:"POST",
    13.                     cache:false,    
    14.                     url:'/data/insert.php',
    15.                     data:{username: username, email: email, message: message, captcha: captcha},
    16.                     success:function(data){
    17.                     }
    18.                 });
    19.             }
    20.             });
    21.         });
    Insert.php обработчик

    Код (Text):
    1. require_once 'db.php';
    2. session_start();
    3. if(isset($_SESSION["captcha"])&& $_SESSION["captcha"]===$_POST["captcha"]){
    4.     dataInsert();
    5. }
    6. else{
    7.    echo 'error captcha';
    8. }
    9.     unset($_SESSION["captcha"]);
    10.     function dataInsert(){
    11.   if(isset($_POST['username'])&& isset($_POST['email'])&& isset($_POST['message'])){
    12.  
    13.     $username = $_POST['username'];
    14.     $email = $_POST['email'];
    15.     $message = $_POST['message'];
    16.  
    17.     $db_host ="localhost";
    18.     $db_user ="alekspvn";// Логин БД
    19.     $db_password ="123";// Пароль БД
    20.     $db_table ="book";// Имя Таблицы БД
    21.  
    22. $connect_db=mysql_connect(HOST, MYSQL_USER, MYSQL_PASS)
    23.     ordie("No connection with SQL");
    24.  
    25.     mysql_select_db("guests_db",$connect_db);
    26.  
    27.     mysql_query("SET NAMES 'utf8'",$connect_db);
    28.  
    29.     $result = mysql_query ("INSERT INTO ".$db_table." (username,email,message) VALUES ('$username','$email','$message')");
    30.  
    31.     if($result ='true'){
    32.         echo "Информация занесена в базу данных";
    33.     }else{
    34.         echo "Информация не занесена в базу данных";
    35.     }
    36. }
    37.     }
    38.     print_r ($_SESSION["captcha"]);
    Переменная в которой формируется проверочный код $_SESSION["captcha"] и файл capcha.php у меня нигде не подключен в индексе указан путь для рисования изобрадения. Может стоит его в обработчике подключить? или эта переменная с проверочным кодом считается глобальной? если что, вот проэкт на репозитории https://bitbucket.org/alekspvn/guestbook/src/75c6a451988b5bb58237c9e254e27f37e26d81a5?at=bit_master
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    Чу?
     
  3. alekspvn

    alekspvn Новичок

    С нами с:
    15 окт 2017
    Сообщения:
    2
    Симпатии:
    0
    "изображения", опечатался
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    пример

    index.php
    PHP:
    1. <?php
    2.  
    3. error_reporting ( E_ALL );
    4.  
    5. if ( version_compare ( PHP_VERSION, '7.1.0', '<' ) )
    6. {
    7.     die ( 'Error: Please, update module PHP ver ' . PHP_VERSION . ' ver < 7' );
    8. }
    9.  
    10.  
    11. if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
    12. {
    13.     $args = [
    14.         'name' => FILTER_SANITIZE_FULL_SPECIAL_CHARS,
    15.         'email' => FILTER_VALIDATE_EMAIL,
    16.         'text' => FILTER_DEFAULT,
    17.         'captcha' => FILTER_DEFAULT
    18.     ];
    19.  
    20.     $INPUTS = filter_input_array ( INPUT_POST, $args );
    21.  
    22.     if ( in_array ( NULL, $INPUTS, TRUE ) )
    23.     {
    24.         $E = 'Undefined inputs :(';
    25.     }
    26.     elseif ( in_array ( FALSE, $INPUTS, TRUE ) )
    27.     {
    28.         $E = 'Данные введены некорректно или один из полей не заполнен';
    29.     }
    30.     elseif ( $INPUTS['captcha'] !== ( $_SESSION['captcha'] ?? NULL ) )
    31.     {
    32.         $E = 'Проверка капчи не пройдена';
    33.     }
    34.  
    35.     if ( isset ( $E ) )
    36.     {
    37.         exit ( $E );
    38.     }
    39.  
    40.     exit ( 'insert... okay' );
    41. }
    42.  
    43. $_SESSION['captcha'] = password_hash ( mt_rand (), PASSWORD_DEFAULT );
    44.  
    45. require 'form.php';
    form.php
    HTML:
    1. <!DOCTYPE html>
    2.     <title>11111</title>
    3.     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    4.     <script>
    5.     $( function()
    6.     {
    7.         $( 'body' ).on( 'submit', 'form.AJAX', function( e )
    8.         {
    9.             e.preventDefault();
    10.          
    11.             var formData = new FormData( $( this ).get(0) );
    12.          
    13.             $.ajax(
    14.             {
    15.                 url: $( this ).attr( 'action' ),
    16.                 type: $( this ).attr( 'method' ),
    17.                 contentType: false, // важно - убираем форматирование данных по умолчанию
    18.                 processData: false, // важно - убираем преобразование строк по умолчанию
    19.                 data: formData,
    20.                 dataType: 'HTML',
    21.                 success: function( h )
    22.                 {
    23.                     $( '#ERRMSG' ).html( h );
    24.                 }
    25.             });
    26.         });
    27.     });
    28.     </script>
    29. </head>
    30.     <div id="ERRMSG"></div>
    31.     <form action="/" method="POST" class="AJAX">
    32.         <input id="username" type="text" name="name" placeholder="Username">
    33.         <br>
    34.         <input id="email" type="text" name="email" placeholder="E-mail">
    35.         <br>
    36.         <textarea id="message" type="text" name="text" placeholder="Your message"></textarea>
    37.         <br>
    38.         <input id ="captcha" type="hidden" name="captcha" value="<?= $_SESSION['captcha'] ?>">
    39.         <br>
    40.         <input id="submit" class="btn btn-default" type="submit" value="Submit">
    41.     </form>
    42. </body>
    43. </html>