【发布时间】:2013-11-22 13:08:50
【问题描述】:
我正在尝试通过单击使用 AJAX 的链接来更新 mysql,但我碰壁了。我有代码,但它不起作用。
这里是 AJAX:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
//bind a listener to "click" event on links with class "markviewed"
$('a.markviewed').click(function(event) {
//prevent default behavior just in case
event.preventDefault();
//get ids from clicked <a>
var myid = $(this).attr('data-myid');
var postid = $(this).attr('data-postid');
//ping the address to mark clicked link as viewed
$.ajax('http://mywebsite.com/mark_viewed.php?myid=' + myid + '&postid=' + postid');
//redirect to the link in the href attribute
window.location.href = $(this).attr('href');
});
});
</script>
这应该创建一个 href 类,单击该类时会点击 mywebsite.com/mark_viewed.php,它会使用以$myid 和$postid 发送的关键变量更新我的数据库。
这里是mark_viewed.php:
<?php
$con=mysqli_connect("XXX","XXX","XXX","XXX");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// get values sent from address bar
$myid=$_GET['myid'];
$postid=$_GET['postid'];
mysqli_query($con,"UPDATE comments SET status='viewed' WHERE to_id ='$myid' AND id='$postid'");
mysqli_close($con);
?>
最后这是用户看到的链接:
$myid = $row['user_id']; // my id
$name = $row['board_name']; // collection name
$boardid = $row['board_id']; // collection id
$postid = $row['pin_id']; // post id
$url = $row['pin_url']; // image url
echo "<li><a href='/board/pins/$boardid/$postid' data-myid=' . $myid . ' data-postid=' . $postid . ' class='markviewed'>";
echo "<img src='$url' height='50' width='50'>";
echo "New comment in $name.";
echo "</a></li>";
但是,在测试中它不起作用。单击时的链接只是浏览到带有新评论的页面,并且数据库未受影响。
我做错了什么?
【问题讨论】:
-
删除
window.location.href = $(this).attr('href'); -
您的 ajax 调用正在进行吗?如果是这样,发生了什么,您是否遇到错误?
-
你应该,不......你需要在查询中使用之前验证/清理你的
$myid和$postid变量。请记住,用户输入是邪恶的! -
这是一个非常非常不安全的代码。改进的一个小技巧是将 $myid 和 $postid 转换为 (int) 但我建议您学习如何使用 PDO (docs.php.net/pdo.prepared-statements)
-
我尝试删除该行但仍然一无所获,而且我没有收到任何错误。