我想用ajax发送一个值(id_post),但是当用户将值更改为html(带检查)时,检索到的值和新的
代码html
<button class="bt_like" data-id="<?php echo $row['id'] ;?>" >like</button>
代码php + sql
<?php
require 'init.php';
$id_post = $_POST['post'];
$id_user = (int)trim(htmlspecialchars($_SESSION['user_id']));
$liked = '1';
$stmt=$connect->prepare('INSERT INTO likes_emploi(id_post,id_user,liked) VALUES(:a,:b,:c)');
$stmt ->bindValue(':a',$id_post,PDO::PARAM_INT);
$stmt ->bindValue(':b',$id_user,PDO::PARAM_INT);
$stmt ->bindValue(':c',$liked,PDO::PARAM_INT);
$stmt->execute();
代码ajax
$('.bt_like').on('click',function(){
var query = $('.bt_like').attr("data-id");
$.ajax({
url : 'systemLike.php',
method:'POST',
data : {post:query},
success : function(data){$('header').html(data); } /* no Important*/
});
});
结果是:
<button class="bt_like" data-id="15" >like</button>
一切正常,但问题是,如果用户点击检查(Chrome)是更改值15到99数据库收到的值是99
这是不可避免的。但是,您可以对ID进行模糊处理,并与会话中的值进行比较(例如)。
在PHP中:
session_start() ;
$_SESSION['posts'] = [] ;
while ($row = mysqli_fetch_array($res)) {
$uniq = sha1(uniqid(true).$row['id']) ; // Example could be another thing.
$_SESSION['posts'][$uniq] = $row['id'] ;
echo '<button class="bt_like" data-id="' . $uniq . '" >like</button>' ;
}
最后,在收到XHR查询的PHP中:
session_start() ;
$sent_id = $_POST['post'] ;
$id_post = isset($_SESSION['posts']) && isset($_SESSION['posts'][$sent_id])
? $_SESSION['posts'][$sent_id] : 0 ;
if ($id_post) {
// do stuff
} else {
// Was changed by user! (or session was expired)
}
这样,所有访问者的ID都不同。
当然,使用像$_SESSION['posts'][...] = $id
之类的东西可能更有用,以避免混淆并清除数组,如果你想要的话。