gpt4 book ai didi

php - 使用 Form Key 和 AJAX 提交表单

转载 作者:搜寻专家 更新时间:2023-10-31 21:42:36 29 4
gpt4 key购买 nike

全部,我有以下类,用于检查通过 HTML 创建的表单是否有效,并且如果有人执行 ctrl+F5 等,还可以防止表单提交两次。这是执行此操作的类:

<?php
class Form_Key
{

protected $oldKey;

public function __construct()
{

// Ensure we have an available session
if ( NULL == session_id() )
{
session_start();
}

// Grab our former key for validation
if ( isset( $_SESSION['form_key'] ) )
{
$this->oldKey = $_SESSION['form_key'];
}

// Assign the new key
$_SESSION['form_key'] = md5( uniqid( mt_rand(), TRUE ) );

}

public function isValid()
{
return 'POST' == $_SERVER['REQUEST_METHOD']
&& isset( $_POST['form_key'] )
&& '' != trim( $_POST['form_key'] )
&& '' != trim( $this->oldKey )
&& $_POST['form_key'] === $this->oldKey;
}

public function getKey()
{
return $_SESSION['form_key'];
}

public function getOldKey()
{
return $this->oldKey;
}

public function render()
{
return '<input type="hidden" name="form_key" value="' . $_SESSION['form_key'] . '" />';
}

public function __toString()
{
return $this->render();
}

}
?>

然后我有一个看起来像这样的表单:

require "form_key.php";
$form_key = new Form_Key;
<form action="about.php" method="post" name="create_memory" id="create_memory">
<input type="text" value="" id="lamecaptcha" name="lamecaptcha" />
<input type="text" value="" id="person_name" name="person_name" />
<?php echo $form_key; ?>
</form>

在验证方面(save_memory.php)我做了这样的事情:

require "form_key.php";
$form_key = new Form_Key;
if(isset($_POST) && $form_key->isValid()){
echo "It is ok to submit";
}else{
echo "Something went wrong";
}

如果我不通过 ajax 提交表单,所有这一切都很好用,但如果我通过 AJAX 提交表单,它总是给我一些出错的错误。以下是我通过 AJAX 提交表单的方式:

person_name = $("input#person_name").val();
memory = $("input#memory").val();
form_key = $("input#form_key").val();
var html_memory = $.ajax({
type: "POST",
url: "save_memory.php",
data: "person_name=" + person_name + "&memory=" + memory + "&form_key=" + form_key,
async: false
}).responseText;

alert(html_memory);

知道为什么会这样吗?我怎样才能让它通过 AJAX 提交我的表单?非常感谢您!

最佳答案

键输入的 Jquery 选择器无效。您必须将 form_key 的 ID 添加到其中,如下所示:

 return '<input id="form_key" type="hidden" name="form_key" value="' . $_SESSION['form_key'] . '" />';

[编辑]

您还必须调用生成输入的函数:

<?php echo $form_key->render(); ?>

关于php - 使用 Form Key 和 AJAX 提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793780/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com