如果captcha是错误的,请保持填写字段(PHP或JavaScript?)


If captcha is wrong, keeping the fields filled out (PHP or JavaScript?)

我制作了一个包含许多字段的表单。我的旧captcha过时了,所以我不得不用一个新的(我选择谷歌的reCaptcha)。使用旧的captcha,如果人们填错了,他们可以点击"返回"或这个链接(我放在handlingdata.php页面上):

<a href='"javascript:history.go(-1)'">go back and try again</a>

然后他们在田野里的所有答案都会在那里。但在我把它改成谷歌的reCaptcha后,如果人们忘记点击"我不是机器人"-勾选框并提交表格;-如果它们返回,那么所有字段都是空的。

那么我该如何解决这个问题呢?

我正在考虑将$_POST-array传递给$_SESSION-variable。因此,如果他们点击返回,那么HTML字段将看起来像这样:

<input type="text" name="foobar" placeholder="foobar" 
   value="<?php echo $_SESSION['foobar']; ?>" />

但这真的是办法吗?我不是第一个偶然发现这个的人

处理$_POST数据时:

session_start();
$_SESSION["postvars"] = $_POST;

然后在表单页面上:

session_start();
<input type="text" 
    name="foobar" 
    placeholder="foobar" 
    value="<?php echo (isset($_SESSION["postvars"]) ? $_POST["postvars"]["foobar"] : ""); ?>>

对于下拉菜单:

<select name="barfoo">
    <option value="foo" <?php echo (isset($_SESSION["postvars"]) ? ($_SESSION["postvars"]["barfoo"]=="foo" ? "selected" : "") : "" ); ?>
    <option value="bar" <?php echo (isset($_SESSION["postvars"]) ? ($_SESSION["postvars"]["barfoo"]=="bar" ? "selected" : "") : "" ); ?>
    <option value="example" <?php echo (isset($_SESSION["postvars"]) ? ($_SESSION["postvars"]["barfoo"]=="example" ? "selected" : "") : "" ); ?>
</select>