韩顺平老师 ajax 聊天室 数据出入不进去

caiyou19810424 2015-07-24 11:16:13
1.login.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>

<center>
<h1>欢迎登陆聊天室</h1>
<form action="loginController.php" method="post">
用户名:<input type="text" name="username"/></br>
密码:<input type="password" name="passwd"/></br>

<input type="submit" value="登陆聊天室"/>

</form>
</center>
</html>

2 friendList.php
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript">
function change1(val,obj){
if(val=="over"){
obj.style.color="red";
obj.style.cursor="hand";

}else if(val=="out"){
obj.style.color="black";
}
}
//相应点击新的聊天窗口
function openChatRoom(obj){
//打开小新窗口
//因为open 是get方式提交,到服务器后就会变乱码 所以需要编码
window.open("chatRoom.php?username="+encodeURI(obj.innerText),"_blank");

}
</script>

</head>


<h1>好友列表</h1>
<ul>
<li onmouseover="change1('over',this)" onmouseout="change1('out',this)" onclick="openChatRoom(this)">宋佳</li>
<li onmouseover="change1('over',this)" onmouseout="change1('out',this)" onclick="openChatRoom(this)">张飞</li>
<li onmouseover="change1('over',this)" onmouseout="change1('out',this)" onclick="openChatRoom(this)" >小闹</li>
</ul>

</html>

3loginController.php
<?php

//接收用户多的名字和密码
$loginUser=$_POST['username'];
$pwd=$_POST['passwd'];

//判断是否合法
if($pwd=="123"){
//把用户的名字保存下来
session_start();
$_SESSION['loginuser']=$loginUser;
//跳转到好友列表
header("Location:friendList.php");

}
else{//不合法
header("Location:login.php");
}
?>

4 chatRoom.php
<html>
<head>
<?php
//接收window.open传递的用户名
$username=$_GET['username'];
//使用php方法消去名字后面的空格
$username=trim($username);

//这里取出session保存的登陆者信息
session_start();
$loginuser=$_SESSION['loginuser'];
?>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<script type="text/javascript" src="my.js"></script>
<script type="text/javascript">
window.resizeTo(500,700);

function sendMessage(){ //用ajax 技术来实现了
//1.创建一个XmlHttpRequest对象
var myXmlHttpRequest=getXmlHttpObject();
if(myXmlHttpRequest){
var url="sendMessageController.php";
//js中如何使用php的数据!!1如何这这里获得发送人是谁 只有在登陆的时候才知道发送人

var data="con="+$("con").value+"&getter=<?php echo $username ?>&sender=<?php echo $loginuser ?>";
window.alert(data);

//要发的内容
//2
myXmlHttpRequest.open("post",url,true);
myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//这是post方式必须加的
//指定函数
myXmlHttpRequest.onreadystatechange=function (){
if(myXmlHttpRequest.readyState==4){
if(myXmlHttpRequest.status==200){
//这里是要得到的信息
}
}
};

myXmlHttpRequest.send(data);
}
}
</script>

</head>


<center>
<h1>聊天室(<font color="red"><?php echo $loginuser;?></font>正在和<font color="red"><?php echo $username;?></font>聊天)</h1>
<textarea cols="50" rows="20"></textarea></br/>
<input type="text" style="width:300px" id="con"/>
<input type="button" value="发送信息" onclick="sendMessage()"/>

</form>
</center>
</html>

5 sendMessageController.php
<?php
require_once "MessageService.class.php";
$getter=$_POST['getter'];
$sender=$_POST['sender'];
$con=$_POST['con'];
//file_put_contents("D:/log.txt",$getter."---".$sender."---".$con."\r\n",FILE_APPEND);
$messageService = new MessageService();
//file_put_contents("D:/log.txt","程序运行到这里了"."\r\n",FILE_APPEND);
$res = $messageService-> addMessage($sender,$getter,$con);
if($res == 1) {
//success
}else {
echo "err";
}
?>

6MessageService.class.php
<?php
require_once "sqlHelper.class.php";
class MessageService{
//存储消息
function addMessage($sender,$getter,$con) {
//创建SQL语句
$sql = "insert into messages (sender,getter,content,sendTime) values('$sender','$getter','$con',now())";
file_put_contents("d:/mylog.log","con=".$sql."\r\n",FILE_APPEND);
$sqlHelper = new sqlHelper();
return $sqlHelper->execute_dml($sql);
}
}
7my.js
//1.创建ajax对象
function getXmlHttpObject(){
//根部是否为ie浏览器来创建对象
var xmlHttpRequest;
if(window.ActiveXObect){
xmlHttpRequest=new ActiveXObject("Mircosoft.XMLHTTP");
}else{
xmlHttpRequest=new XMLHttpRequest();
}
return xmlHttpRequest;
}

//通过id来获取某个对象
function $(id){
return document.getElementById(id);
}
8 sqlHelper.class.php
<?php

//这个一个工具类,作用是完成对数据库的操作
class SqlHelper {

public $conn;
public $dbname="chat";
public $username="root";
public $password="root";
public $host="localhost";

public function __construct(){

$this->conn=mysql_connect($this->host,$this->username,$this->password);
if(!$this->conn){
die("连接失败".mysql_error());
}
mysql_select_db($this->dbname,$this->conn);
}



//执行dql语句
public function execute_dql($sql){

$res=mysql_query($sql,$this->conn) or die(mysql_error());
return $res;

}

//执行dql语句,但是返回的是一个数组
public function execute_dql2($sql){

$arr=array();
$res=mysql_query($sql,$this->conn) or die(mysql_error());

//把$res=>$arr 把结果集内容转移到一个数组中.
while($row=mysql_fetch_assoc($res)){
$arr[]=$row;
}
//这里就可以马上把$res关闭.
mysql_free_result($res);
return $arr;

}

//考虑分页情况的查询,这是一个比较通用的并体现oop编程思想的代码
//$sql1="select * from where 表名 limit 0,6";
//$sql2="select count(id) from 表名"
public function exectue_dql_fenye($sql1,$sql2,$fenyePage){

//这里我们查询了要分页显示的数据
$res=mysql_query($sql1,$this->conn) or die(mysql_error());
//$res=>array()
$arr=array();
//把$res转移到$arr
while($row=mysql_fetch_assoc($res)){
$arr[]=$row;
}

mysql_free_result($res);

$res2=mysql_query($sql2,$this->conn) or die(mysql_error());

if($row=mysql_fetch_row($res2)){
$fenyePage->pageCount=ceil($row[0]/$fenyePage->pageSize);
$fenyePage->rowCount=$row[0];
}

mysql_free_result($res2);

//把导航信息也封装到fenyePage对象中
$navigate="";
if ($fenyePage->pageNow>1){
$prePage=$fenyePage->pageNow-1;
$navigate="<a href='{$fenyePage->gotoUrl}?pageNow=$prePage'>上一页</a> ";
}
if($fenyePage->pageNow<$fenyePage->pageCount){
$nextPage=$fenyePage->pageNow+1;
$navigate.="<a href='{$fenyePage->gotoUrl}?pageNow=$nextPage'>下一页</a> ";
}

$page_whole=10;
$start=floor(($fenyePage->pageNow-1)/$page_whole)*$page_whole+1;
$index=$start;
//整体每10页向前翻
//如果当前pageNow在1-10页数,就没有向前翻动的超连接
if($fenyePage->pageNow>$page_whole){
$navigate.="  <a href='{$fenyePage->gotoUrl}?pageNow=".($start-1)."'>  <<  </a>";
}
//定$start 1---》10 floor((pageNow-1)/10)=0*10+1 11->20 floor((pageNow-1)/10)=1*10+1 21-30 floor((pageNow-1)/10)=2*10+1
for(;$start<$index+$page_whole;$start++){
$navigate.="<a href='{$fenyePage->gotoUrl}?pageNow=$start'>[$start]</a>";
}

//整体每10页翻动
$navigate.="  <a href='{$fenyePage->gotoUrl}?pageNow=$start'>  >>  </a>";
//显示当前页和共有多少页
$navigate.=" 当前页{$fenyePage->pageNow}/共{$fenyePage->pageCount}页";

//把$arr赋给$fenyePage
$fenyePage->res_array=$arr;
$fenyePage->navigate=$navigate;


}

//执行dml语句
public function execute_dml($sql){

$b=mysql_query($sql,$this->conn) or die(mysql_error());
if(!$b){
return 0; //失败
}else{
if(mysql_affected_rows($this->conn)>0){
return 1;//表示执行ok
}else{
return 2;//表示没有行受到影响
}
}

}

//关闭连接的方法
public function close_connect(){

if(!empty($this->conn)){
mysql_close($this->conn);
}
}
}
?>


页面跳转之类的都正常,把sql语句单独打印出来也可以,手动将sql语句插入数据库也正常,但是用sql_helper中的方法插入的时候就不能正常插入到数据库中,数据库中不显示该条语句,求大神帮忙看看!!!!!
...全文
261 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
NS西北风 2016-05-15
  • 打赏
  • 举报
回复
楼主,解决了吗??求完整源码??
傲雪星枫 2015-07-26
  • 打赏
  • 举报
回复
看看错误日志有什么提示。
富川龙 2015-07-26
  • 打赏
  • 举报
回复
首先在你实例化对象那边,var_dump一下对象,看是不是正常的对象,之后再检查SQL语句,这样查错方便很多
caiyou19810424 2015-07-24
  • 打赏
  • 举报
回复
发现$sqlHelper = new sqlHelper(); 没有成功到时不能插入 可是还没有找出具体错误 求大神看看啊

21,873

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧