php - 单击链接时进行 Sql 更新

标签 php mysql sql-update

当用户单击链接时,我尝试更新一个值。

<?php
$data = mysql_query("SELECT * FROM comments a LEFT JOIN pins b ON a.pin_id = b.id INNER     JOIN board c on b.board_id = c.id WHERE a.to_id = '$myid' AND a.status = 'unviewed'") 
or die(mysql_error()); while($info = mysql_fetch_array( $data )) 
{ 
Print "<li>";
Print "<a href='/board/pins/".$info['board_id']."/".$info['pin_id']."'>";
Print "<img src='".$info['pin_url']."' width='50' align='left'>";
Print "<font size='1'>comment received on ".$info['date']."</font></a>";
Print "Collection: ".$info['board_name']."</li>";
} 
?>

链接就是上面的链接。

如何编辑上述代码以包含更新查询“UPDATE comments SET status='viewed' WHERE to_id = '$myid' AND id='$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);
?>

还有我的发送页面:

<?php  // display of the notifications dropdown menu
$query_select = "SELECT * FROM comments a LEFT JOIN pins b ON a.pin_id = b.id LEFT JOIN     board c on b.board_id = c.id WHERE a.to_id = '$myid' AND a.status = 'unviewed' ORDER BY     a.date DESC";
$result_select = mysql_query($query_select) or die(mysql_error());
$rows = array();
while($row = mysql_fetch_array($result_select))
    $rows[] = $row;
foreach($rows as $row){ 
    $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>";
}
?>

我在同一页面的头部有 JS,但它不起作用。变量在此页面 $myid$postid 上正常,但未在 mark_viewed.php 上发送/接收

最佳答案

尝试此代码(AJAX,如评论中建议的那样)。它假设它的基本作用是:

  1. 将相关 ID 作为属性打印到 html 中。
  2. 将监听器绑定(bind)到这些链接上的点击事件
  3. ping http://domain.com/mark_viewed.php 后(执行查询更新评论的文件)它将浏览器重定向到所需的位置(/board/pins/...)
//html part
<?php
$myid = 1234;
$postid = 333;
//echo prepared link with ids in it's data-attributes
echo '<a href="/board/pins/"'.$info['board_id'].'/'.$info['pin_id'].'"  
   data-myid="' . $myid . '" 
   data-postid="' . $postid . '" 
   class="markviewed">mark ids as viewed and go to /board/pins/...</a>';
?>

<script src="//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://domain.com/mark_viewed.php?myid=' + myid + '&postid=' + postid);

      //redirect to the link in the href attribute
      window.location.href = $(this).attr('href');

   });
});
</script>

关于php - 单击链接时进行 Sql 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20131421/

相关文章:

php - 意外关机后控制

MYSQL error.log 将失败的登录尝试显示为 [note]

mysql - 在mysql查询中用null连接三个子查询结果集

mysql - Symfony 查询生成器使用子查询进行更新

mysql - update select same where 子句更新记录的子集

SQL-Oracle 使用 LAG() 从自身更新表

Javascript提交仅影响while循环php中的第一个div

php - 未定义的属性:DOMDocument::$tagName

javascript - 更新表的单列值

mysql - 使用 GROUP BY 或任何其他方法汇总 mysql 数据