我正在使用ajax提交一个表单,将数据插入表中。
php
$data = array(\'full_name\' => $_POST[\'fullname\'] , \'email\' => $_POST[\'email\']
);
$type= array(\'%s\' , \'%s\');
$wpdb->insert( \'email_database\', $data, $type);
javascript
$(function() {
$(\'#testform\').submit(function(e){
e.preventDefault();
$.ajax({
type: \'POST\',
data: $(this).serialize()
})
.done(function(data){
alert("works");
})
.fail(function(){
alert("doesn\'t work");
});
});
});
html
<form method="post" action="" id="testform">
<div class="input-box">
<input name="fullname">
<input name="email">
<input type="submit">
</div>
所有内容都放在模板页上。似乎没有任何问题,但这是正确的方式吗?
SO网友:gdarko
我检查了你的代码,有些地方不正常。我建议您考虑以下事项:
1.)Your AJAX endpoint is not protected
目前,任何人都可以向AJAX端点发送请求并从任何地方输入数据,以解决此问题WordPress nonces.
原则是创建nonce
服务器端,发送相同的nonce
(您可以将其打印到页眉中,然后jQuery
, 然后与从中获取的数据对象合并serialize()
方法),从数据对象中的AJAX调用。最后一步是验证nonce
使用该方法wp_verify_nonce()
在保存数据之前,如果nonce
无效,请不要继续保存数据。
2.)You need more validation
正如我在代码中看到的,您没有验证任何$_POST
数组变量。这是一个巨大的问题,您将获得大量损坏或毫无意义的数据。