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

Когда я заполняю правильный ответ на CAPTCHA, все работает нормально. После неправильного ответа выдается предупреждающее сообщение, а затем поле CAPTCHA отображается пустым.

<?php
session_start();
  $math='';
if(!isset($_POST['submit1']))
{
$digit1 = mt_rand(1,20);
    $digit2 = mt_rand(1,20);
    if( mt_rand(0,1) === 1 ) {

            $math = "$digit1 + $digit2";
            $_SESSION['ccanswer'] = $digit1 + $digit2;
    } else {

            $math = "$digit1 - $digit2";
            $_SESSION['ccanswer'] = $digit1 - $digit2;
    }
}

include('inc/subheader.php');
require "connection.php";

if(isset($_POST['submit1']))
{


        $xyzname=$_SESSION['XYZname'];
         $correct_answer=$_SESSION['ccanswer'];
        $answerRR=$_POST['answer1'];
         if($correct_answer==$answerRR){
            $sql="SELECT pwd FROM  logins WHERE username = '".$xyzname."' and encrypt_pwd='".$_POST['opwd']."'";
            $result1 = pg_query($pgcon,$sql);
            $num=pg_num_rows($result1);

            if($num>0)
            {

            $updatephoto ="UPDATE xyz set encrypt_pwd='".$_POST['npwd']."' where username='".$xyzname."'";
            pg_query($updatephoto);
            echo "<script>alert('Your password has been reset successfully!');</script>";
            }
            else
            {

                echo "<script>alert('Sorry, there is no match for that password.');</script>";
            }   

                        }else{

                            echo  "<script>alert('Invalid captcha');</script>";
                            $_SESSION['ccanswer']='';
                        }



            }
?>



    <form name="chngpwd" action="" method="post" id="demo">
                <div class="form-group">
                        <label for="exampleInputPassword1">Old Password</label>
                  <input type="password" class="form-control" id="opwd" required placeholder="Old Password" name="opwd" onkeypress="return blockSpecialChar(event)">

                </div>
                 <div class="form-group">
                        <label for="exampleInputPassword1">New Password</label>
                  <input type="password" class="form-control" id="npwd" name="npwd" required placeholder="New Password" onkeypress="return blockSpecialChar(event)">

                </div>
                 <div class="form-group">
                        <label for="exampleInputPassword1">Confirm Password</label>
                  <input type="password" class="form-control" data-rules-equalTo="#npwd" required id="cpwd" placeholder="Confirm Password" onkeypress="return blockSpecialChar(event)">

                </div>
                                <div class="form-group">
                 <label for="exampleInputPassword1">Captcha</label>
               <input id="answer1" name="answer1" type="text" placeholder="<?php echo $math; ?>" class="form-control" required="required" data-validation-required-message="Please enter Captcha Code."/>
                <p class="help-block text-danger"><?php if(isset($_GET['msg'])) { echo "Invalid Captcha Code.";}?></p>
                </div>
                 <div class="box-footer">
                <button type="submit" class="btn btn-primary" name="submit1" value="Change Passowrd" >Submit</button>
              </div>
          </form>

Я хочу, чтобы поле CAPTCHA не было пустым после сообщения об ошибке.

Я не нашел ошибку, но поле показывает пустое под CAPTCHA.

Я попытался перезагрузить страницу, после чего она работает нормально, но форма, которая была заполнена ранее, не показывает значения.


person sumit kundan    schedule 27.06.2019    source источник
comment
Пожалуйста, прочитайте, как опубликовать вопрос на SO, и переформатируйте свой вопрос, это нечитабельно.   -  person Cyprien Aubry    schedule 27.06.2019
comment
Пожалуйста, проверьте, я переформатировал вопрос   -  person sumit kundan    schedule 27.06.2019
comment
Вы имеете в виду, что хотите предварительно заполнить поле ввода текста, в которое пользователь должен ввести решение CAPTCHA, снова введенным значением? Почему? Какая польза от этого, учитывая, что вы должны с самого начала отображать новую CAPTCHA в случае каких-либо ошибок при отправке формы?   -  person 04FS    schedule 02.07.2019
comment
После заполнения неправильного ответа математика капчи не вычисляется, как пользователь узнает о том, что нужно заполнить   -  person sumit kundan    schedule 04.07.2019


Ответы (1)


Вам нужно указать неверный ответ в поле «значение» следующим образом:

... input type="text" value="<?php echo $variable;?>" ...

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

person Ilya Shevyryaev    schedule 02.07.2019
comment
Не могли бы вы рассказать мне, как я могу использовать экранирование переменных, чтобы избежать инъекций? - person sumit kundan; 04.07.2019
comment
Я помещаю неправильный ответ в поле значения, он показывает неправильный ответ в поле, но как пользователь узнает о математике, которую необходимо вычислить, потому что математическая переменная показывает пустое значение - person sumit kundan; 04.07.2019