1

我正在努力解决我的问题。我已经创建了代码并在 PHP 中运行良好,但我现在想将其演变为最终用户的更好的工作解决方案。

我有一组链接来确认或拒绝某项操作。一旦用户单击“确认”/“拒绝”,我希望这可以使用 AJAX 将值保存到 db,然后li使用 jQuery 制作动画。

目前我使用了 php,它重定向到 URL。任何帮助/指导将不胜感激。

这是我的代码:

链接

           <?php    

            $friend_unconfirmed_from_them = mysql_query('
            SELECT * from wallfriends 
            where mem_id_to ='.$USER->id.' AND confirm = 0
            '); //unconfirmed friends to logged in user ($USER->id)

        while ($friendrequest = mysql_fetch_array($friend_unconfirmed_from_them, MYSQL_ASSOC)) { 


        $senders_name = mysql_query('
            SELECT firstname, lastname from mdl_user 
            where id = '.$friendrequest['sender'].'
            '); //get unconfirmed friends name

        while ($sender = mysql_fetch_array($senders_name, MYSQL_ASSOC)) { 
            ?>

        <li><?php echo $sender['firstname'].'&nbsp;'.$sender['lastname']; 
            }?>            
        <a href="confirmfriend.php?userid=<?php echo $friendrequest['sender']; ?>">Confirm Link</a>
        &nbsp;<a href="removefriend.php?userid=<?php echo $friendrequest['sender']; ?>">Deny Link</a></li> 
//echo each friend in li with confirm deny links
            <?php } ?>

        </ul>  

确认朋友.php

$userid = optional_param('userid', 0, PARAM_INT);


$connection = mysql_connect("localhost", "root", "on10n") or die ("Unable to connect!");   
mysql_select_db("fe") or die ("Unable to select database!");    
$query = "UPDATE wallfriends SET confirm = 1 WHERE mem_id_to = '$USER->id' AND mem_id_from = '$userid'";    

$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 
if (!$result){
    echo "There were errors :<br>". mysql_error();
} 
else{ 
redirect($siteUrl.'/profile.php?userid='.$userid.'');
die;  
}

拒绝朋友.php

$userid = optional_param('userid', 0, PARAM_INT);


$connection = mysql_connect("localhost", "root", "on10n") or die ("Unable to connect!");   
mysql_select_db("fe") or die ("Unable to select database!");    

$query = "DELETE FROM wallfriends 
WHERE (mem_id_from = '$USER->id' OR mem_id_from = '$userid') 
AND (mem_id_to = '$USER->id' OR mem_id_to = '$userid') 
";    

$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error()); 

if (!$result){
    echo "There were errors :<br>". mysql_error();
} 
else{ 
redirect($siteUrl.'/profile.php?userid='.$userid.'');
die;  
}
4

3 回答 3

3

您应该阅读 jQuery AJAX函数。您可能对$.ajax和/或 $.post 函数感兴趣。所有这些函数都为您提供了成功/失败回调,您可以在其中隐藏(或淡出)所需的元素。

基本上,您只需从页面中获取您想要的数据并将其传递给 jQuery 函数。由于您的 PHP 函数已经在做它们应该做的事情,一旦您熟悉了 jQuery 功能,这应该是一个小任务。

于 2012-07-16T10:36:45.200 回答
2

您可以为此使用 jQuery-Ajax。

例如

用户界面 HTML 代码

<li><?php echo $sender['firstname'].'&nbsp;'.$sender['lastname']; 
            }?>            
        <a id="confirm" data-userid="<?php echo $friendrequest['sender']; ?>">Confirm Link</a>
        &nbsp;<a id="deny" data-userid="<?php echo $friendrequest['sender']; ?>">Deny Link</a></li> 

jQuery-Ajax

      $(document).ready(function(){
         $("#confirm").click(function(e){

        $.ajax("confirm.php?userid=" + $(this).attr("data-userid"), {
                   complete: function() {
                      $(this).parent().fadeOut();
                   }
        });

        e.preventDefault();
        });
         $("#deny").click(function(e){
        $.ajax("deny.php?userid=" + $(this).attr("data-userid"), {
                   complete: function() {
                      $(this).parent().fadeOut();
                   }
        });
    e.preventDefault();
        });
});

我没有测试代码。希望它会给一个想法。

于 2012-07-16T10:50:28.277 回答
1

你没有显示任何 javascript,并且锚点会将页面扔到 confirmfriend.php/removefriend.php。

你也有多个嵌套的锚标签(记得用 关闭</a>

为了达到预期的效果,我会这样做:

<li>
  <a href="javascript:void(0);" class="confirm friendaction"
      data-userid="<?php echo $friendrequest['sender'];>">Confirm</a>
</li><li>
  <a href="javascript:void(0);" class="remove friendaction"
      data-userid="<?php echo $friendrequest['sender'];>">Remove</a>
</li>

随后是一个将 onclick 挂钩到锚点的脚本,发送 AJAX 请求。

<script>
   $('.friendaction').click(function() {
       var id = this.getAttribute('data-userid'),
           url = this.className.match("confirm") 
              ? "confirmfriend.php" 
              : "removefriend.php", 
           liReference = $(this).parent();
       $.ajax(url + "?userid=" + id, {
           complete: function() {
              $(liReference).fadeOut();
           }
       });
   });
</script>
于 2012-07-16T10:43:41.617 回答