月度归档:2008年05月

用jquery做了一个ajax聊天室

现要只是实现了聊天室的基本聊天,ajax无刷新显示功能,会员功能 等正在制作中。

演示地址:http://www.ye55.com/chat

下载地址:

chat.rar

数据库sql:

 

SQL代码
  1. CREATE TABLE `message` (   
  2.   `mid` int(20) NOT NULL auto_increment,   
  3.   `msg` varchar(255) NOT NULL,   
  4.   `uservarchar(50) NOT NULL,   
  5.   `timeint(10) NOT NULL,   
  6.   PRIMARY KEY  (`mid`),   
  7.   KEY `user` (`user`)   
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=161 ;   
  9.   
  10.   
  11.   
  12. CREATE TABLE `session` (   
  13.   `id` varchar(32) NOT NULL,   
  14.   `timeint(10) NOT NULL,   
  15.   `timenow` int(10) NOT NULL,   
  16.   `data` text NOT NULL,   
  17.   `ip` varchar(15) NOT NULL,   
  18.   PRIMARY KEY  (`id`)   
  19. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;   
  20.   

现在程序开源,其它的像字体,字色,会员,在线列表等功能将陆续完成。

主要的三个页面的代码

1、 index.php

 

XML/HTML代码
  1. <?php  
  2. //程序设计:℃冻番茄 QQ:7279915 E-mail:web@ye55.com www.phpd.cn   
  3. require_once("config.php");   
  4. ?>  
  5. <!DOCTYPE htm PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
  6. <html xmlns="http://www.w3.org/1999/xhtml">  
  7.  <HEAD>  
  8.   <TITLE> chat </TITLE>  
  9.   <META NAME="Generator" CONTENT="EditPlus">  
  10.   <META NAME="Author" CONTENT="">  
  11.   <META NAME="Keywords" CONTENT="">  
  12.   <META NAME="Description" CONTENT="">  
  13.   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  14.   <link href="css/global.css" rel="stylesheet" type="text/css" />  
  15.   <SCRIPT LANGUAGE="JavaScript" src="js/jquery.js"></SCRIPT>  
  16.  </HEAD>  
  17.  <BODY>  
  18.  <div id="main">  
  19.     <div id="main_left" style="float:none;margin:0px auto;">  
  20.         <div id="chat_m" style="width:500px;height:500px;border:#cccccc 1px solid;overflow:auto;">Loading…</div>  
  21.   
  22.          <div id="main_l_from">  
  23.          <FORM METHOD=POST ACTION="javascript:void(0)">  
  24.             昵称:<INPUT TYPE="text" NAME="user" id="user" size="8" value="<?=$_SESSION[‘user’]?>"> 内容:   
  25.             <INPUT TYPE="text" NAME="message" id="message" style="width:250px;"> <INPUT TYPE="submit" name="sub" value="发言" id="sub">  
  26.          </div></FORM>  
  27.     </div>  
  28.     <!–<div id="main_right">  
  29.     <h2>在线会员</h2>  
  30.     </div>>  
  31. <SCRIPT LANGUAGE="JavaScript">  
  32. <!–   
  33.     $("#chat_m").load("chat.php");   
  34.     $("#sub").click(function(){   
  35.         if($("#user").val()==”){   
  36.             alert("昵称不能为空!");   
  37.         }else if($("#message").val()==”){   
  38.             alert("聊天内容不能为空!");   
  39.         }else{   
  40.                 $.post("ajax.php?act=send",{user:$("#user").val(),msg:$("#message").val()},function(data){   
  41.                     if(data.msg===true){   
  42.                         showmsg();   
  43.                         $("#message").val("");   
  44.                     }else{   
  45.                         alert(data.msg);       
  46.                     }   
  47.                 },"json")   
  48.             }   
  49.     })   
  50. function sc()    
  51. {    
  52. var e=document.getElementById("chat_m")    
  53. ee.scrollTop=e.scrollHeight;    
  54. }    
  55. //var s=setInterval("sc()",200)    
  56. //–>  
  57. </SCRIPT>  
  58. <hr size=1>  
  59. <center>程序设计:℃冻番茄 QQ:7279915 E-mail:web@ye55.com <a href="http://www.phpd.cn">www.phpd.cn</a> </center>  

 

2、chat.php

 

 

XML/HTML代码
  1. <?php  
  2. require_once("config.php");   
  3. //程序设计:℃冻番茄 QQ:7279915 E-mail:web@ye55.com www.phpd.cn   
  4. $fist=$db->getfirst("select `mid` from `message` order by `mid` desc ");   
  5. $mid=$fist[‘mid’]-40; //初始化聊天记录条数   
  6. $mid=$mid<=0?0:$mid;   
  7. $mid=0;   
  8. ?>  
  9. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  10.     <div id="contents"></div>  
  11.     <INPUT TYPE="text" style="display:none" NAME="mid" id="hide_mid" value="<?=$mid?>">  
  12.      <div id="end" style="width:400px;display:none;clear:both;"></div>  
  13.   <SCRIPT LANGUAGE="JavaScript">  
  14.   <!–   
  15.   //alert($("#hide_mid").val());   
  16.         function showmsg(){   
  17.             mids=$("#hide_mid").val();   
  18.                
  19.             $.post("ajax.php?act=display",   
  20.                    {mid:mids},   
  21.                    function(data){   
  22.                 //alert(data.list[2].user);   
  23.                         $("#hide_mid").val(data.mid);   
  24.                         if(data.list!=0){   
  25.                             for(i=0;i<data.list.length;i++){   
  26.                                 $("#contents").append("<br />"+data.list[i].user+"说: "+data.list[i].msg+"    ["+data.list[i].time1+"]");   
  27.                                 sc();   
  28.                             }   
  29.                         }   
  30.                    },"json");   
  31.             }   
  32.         function scrollWindow() {scroll(0, 100000); }    
  33.             showmsg();   
  34.             setInterval("showmsg()", 4000);    
  35.   //–>  
  36.   </SCRIPT>  

 

3、ajax.php

 

PHP代码
  1. <?php   
  2. require_once("config.php");   
  3. ////程序设计:℃冻番茄 QQ:7279915 E-mail:web@ye55.com www.phpd.cn   
  4. //发信息   
  5. if($_GET[‘act’]==‘send’){   
  6.     $msg=$_POST[‘msg’];   
  7.     $user=$_POST[‘user’];   
  8.     if(emptyempty($msg) || emptyempty($user)){   
  9.         $return[‘msg’]=‘聊天内容或昵称不能为空’;   
  10.     }else{   
  11.         $time=time();   
  12.         if($db->insert("insert into `message` (`msg`,`user`,`time`) values (‘$msg’,’$user’,’$time’)")){   
  13.             $return[‘msg’]=true;   
  14.         }else{   
  15.             $return[‘msg’]="err";   
  16.         }   
  17.     }   
  18.     echo json_encode($return);   
  19. }elseif($_GET[‘act’]==‘display’){   
  20.     if(isset($_POST[‘mid’])){   
  21.         $s=" where `mid`>’".$_POST[‘mid‘]."’ ";   
  22.     }else{   
  23.         $s=;   
  24.     }   
  25.     $sql="select * from `message` $s order by `mid`";   
  26.     $total=$db->getcount($sql);   
  27.     if($total==0){   
  28.         $a=0;   
  29.     }else{   
  30.         $result=$db->query($sql);   
  31.         while($row=$db->getarray($result)){   
  32.             $row[‘time1’]=date(‘Y-m-d H:i:s’,$row[‘time’]);   
  33.             $a[]=$row;   
  34.             $b=$row[‘mid’];   
  35.         }   
  36.     }   
  37.     $ccc=array(‘list’=>$a,‘mid’=>$b);   
  38.     echo json_encode($ccc);   
  39. }   
  40. ?>  

apt使用参考

apt-cache search # ——(package 搜索包)
apt-cache show #——(package 获取包的相关信息,如说明、大小、版本等)
sudo apt-get install # ——(package 安装包)
sudo apt-get install # —–(package – – reinstall 重新安装包)
sudo apt-get -f install # —–(强制安装?#"-f = –fix-missing"当是修复安装吧…)
sudo apt-get remove #—–(package 删除包)
sudo apt-get remove – – purge # ——(package 删除包,包括删除配置文件等)
sudo apt-get autoremove –purge # —-(package 删除包及其依赖的软件包+配置文件等(只对6.10有效,强烈推荐))
sudo apt-get update #——更新源
sudo apt-get upgrade #——更新已安装的包
sudo apt-get dist-upgrade # ———升级系统
sudo apt-get dselect-upgrade #——使用 dselect 升级
apt-cache depends #——-(package 了解使用依赖)
apt-cache rdepends # ——(package 了解某个具体的依赖?#当是查看该包被哪些包依赖吧…)
sudo apt-get build-dep # ——(package 安装相关的编译环境)
apt-get source #——(package 下载该包的源代码)
sudo apt-get clean && sudo apt-get autoclean # ——–清理下载文件的存档 && 只清理过时的包
sudo apt-get check #——-检查是否有损坏的依赖

删除linux启动管理器(GRUB或LILO)

这是由于安装linux时选择“将GRUB或LILO写入引导区并控制启

 
动”这样就会将装入到硬盘的主引导记录中(MBR),这时系统引
 
导的控制权就由windows本身的启动模块转交到linux的启动管理
 
器(GRUB或LILO)手中了
所以电脑启动时总出现linux的(GRUB或LILO)启动管理界面。
 
方法1:启动时进入命令行输入命令
fdisk /MBR
重启
 
方法2:用winxp光盘启动,在故障恢复控制台输入命令
fixmbr\device\harddisk0

无错配置ubuntu8.04+vsftpd+mysql+pam的ftp服务器端

因为工作需要安装一个ftp服务器,需要使用多ftp用户并能够方便的管理ftp用户。于是使用vsftp+mysql+pam的组合,在mysql中进行用户管理。特写了这么一个记录安装过程的文章,提供给大家一起讨论。

1.安装vsftpd

代码:
sudo apt-get install vsftpd

2.创建guest用户

vsftpd安装的时候会自动安转一个ftp用户,在passwd中删除

代码:
sudo useradd virtual

设置virtual的密码为webftp

代码:
sudo passwd virtual

编辑virtual用户的主目录并设置shell

代码:
sudo vim /etc/passwd

我设置的是virtual:x:1001:1001::/var/www:/bin/false

/var/www virtual的主目录

/bin/false 禁止virtual用户终端登陆

3.设置mysql数据库和用户权限

在phpmyadmin中建立vsftp数据库 vsftp用户

建立用户表

代码:
create table users(name char(16) binary,passwd char(16) binary);

并授权vistual用户users表的select权限,并设置密码。

4.设置MySQL的PAM验证

安装libpam-mysql

代码:
sudo apt-get install libpam-mysql

要设置vsftpd的PAM验证文件

代码:
sudo cp /usr/share/doc/vsftpd/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /etc/pam.d/vsftpd


把内容替换为如下:

代码:
auth    required        /lib/security/pam_mysql.so      user=virtual    passwd=webftp   host=localhost db=vsftp table=users usercolumn=name passwdcolumn=passwd crypt=2
account required        /lib/security/pam_mysql.so      user=virtual    passwd=webftp   host=localhost db=vsftp table=users usercolumn=name passwdcolumn=passwd crypt=2


5.设置vsftpd.conf

代码:
guest_enable=YES
guest_username=virtual

这两项必须打开,其他配置请查阅vsftpd.conf的配置手册

6.虚拟用户目录的权限改为只能由virtual操作:

代码:
sudo chown virtual.virtual /var/www
sudo chmod 755 /var/www

virtual获得www文件夹的权限,并设置www文件夹权限为755

至此,最基本的虚拟用户已经完成。

代码:
sudo /etc/init.d/vsftpd restart

重启vsftpd服务后即可以用users表中设置的用户名密码进行www文件夹的访问了。

第一次使用json,汗,以前都没注意到用这么个数据类型

一直都是直接用ajax返回html片段,复杂点的就用xml。以前一直知道有json这种类型,一直没有使用过,但没想到用它做返回是这么的简单,晕了。。。下面是一段ajax发表评论的程序。。

采用的是jquery类。

代码如下:

js代码

 

XML/HTML代码
  1. <SCRIPT LANGUAGE="JavaScript">  
  2. <!–   
  3.     function send(){   
  4.         var msg="";   
  5.         if($("#s_content").val()==""){   
  6.             alert(" 评论内容不能为空! ");   
  7.             $("#s_content").focus();   
  8.             return false;   
  9.         }else if($("#s_secode").val()==”){   
  10.             alert(" 验证码不能为空! ");   
  11.             $("#s_secode").focus();   
  12.             return false;   
  13.         }   
  14.         $.post("?idea/send_commend",   
  15.                { content:$("#s_content").val(),iid:<%$idea.iid%>,secode:$("#s_secode").val() },   
  16.                function(data){   
  17.                     if(data.msg===true){   
  18.                         $("#s_content").val("");   
  19.                         $("#s_secode").val("");   
  20.                         alert("评论发布成功");   
  21.                     }else{   
  22.                         alert(data.msg);   
  23.                     }   
  24.                     $("#secode_box").html("<IMG SRC=‘includes/seccode.php’ onclick=\"javescript:recode()\" BORDER=‘0’ ALT=‘点击刷新’>");   
  25.                },"json");   
  26.     }   
  27.   
  28.     function recode(){   
  29.         $("#secode_box").html("<IMG SRC=‘includes/seccode.php’ onclick=\"javescript:recode()\" BORDER=‘0’ ALT=‘点击刷新’>");   
  30.     }   
  31. //–>  
  32. </SCRIPT>  

 

因采用的是框架,?idea/send_commend 页面代码如下:

 

PHP代码
  1. <?php   
  2. if(isset($_SESSION[‘member’])){   
  3.     if($_POST[‘secode’]!=$_SESSION[‘code’]){   
  4.         $msg[‘msg’]=‘验证码不正确!’;   
  5.     }else{   
  6.         if($idea->writeCommend($_POST[‘iid’],$_SESSION[‘member’][‘mid’],$_POST[‘content’],$_SESSION[‘member’][‘mid’])){   
  7.             $msg[‘msg’]=true;   
  8.         }else{   
  9.             $msg[‘msg’]=‘评论出错!’;   
  10.         }   
  11.            
  12.     }   
  13. }else{   
  14.     $msg[‘msg’]=‘您没有登陆,请登陆后再发布评论!’;   
  15. }   
  16. echo json_encode($msg);   
  17. exit;   
  18. ?>  

JSON介绍

介绍
我们知道AJAX技术能够使得每一次请求更加迅捷,对于每一次请求返回的不是整个页面,也仅仅是所需要返回的数据。通常AJAX通过返回XML格式的数据,然后再通过客户端复杂的JavaScript脚本解析和渲染这些XML格式的数据。
JSON(读Jason)是为了能够使得数据格式成为一种标准,更简单的被JavaScript解析。

优点
1、轻量级的数据交换格式
2、人们读写更加容易
3、易于机器的解析和生成
4、能够通过JavaScript中eval()函数解析JSON
5、JSON支持多语言。包括:ActionScript, C, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua.

语法
JSON语法是一种用于传输和生成数据的协定,很类似于C家族的语言,所以很容易被C家族的语言所解析。
对象:对象包含再{}之间
属性:采用Key-Value对来表示。属性之间使用逗号分开。  string : value
数组:数组存放再[]之间   [ elements ]
元素:元素之间用逗号分开
值:值可以是字符串,数字,对象,数组,true,false,null

例子:
JSON
{"menu": {  
   "id": "file",
   "value": "File:",  
   "popup": {  
     "menuitem": [
       {"value": "New", "onclick": "CreateNewDoc()"},
       {"value": "Open", "onclick": "OpenDoc()"},  
       {"value": "Close", "onclick": "CloseDoc()"} ]
   }
}}

XML

 

<menu id="file" value="File" >

   <popup>

     <menuitem value="New" onclick="CreateNewDoc()" />

     <menuitem value="Open" onclick="OpenDoc()" />

     <menuitem value="Close" onclick="CloseDoc()" />

</popup>

</menu>

json网址:http://www.json.org/json-zh.html

这几天在筹划网上开店的事

江西品蜂堂公司的全系列产品进行网上直销。

产品直接从南昌公司发货.

大概筹划了一周,联系好了快递公司,运费真贵,圆通的,江西省内5元/单 省外要8-10元/单.在网店中统一标6元,光运费基本上就打算要亏2元以上。。。

在淘宝,拍拍,易趣同步开设店铺。

http://shop.paipai.com/7279915

嫁给站长好不好?

  站长就是疯子!成天泡在网上,不知白天黑夜,黑白颠倒!这种精神无法比拟…现在感觉到互联网居然如此的神…女孩找个站长做男朋友,好不好?下面是15条描述:

    1、他没有足够的时间陪你,于是你有了好多的自由空间,你可以安心的玩你的,可以去购物,怎么玩都可以,绝对不会有人喊你一定某个时间到家。  

    2、万一有一天你们打架,以他的被网络掏空的羸弱之躯,绝对不是你的对手,所以你不用担心受虐;你可以粗暴的对他,因为他很少能听的进去,除非你关了他的计算机,他才能意识到你的存在。  

    3、不必担心他有外遇,因为他爱网络胜过爱生活,不过你也可以在网上化作风骚女子勾引他,看他是否对网上的陌生MM心动; 一般的站长傻乎乎的都不知道自己的名字,也不知道自己的性别,如果你跟他大谈如何提高流量和如果迅速赚钱,能激发他的欲望。  

    4、他是个环保主义者,他可以和你在网上谈情说爱而不用消耗纸巾,洗衣粉…… 可能那只是瞬间的美丽,因为这些站长的感情大部分都是用在网站上了,偶然爆发出的情愫的真谛只是瞬间的火花。  

    5、讨好他的方法很简单,只要让他洗“泡沫浴”,他就心醉,因为他酷爱泡沫;太累,最好洗澡的地方能上网。  

    6、他通常有足够的能力在网上给你订购一只最珍贵的网络二手产品给你做礼物,绝对是超级物美价廉; 你也从来不必每天去跑银行排队交话费电费。他敲几下键盘即可。  

    7、你们的孩子如果够幸运的话,会继承他的智慧、你的美貌。   

    8、他会给你们村的曹铁匠建一个“铁匠在线”网站,甚至一个村级局域网; 也有可能要建立一个你家人的聊天室。  

    9、不必挖空心思为他买礼物,因为他很少打领带、洒香水,只要买一个电脑保护屏,就让他感激不尽了;  

    10、离婚时,不必为锅碗瓢盆的所有权发愁,这些你都不要,只要给你家孩子争取“道糠亩”(.com)20%的股份就足够了。  

    11、带他回娘家,不必为了他而找很多人来作陪,他就是一个木偶,只要你给他拉一个线,拉一个网,呆在哪里都能一天,跟一个小机器一样,放在哪里,只要能上网,他保证可以不晓得吃喝(如果你不喊的时候)。

    12、不必跟他争抢电视频道,因为他不会欣赏电视,除了体育足球看看,其他时间都是你的。

    13、掌握好他的银行卡,每天帮他跑跑腿,提提钱,基本上,一个月给他50块生活费即可,剩余的4950.你自己保管好。
     
    14、善待每个可怜的站长吧。不要关他的电脑,不要忘记给他补养,不要忘记他的座椅和帮他按摩倒茶。只要他还有一口气,就是你源源不断的赚钱机器。

    15、不要带领他去太多的网外的场所,那等于害了他,网络的优秀,会让他迅速驰骋。等有了一定的台阶以后,再慢慢把他放下,彻底俘虏他,让他做你一辈子的奴隶。