在主页上,我有一些链接:
first link
second link
third link当单击其中一个链接时,我希望向php文件发送一个ajax请求,以更新数据库以增加该帖子的视图列。
$(document).ready(function(){
$(document).on('click', '.link', function(e){
var post_id = $(this).data('id');
$.ajax({
url: "views.php",
type: 'POST',
data: {id: post_id},
success: function(){
alert("done");
}}); // ajax
}); // on click
}); // ready在views.php中:
//Check if the id is posted.
if( isset($_POST['id']) ){
//Assigning the id to a variable.
$id = $_POST['id'];
//Check if the id is an integer.
$pattern = '/[0-9]/';
if( preg_match($pattern, $id) ){
//Check that the user didn't visit that post before.
$post_cookie = 'p_' . $id;
if( !isset($_COOKIE[$post_cookie]) ){
//Insert or update if the post id exists.
$query = $conn->prepare('INSERT INTO posts (id, views) VALUES (:id, 1) ON DUPLICATE KEY UPDATE views = views+1');
$query->bindValue(':id', $id, PDO::PARAM_INT);
$query->execute();
//Set a cookie with the post id to indicate that the post is viewed.
setcookie( $post_cookie, '1');
}// No cookie with that name (the user didn't visit that post).
} // id matches the pattern.
} // id is posted.我可以使用除post id之外的其他选项来添加/更新视图,但我想知道这种方式是否安全,还是应该使用admin-ajax.php。
发布于 2018-07-15 17:32:31
天哪..。不!千万别这样..。
为什么?有很多原因..。
views.php中的用户做任何事情--如果您必须只计算匿名(而不是登录)用户的视图怎么办?table_prefix设置为“”怎么办?您的posts表将导致冲突..。制定最佳做法和标准是有原因的。如果每个人都按照这些标准和实践进行编码,那么所有开发人员的生活都会变得更加轻松和美好。这样很容易调试所有AJAX调用,等等.
因此,您肯定应该使用admin-ajax.php和wp_localize_script,以及$wpdb,以及适当的SQL转义,等等.
是的,它是看得见的。但是..。它不会是标准的AJAX调用-所以很难理解.
我们来做个简单的实验..。让我们来看看这两个代码:
1.
add_action( 'wp_ajax_get_post_status', 'ajax_get_post_status_callback' );
function ajax_get_post_status_callback() {
$id = $_POST['id'];
$post = get_post( $id );
if ( $post ) {
echo $post->post_status;
die;
}
echo 0;
die;
}2.
include "ustawienia-polaczenia.php";
$i = $_POST['id'];
$wiersz = PostsQuery()::create()->filterById( array($i) )->find();
if ( $wiersz ) {
echo $wiersz->post_status;
die;
}
echo 0;
die;哪一个更容易读?我打赌第一个。为什么?因为它使用了WP核心功能,每个人都知道它们是如何工作的。我知道(或者我可以很容易地检查) get_post函数是做什么的,等等。此代码还尊重所有过滤器和操作-因此它将不会产生冲突与其他插件..。
另一方面,第二个代码就是一团糟.它包含了其他一些文件,它使用了一些奇怪的DB连接(是的,它是推进的)。甚至很难猜测它是同一个DB还是其他DB,以及它到底是如何工作的。它完全忽略了其他插件..。
所以,是的-每个人都会看到您的代码发送了一些奇怪的AJAX,以及哪个文件负责处理它。问题是调试奇怪/自定义代码将花费更多的时间.更有可能的是你的代码会产生问题和冲突。
https://wordpress.stackexchange.com/questions/308635
复制相似问题