[原创+源码]超强:基于PHP+jQuery实现仿163邮箱的站内邮件系统三

来源:互联网 发布:昆山人力资源软件 编辑:程序博客网 时间:2024/04/29 07:00

接上文,[原创+源码]超强:基于PHP+jQuery实现仿163邮箱的站内邮件系统二 今天我给大家继续分享第三篇,主要讲解如何使用jQuery实现分页、已读/未读标记等功能。具体如下:
首先,我们先实现收件箱的列表页面如图:
1.png
如图,我们做简单分析,实现上述效果,当邮件比较多的时候肯定要实现分页功能,按页查看邮件,默认为第一页
所以我们要考虑到分页,那跟分页相关的几个参数我们这里也简单的分析下:
1)每页大小 这里定义的是$pageSize 一个常量,本例定义为3,表示每页显示3条
2)当前页    这里定义的是$nowPage  默认为1,表示第一页
3)总记录数 这里我定义的是$w  (在head.php中)
4)总页数    这里我定义的是$maxPage 用于控制循环的终止条件,总页数等于 ceil(总记录数/每页大小)   ceil()表示上去整

实现上述效果比较核心的是
1)登陆成功后默认的加载第一页数据
2)显示总邮件数 和未读邮件数 (本例在head.php中完成)
3)对于未读的邮件要显示为加粗效果,同时显示未读标记(主题前得‘小信封’)
4)点击上述未读标记,可以更新当前的信息状态

注意,因为 网易整个页面使用了frameset的方法,将网页进行拆分,所以我必须也要把各个源码也给大家贴出来
head.php

Code:
  1. <?php  
  2. session_start();  
  3. include '../include/dbconn.php';  
  4. //读取所有的邮件  
  5. $sql="select * from receiver where to_uid={$_SESSION['uid']} and is_del=0";  
  6. $rs=mysql_query($sql);  
  7. $w=0;  
  8. //总记录数  
  9. $total=0;  
  10.   
  11. while($rows=mysql_fetch_assoc($rs)){  
  12.       
  13.     $total++;  
  14.       
  15.     if($rows['is_read']==0){  
  16.         //读取所有的未读邮件  
  17.         $w++;  
  18.     }  
  19.   
  20. }  
  21. $_SESSION['total']=$total;  
  22. $_SESSION['weidu']=$w;  
  23.   
  24. ?>  
  25. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  26. <HTML>  
  27. <HEAD>  
  28. <META http-equiv=Content-Type content="text/html; charset=UTF-8">  
  29. <LINK href="../css/globle_v1.css" type=text/css rel=stylesheet>  
  30. <link href="../css/skin_blue.css" rel="stylesheet" type="text/css" id="lnkSkin">  
  31.   
  32. <META content="MSHTML 6.00.6000.16809" name=GENERATOR></HEAD>  
  33. <BODY class=HeadBdWp>  
  34. <DIV class=HeadWp>  
  35. <DIV class=HeadThemeWp>  
  36. <DIV class=HeadWpInner>  
  37. <H1 class="Logo g163Logo"><A href="#" ><IMG   
  38. class=imgLogo src="../images/163logo.gif" border=0></A></H1><SPAN   
  39. class=UserInfo><B><?php echo $_SESSION['username']; ?></B>  [ <A   
  40. href="index.php" target="_top">邮箱首页</A>,<A   
  41. href="#">换肤</A>,<A id=lnkLogout title=安全退出邮箱   
  42. href="loginout.php" target="_top">退出</A> ]</SPAN>  
  43. <FORM name=search   
  44. action=#   
  45. method=post><SPAN class=SearchBar><A class="SchMenuBtn fRi"   
  46. title=高级搜索   
  47. href="#"></A><INPUT class="SchBtn fRi" title=立即搜索 type=submit value="">  
  48. <INPUT class="Ipt fRi" maxLength=50 value=搜索邮件... name=keyword></SPAN></FORM><SPAN class=Extra><A   
  49. href="#">设置</A> | <A   
  50. href="#"   
  51. >帮助</A></SPAN>  
  52. <DIV class="InfoTips_Wp InfoTips_Scs" id=dvSuccessMsg style="DISPLAY: none">  
  53. <DIV class=InfoTips><B class="F1Img cnL"></B><SPAN class=Txt   
  54. id=spnSuccessText></SPAN><B class="F1Img cnR"></B></DIV></DIV>  
  55. <DIV class="InfoTips_Wp InfoTips_War" id=dvErrorMsg style="DISPLAY: none">  
  56. <DIV class=InfoTips><B class="F1Img cnL"></B><SPAN class=Txt   
  57. id=spnErrorText></SPAN><B   
  58. class="F1Img cnR"></B></DIV></DIV></DIV></DIV></DIV></BODY></HTML>  

这里注意下,我是将当前查询出来的总邮件数和未读邮件数放到session中用于在left中和收件箱主页面显示(后来测试有点bug)
left.php

Code:
  1. <?php  
  2. session_start();  
  3.  ?>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  5. <HTML><HEAD>  
  6. <META http-equiv=Content-Type content="text/html; charset=UTF-8">  
  7. <LINK href="../css/globle_v1.css" type=text/css rel=stylesheet>  
  8. <link href="../css/skin_blue.css" rel="stylesheet" type="text/css" id="lnkSkin">  
  9.   
  10. <DIV class=SidebarWp>  
  11. <DIV class=SidebarThemeWp>  
  12. <DIV class=SidebarWpInner>  
  13. <TABLE class=tbSB height="100%" cellSpacing=0 cellPadding=0 width="100%"   
  14. border=0>  
  15.   <TBODY>  
  16.   <TR>  
  17.     <TD class=tbSbTop><!-- 收写信大按钮 -->  
  18.       <H1 class=BigBtnWp>  
  19.       <A class=aShouXIN id=lnkInbox title=收信 href="#"></A>  
  20.       <A class=aXieXIN title=写信 href="./sender/send.php" target="mainFrame" ></A>  
  21.       </H1></TD></TR>  
  22.   <TR>  
  23.     <TD class=tbSbMid><!-- 主体列表 开始 -->  
  24.       <DIV class=Sb_ConWp>  
  25.       <DIV class=Sb_ConWpIn><!-- 文件夹 开始 -->  
  26.       <DIV class="PanelWp Panel_Fld"><!-- 内容部分(折叠时隐藏) -->  
  27.       <DIV class=PanelCon id=dvSysFolder>  
  28.       <UL id=ulSysFolder>  
  29.           
  30.         <LI class="Fld_Inbox New"><B class=icoFld></B><A class=fileItem id=lnk1   
  31.         title=收件箱   
  32.         href="main.php" target="mainFrame"   
  33.         ><SPAN class=JQ>收件箱(<?php echo $_SESSION['total']; ?>)</SPAN></A>   
  34.           
  35.         </LI>  
  36.         <LI class=Fld_Drafts><B class=icoFld></B><A class=fileItem id=lnk2   
  37.         title=草稿箱   
  38.         href="#"   
  39.         ><SPAN class=JQ>草稿箱</SPAN></A>   
  40.           
  41.         </LI>  
  42.         <LI class=Fld_Send><B class=icoFld></B>  
  43.         <A class=fileItem id=lnk3 title=发件箱 href="./sender/sended.php" target="mainFrame" >  
  44.         <SPAN class=JQ>发件箱</SPAN></A>   
  45.           
  46.         </LI>  
  47.         <LI class=Fld_Trash><B class=icoFld></B><A class=fileItem id=lnk4   
  48.         title=已删除  
  49.         href="./deled/mail_deled.php"   
  50.          target="mainFrame"><SPAN class=JQ>已删除</SPAN></A>   
  51.           
  52.         </LI>  
  53.         <LI class=Fld_Spam><B class=icoFld></B><A class=fileItem id=lnk5   
  54.         title=垃圾邮件  
  55.         href="#"   
  56.         ><SPAN class=JQ>垃圾邮件</SPAN></A>   
  57.           
  58.         </LI>  
  59.         <LI class=Fld_Adver><B class=icoFld></B><A class=fileItem id=lnk7   
  60.         title=广告邮件   
  61.         href="#"   
  62.         ><SPAN class=JQ>广告邮件</SPAN></A>   
  63.           
  64.         </LI></UL></DIV></DIV><!-- 文件夹 结束 --><!-- 分隔线 -->  
  65.       <DIV class=Sb_Line></DIV><!-- 邮箱功能 开始 -->  
  66.       <DIV class="PanelWp Panel_Ftr"><!-- 内容部分 -->  
  67.       <DIV class=PanelCon>  
  68.       <UL>  
  69.         <LI class=Fld_Addr><B class=icoFld></B><A class=fileItem id=lnkAddress   
  70.         title=通讯录   
  71.         href="#" ><SPAN class=JQ>通讯录</SPAN></A></LI>  
  72.         <LI class=Fld_NetDisk><B class=icoFld></B><A class=fileItem   
  73.         id=lnkNetFolder title=网易网盘   
  74.         href="#" ><SPAN class=JQ>网易网盘</SPAN></A>  
  75.          
  76.         </LI></UL></DIV></DIV><!-- 邮箱功能 结束 --><!-- 分隔线 -->  
  77.       <DIV class=Sb_Line></DIV>  
  78.       <!-- 自定义文件夹 开始 -->  
  79.       <DIV class="PanelWp Panel_PslFld">  
  80.       <!-- 标题部分 -->  
  81.       <!-- 折叠时把icoOpen换成icoCls -->  
  82.       <H2 class=PanelTT>  
  83.       <A class="icoOpCls icoOpen" title=折叠 href="javascript:void(0)"></A>  
  84.        <A class=TTxt title=进入文件夹管理页面 href="#"   
  85.       >自定义文件夹</A> <SPAN class=Extra>[<A title=新建文件夹 href="javascript:void(0)">新建</A>]</SPAN></H2><!-- 内容部分(折叠时隐藏) -->  
  86.       <DIV class="PanelCon PanelScl" id=dvDefinedFolder>  
  87.       <UL id=ulDefFolder>  
  88.           
  89.       </UL></DIV></DIV><!-- 自定义文件夹 结束 -->  
  90.       </DIV></DIV><!-- 主体列表 结束 -->  
  91.       </TD></TR></TBODY></TABLE></DIV></DIV></DIV>  
  92. </BODY></HTML>  

这个页面left.php就是一个静态页面,没有什么好解释的。大家自己看就是了
下面就是最核心的文件了,事实上这个收件箱做好了,其他的发件箱或者已删除都是基于此改的。代码如下:

Code:
  1. <?php  
  2. session_start();  
  3.   
  4. //定义当前页  
  5. $nowPage=1;  
  6. //定义每页大小  
  7. $pageSize=3;  
  8. //计算总页数  
  9. $maxPage=ceil($_SESSION['total']/$pageSize);  
  10.   
  11. ?>  
  12. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
  13. <HTML><HEAD><TITLE>收件箱</TITLE>  
  14. <META http-equiv=Content-Type content="text/html; charset=UTF-8">  
  15. <LINK href="../css/globle_v1.css" type=text/css rel=stylesheet>  
  16. <LINK href="../css/inbox.css" type=text/css rel=stylesheet>  
  17. <link href="../css/skin_blue.css" rel="stylesheet" type="text/css" id="lnkSkin">  
  18. <script type="text/javascript" src="../script/jquery-1.5.1.min.js"></script>  
  19. <script type="text/javascript">  
  20.   
  21. $(function(){  
  22.       
  23. //初始化页面  
  24. getPage(<?php echo $nowPage; ?>,<?php echo $pageSize; ?>);  
  25.   
  26.     //处理文字事件(全选、不选、未读、已读、反选)  
  27.          
  28.     //添加 全选 事件  
  29.     $("A[type='all']").click(function(){  
  30.         //遍历所有的checkbox,并且将所有的checkbox设置为选中状态  
  31.         $("input:checkbox").each(function(){  
  32.               
  33.             $(this).attr("checked",true);  
  34.               
  35.          });  
  36.           
  37.      });  
  38.     //添加 反选 事件  
  39.     $("A[type='reverse']").click(function(){  
  40.         //遍历所有的checkbox,并且将所有的checkbox状态取反  
  41.         $("input:checkbox").each(function(){  
  42.               
  43.             $(this).attr("checked",!$(this).attr("checked"));  
  44.               
  45.          });  
  46.           
  47.      });  
  48.        
  49.      //添加 不选 事件  
  50.     $("A[type='no']").click(function(){  
  51.         //遍历所有的checkbox,并且将所有的checkbox状态设置为false  
  52.         $("input:checkbox").each(function(){  
  53.               
  54.             $(this).attr("checked",false);  
  55.               
  56.          });  
  57.           
  58.      });  
  59.        
  60.      //添加 未读 事件  
  61.     $("A[type='read']").click(function(){  
  62.          //先设置所有的复选框为false  
  63.          $("input:checkbox").each(function(){  
  64.               
  65.             $(this).attr("checked",false);  
  66.               
  67.          });  
  68.   
  69.         //遍历所有的checkbox,并且将所有的checkbox状态设置为true  
  70.         $("td SPAN[class='icoIbx icoRead']").each(function(){  
  71.               
  72.            
  73.       
  74.           //找到已读邮件的checkbox所在的td  
  75. var inputtd=$(this).parent("div").parent("td").parent("tr").children("td");  
  76. //alert(inputtd);     
  77.         inputtd.find("input").attr("checked",true);   
  78.           
  79.          });  
  80.           
  81.      });  
  82.        
  83.      //添加未读事件  
  84.     $("A[type='unread']").click(function(){  
  85.         //先设置所有的复选框为false  
  86.         $("input:checkbox").each(function(){  
  87.               
  88.             $(this).attr("checked",false);  
  89.               
  90.          });  
  91.            
  92.         //遍历所有的checkbox,并且将所有的checkbox状态设置为true  
  93.         $("td SPAN[class='icoIbx']").each(function(){  
  94.               
  95.         //找到未读邮件的checkbox所在的td  
  96. var inputtd=$(this).parent("div").parent("td").parent("tr").children("td");  
  97.         //设置为选中状态  
  98.         inputtd.find("input").attr("checked",true);   
  99.           
  100.          });  
  101.           
  102.      });  
  103.        
  104.        
  105.      //添加删除事件  
  106.      $("#btn_del").click(function(){  
  107.          //提交表单  
  108.          $("#form1").submit();  
  109.            
  110.      });  
  111.      //添加删除事件  
  112.      $("#btn_del2").click(function(){  
  113.          //提交表单  
  114.          $("#form1").submit();  
  115.            
  116.      });      
  117.                
  118.       
  119.  });  
  120.     
  121. /* 
  122. 根据当前页和每页大小,查询数据库 
  123. */  
  124.    
  125. function getPage(nowpage,pagesize){  
  126.       
  127.  //显示第一页的数据  
  128.   $.post("./receiver/rebox.php",{nowPage:nowpage,pageSize:pagesize},function(responseText,textStatus){  
  129.     //ajax请求的回调函数的内容  
  130.     DispTable(responseText);  
  131.                
  132.     });   
  133.       
  134.       
  135.  }  
  136.       
  137.       
  138.       
  139.       
  140.  //显示table的内容  
  141. function DispTable(restr){  
  142.   
  143.     //将json格式的字符串转换为对象  
  144.     var obj=eval("("+restr+")");  
  145.     //得到当前的页数;  
  146.     var repage=parseInt(obj.repage);  
  147.   
  148.     var receobj=obj.datas;  
  149.     //定义tr字符串;  
  150.     var strtr="";  
  151.     var trstyle="";  
  152.     var dispread="";  
  153.       
  154.       
  155.       
  156.     for(var i=0;i<receobj.length;i++){  
  157.       
  158.     //判断是否整行加粗  
  159.     if(receobj[i].is_read==0){  
  160.          //设置整行是否加粗显示  
  161.          trstyle="class='I_Mark0 I_UnRd'";  
  162.          //设置是否显示未读图片  
  163.          dispread="class='icoIbx'";  
  164.         }else{  
  165.          dispread="class='icoIbx icoRead'";  
  166.          trstyle="class='I_Mark0'";  
  167.         }  
  168.       
  169.     strtr+="<TR "+trstyle+" ><TD class=Ibx_Td_F> </TD><TD class=Ibx_Td_Chkbx><INPUT title=选择/不选 type=checkbox value='"+receobj[i].rid+"' name=rid[]></TD><TD class=Ibx_Td_icoInfo><div id='divflag'><SPAN "+dispread+" onClick='UpdateRead("+receobj[i].rid+",1)' title=未读(点击设为已读) type='markread'></SPAN></div></TD> <TD class=Ibx_Td_From title=''><A href='javascript:void(0)' onclick='getView("+receobj[i].mid+")'>"+receobj[i].from_name+"</A></TD><TD class=Ibx_Td_icoFlag title=未分类><B class=icoIbx></B></TD><TD class=Ibx_Td_Subject title=''><A href='javascript:void(0)' onclick='getView("+receobj[i].mid+")'>"+receobj[i].m_title+"</A></TD><TD class=Ibx_Td_Date title=''>"+receobj[i].r_time+"</TD><TD class=Ibx_Td_icoATCM></TD><TD class=Ibx_Td_Size><SPAN title='19,887 字节'>19 K</SPAN></TD></TR>";  
  170.       
  171.       
  172.   
  173.           
  174.     }  
  175.       
  176.     //将拼装的字符串显示到tbody中  
  177.     $("#rebox").html(strtr);  
  178.     var pagestr="";  
  179.     var pageSize=<?php echo $pageSize; ?>;  
  180.     //修改上一页  下一页  
  181.       
  182.       
  183. pagestr+="  <A onclick='getPage(1,"+pageSize+")'>首页</A>  ";  
  184.       
  185. if(repage!=1){  
  186. pagestr+="<A onClick='getPage("+(repage-1)+","+pageSize+")'>上页</A>  ";  
  187. }  
  188. if(repage<<?php echo $maxPage; ?>){  
  189.   
  190. pagestr+="<A href='javascript:void(0)' onClick='getPage("+(repage+1)+","+pageSize+")'>下页</A>  ";  
  191.   
  192. }  
  193.   
  194. pagestr+="<A href='javascript:void(0)' onClick='getPage("+<?php echo $maxPage; ?>+","+pageSize+")'>末页</A>";  
  195.       
  196.   
  197. document.getElementById("pageSel").length=0;  
  198.     //设置上面的下拉菜单  
  199. document.getElementById("pageSel1").length=0;  
  200. document.getElementById("pageSel").add(new Option("页码","页码"),null);  
  201.     //设置上面的下拉菜单  
  202. document.getElementById("pageSel1").add(new Option("页码","页码"),null);  
  203. for(var j=1;j<=<?php echo $maxPage; ?>;j++){  
  204.     //产生一个选项  
  205.     var opt=new Option(j,j);      
  206.     //将选项添加到下拉菜单中  
  207.     document.getElementById("pageSel").add(opt,null);  
  208.     //设置上面的下拉菜单  
  209.     document.getElementById("pageSel1").add(opt,null);  
  210.       
  211.     }  
  212.   
  213.       
  214.     $("SPAN[class*='pageNum']").html(pagestr);  
  215.           
  216.       
  217. }  
  218. </script>  
  219. <META content="MSHTML 6.00.6000.16809" name=GENERATOR></HEAD>  
  220. <BODY class="All_C_Page Inbox">  
  221. <FORM id="form1"   
  222. action="./receiver/re_del.php"  
  223. method=post>  
  224. <INPUT id=oFormAction type=hidden>  
  225. <DIV class=ContentWp>  
  226. <DIV class=ContentThemeWp>  
  227. <DIV class=gTitle><B class=mTT>收件箱</B>  (共 <B   
  228. id=oTotal><?php echo $_SESSION['total'];?></B> 封,其中 <A title=""   
  229. href="#">未读邮件</A> <B   
  230. class=fnt_Red id=oTotalUnRead><?php echo $_SESSION['weidu'];?></B> 封)</DIV>  
  231. <DIV class="gToolbar gTbrTop">  
  232. <INPUT id="btn_del" class="Btn BtnNml" hideFocus type=button value="删 除" outClass="Btn BtnNml ImpBtn" overClass="Btn BtnHv ImpBtn" action="move">  
  233. <INPUT class="Btn BtnNml" hideFocus type=button value=举报垃圾邮件 outClass="Btn BtnNml" overClass="Btn BtnHv" action="reportYes">  
  234. <SELECT class="Sel" name="sel_isread" onChange="UpdateRead(this.value,2)">  
  235.     <OPTION value="2">标记为...</OPTION>  
  236.     <OPTION value="1">  已读邮件</OPTION>  
  237.     <OPTION value="0">  未读邮件</OPTION>  
  238. </SELECT>  
  239.     
  240. <SELECT class=Sel action="move">  
  241.     <OPTION value=none selected>移动到...</OPTION>  
  242.     <OPTION value=2>  草稿箱</OPTION>  
  243.     <OPTION value=3>  已发送</OPTION>  
  244. </SELECT>  
  245.   
  246. <SELECT class=Sel action="view" url="#">  
  247.     <OPTION value=none selected>查看...</OPTION>  
  248.     <OPTION value=null>  全部邮件</OPTION>  
  249.     <OPTION class=SelOptLine value=none>-------------</OPTION>  
  250.     <OPTION value=read:false>  未读邮件</OPTION>  
  251.     <OPTION value=read:true>  已读邮件</OPTION>  
  252. </SELECT>  
  253.   
  254. <DIV style="position:absolute;right:20px; width:200px;">  
  255. <table width="100%">  
  256.  <tr>  
  257.  <td width="60%">  
  258.   
  259. <SPAN class="pageNum">  
  260.   
  261. </SPAN>  
  262. </td>  
  263.  <td width="40%"> <SELECT   
  264. class=SelA id="pageSel1" style="MARGIN-RIGHT: 0px" onChange="getPage(this.value,<?php echo $pageSize; ?>)">  
  265.  </SELECT></td>  
  266.  </tr>  
  267.  </table>  
  268. </DIV></DIV>  
  269.     
  270. <DIV class=Ibx_Main_Wp>  
  271. <TABLE class="Ibx_gTable F2Img Ibx_gTable_TT" id=oTableHead>  
  272.   <TBODY>  
  273.   <TR>  
  274.     <TH class=Ibx_Th_F></TH>  
  275.     <TH class=Ibx_Th_Chkbx></TH>  
  276.     <TH class=Ibx_Th_icoInfo><B class=icoIbx title=邮件类型></B></TH>  
  277.     <TH class=Ibx_Th_From>发件人</TH>  
  278.     <TH class=Ibx_Th_icoFlag><B class=icoIbx title=邮件标签></B></TH>  
  279.     <TH class=Ibx_Th_Subject>主题</TH>  
  280.     <TH class=Ibx_Th_Date>日期</TH>  
  281.     <TH class=Ibx_Th_icoATCM><B class=icoIbx title=附件标识></B></TH>  
  282.     <TH class=Ibx_Th_Size>大小</TH></TR>  
  283.   <TBODY></TBODY></TABLE>  
  284. <DIV class="Ibx_Lst_dWp dWpOpen">  
  285.   
  286. <TABLE class="Ibx_gTable Ibx_gTable_Con" id=oTableCOUNT0 action="list">  
  287.   <TBODY id="rebox">  
  288.     
  289.   <!--如果是未读,则修改tr样式为 class="I_Mark0 I_UnRd" 否则的话   
  290.   class="I_Mark0"   
  291.   -->  
  292.     
  293.    
  294.     
  295.     
  296.     
  297.   <TBODY></TBODY></TABLE></DIV>  
  298.   
  299. <H4 class=Ibx_Lst_bExtra id=oH4Check>选择:  
  300. <A type="all">全部</A> -   
  301. <A type=unread>未读</A> -   
  302. <A type=read>已读</A> -   
  303. <A type=reverse>反选</A> -   
  304. <A type=no>不选</A>  
  305.   
  306. </H4></DIV>  
  307. <DIV class="gToolbar gTbrBtm">  
  308.   
  309. <INPUT id="btn_del2" class="Btn BtnNml" hideFocus type=button value="删 除" outClass="Btn BtnNml ImpBtn" overClass="Btn BtnHv ImpBtn" action="move">  
  310. <INPUT class="Btn BtnNml" hideFocus type=button value=举报垃圾邮件 outClass="Btn BtnNml" overClass="Btn BtnHv" action="reportYes">  
  311. <SELECT class=Sel action="mark">  
  312.     <OPTION value=none selected>标记为...</OPTION>  
  313.     <OPTION value=read:true>  已读邮件</OPTION>  
  314.     <OPTION value=read:false>  未读邮件</OPTION>  
  315. </SELECT>  
  316.     
  317. <SELECT class=Sel action="move">  
  318.     <OPTION value=none selected>移动到...</OPTION>  
  319.     <OPTION value=2>  草稿箱</OPTION>  
  320.     <OPTION value=3>  已发送</OPTION>  
  321. </SELECT>  
  322.   
  323. <SELECT class=Sel action="view" url="#">  
  324.     <OPTION value=none selected>查看...</OPTION>  
  325.     <OPTION value=null>  全部邮件</OPTION>  
  326.     <OPTION class=SelOptLine value=none>-------------</OPTION>  
  327.     <OPTION value=read:false>  未读邮件</OPTION>  
  328.     <OPTION value=read:true>  已读邮件</OPTION>  
  329. </SELECT>  
  330.   
  331. <DIV style="position:absolute;right:20px; width:200px;">  
  332. <table width="100%">  
  333.  <tr>  
  334.  <td width="60%">  
  335.   
  336. <SPAN class="pageNum">  
  337.   
  338. </SPAN>  
  339. </td>  
  340.  <td width="40%"> <SELECT   
  341. class=SelA id="pageSel" style="MARGIN-RIGHT: 0px" onChange="getPage(this.value,<?php echo $pageSize; ?>)">  
  342.  </SELECT></td>  
  343.  </tr>  
  344.  </table>  
  345. </DIV>  
  346.   
  347. </DIV></DIV></DIV></FORM><!-- Surj 2008.08.08 list.js -->  
  348. </BODY></HTML>  
  349. <script language="javascript" type="text/javascript">  
  350.   
  351.   function UpdateRead(id,flag){     
  352.   
  353.          if(flag==1){  
  354.                
  355.          //根据id更新数据库  
  356.          $.post('./UpdateRead.php',{id:id},function(responseText,textStatus){  
  357.             //清空内容  
  358.             $("#divflag").html("");  
  359.               
  360.              });  
  361.                
  362.          }else{  
  363.           
  364.            //重新设置form路径  
  365.         $("#form1").attr("action","./UpdateRead.php");  
  366.               
  367.         $("#form1").submit();  
  368.            
  369.          }  
  370.    
  371.   }  
  372.  function getView(mid){  
  373.        
  374.      window.open("./receiver/view.php?mid="+mid,"邮件详细","_blank");  
  375.  }  
  376. </script>  

        这个页面太多的功能了,比如:列表显示分页、分页、批量修改信息状态、删除功能、更新信息状态功能、查看邮件详细功能.....因为页面内容太多,当时写的时候也没有做特别大的优化,所以看着有点乱,但是相信大家仔细看一定会看明白的,注释加的也比较全,显示邮件列表的地方我使用了 字符串 的拼接,最后组成很多<tr><td>
        页面大量采用jQuery的ajax技术实现,列表的时候进行了无刷列表  更新邮件状态也是使用的无刷新技术

        现在将ajax的服务端页面贴出来,rebox.php        

Code:
  1. <?php  
  2. session_start();  
  3. include '../../include/dbconn.php';  
  4. //接受当前页  
  5. $nowPage=$_POST['nowPage'];  
  6. //接受每页的大小  
  7. $pageSize=$_POST['pageSize'];  
  8. //定义sql  
  9.   $sql="select s.from_name,m.m_title,r.rid,r.mid,r.is_read,r.r_time,r.is_del,r.to_uid from sender s,message_info m,receiver r where s.mid=m.m_id and m.m_id=r.mid and r.is_del=0 and r.to_uid={$_SESSION['uid']} limit ".($nowPage-1)*$pageSize.",".$pageSize;  
  10. //执行查询  
  11.   $rs=mysql_query($sql);  
  12.   while($row=mysql_fetch_assoc($rs)){  
  13.       //生成二维数组  
  14.       $arr[]=$row;  
  15.   
  16.   }  
  17.   $arr2=array("repage"=>$nowPage,"datas"=>$arr);  
  18.   echo json_encode($arr2);  
  19. ?>  

 更新邮件状态的updateRead.php

Code:
  1. <?php  
  2.   
  3. include '../include/dbconn.php';  
  4.   
  5. $rid=$_POST['rid'];  
  6.   
  7. $sel_isread=$_POST['sel_isread'];  
  8.   
  9. if(isset($_POST['id'])){  
  10.   
  11. //处理已读操作      
  12.   
  13. $sql="update receiver set is_read=1 where rid={$_POST['id']}";  
  14.   
  15.   
  16.   
  17. $rs=mysql_query($sql);  
  18.   
  19.   
  20.   
  21. }else{  
  22.   
  23.       
  24.   
  25.     foreach($rid as $dd){  
  26.   
  27.     //批量处理已读或者未读      
  28.   
  29.    $rs+=mysql_query("update receiver set is_read=".$sel_isread." where rid=".$dd);  
  30.   
  31.       
  32.   
  33.     }  
  34.   
  35.    
  36.   
  37.  }  
  38.   
  39. if($rs>0){  
  40.   
  41.  //跳转到收件箱主页面  
  42.   
  43.  header("location:./success.php?forward=main.php&info=4&num=".$rs);  
  44.   
  45. }  
  46.   
  47.   
  48.   
  49.  ?>  

 header("location:./success.php?forward=main.php&info=4&num=".$rs); 表示当执行成功后,把执行的结果和提示信息的编号传递到success.php 进行弹出窗口提示

原创地址:[原创+源码]超强:基于PHP+jQuery实现仿163邮箱的站内邮件系统二

原创地址:[原创+源码]超强:基于PHP+jQuery实现仿163邮箱的站内邮件系统三