3
すべて HTMLで作成されたフォームが有効かどうかを確認するために、次のクラスがあるので、ctrl + F5などここでそれを行うクラスです。フォームキーとAJAXを使用してフォームを送信
<?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();
}
}
?>
それから私はこのような何かに見える形があります。検証側(save_memory.php)で
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>
を、私はこのような何かを実行します。
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経由で私のフォームを提出する仕事を得ることができますなぜですか?事前にどうもありがとうございました!
私の上の愚かな間違い部。それを指摘してくれてありがとう! – user1048676
@クリスチャンは、IDの事に良いキャッチ。ただし、出力はそのままレンダリングされます。最初のコード本体、魔法のメソッド__toStringは、オブジェクトが印刷されるときに呼び出されます。これは2番目のコードブロックecho $ form_keyで行われます。 – davogotland
@davogotland:+1あなたの:) – Kristian