xidaojia 2017-08-09 13:09 采纳率: 0%
浏览 734

PHP WEB版QQ多人聊天,数据无法插入数据库

制作WEB版QQ多人聊天过程中, 无法将数据插入数据库,查找了多遍,实在不知哪里有错误,请各位老师帮忙看一下,给指点,非常感谢!
下面是各文件:

//my.js
function getXmlHttpObject(){
    var xmlHttpRequest;
    if(window.ActiveXObject){
        xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        xmlHttpRequest=new XMLHttpRequest; 
    }
    return xmlHttpRequest;
}

function $(id){
    return document.getElementById(id);
}


<!-- login.php -->
<?php
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>登录页面</title>
</head>
<body style="text-align: center;">
<h1>欢迎登录聊天室</h1>
<form action="LoginController.php" method="post">
用户名: <input type="text" name="username" /><br /><br />
密&nbsp;码: <input type="password" name="passwd" /><br /><br /> 
<input type="submit" value="登录聊天室" />
</form>
</body>
</html>



<!-- friendList.php -->
<?php
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>好友列表</title>
<script src="scripts/my.js"></script>
<script>
function change1(val,obj){
    if(val=='over'){
        obj.style.color="red";
        obj.style.cursor="pointer";
    }else if(val=='out'){
        obj.style.color="black";
    }
}
function openChatRoom(obj){
window.open("chatRoom.php?username="+obj.innerText,'',"width=300,height=500");
}
</script>
</head>
<body style="text-align: center;">
<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>
</body>
</html>


<!-- LoginController.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");
}
?>


<!-- SendMessageController.php -->
<?php
include_once 'MessageService.class.php';
$sender=$_POST['sender'];
$getter=$_POST['getter'];
$con=$_POST['con'];

// file_put_contents("d  :/mylog.log",$sender."-".$getter."-".$con."\r\n",FILE_APPEND);

$messageService=new MessageService();
$res=$messageService->addMessage($sender, $getter, $con);
if($res==1){

}else{
    echo "err";
}
?>


<!-- MessageService.class.php -->
<?php
include_once 'SqlHelper.class.php';
class MessageService {
    function addMessage($sender, $getter, $con) {
        $sql="insert into messages(sender,getter,content,sendTime) 
        values('$sender','$getter','$con',now())";    
        $sqlHelper=new SqlHelper();
        return $sqlHelper->execute_dml($sql);
     }
}
?> 


<!-- SqlHelper.class.php -->
<?php
class SqlHelper {

    public $conn;
    public $dbname="chat";
    public $username="root";
    public $password="123";
    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>&nbsp;";
        }
        if($fenyePage->pageNow<$fenyePage->pageCount){
            $nextPage=$fenyePage->pageNow+1;
            $navigate.="<a href='{$fenyePage->gotoUrl}?pageNow=$nextPage'>下一页</a>&nbsp;";
        }

        $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.="&nbsp;&nbsp;<a href='{$fenyePage->gotoUrl}?pageNow=".($start-1)."'>&nbsp;&nbsp;<<&nbsp;&nbsp;</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.="&nbsp;&nbsp;<a href='{$fenyePage->gotoUrl}?pageNow=$start'>&nbsp;&nbsp;>>&nbsp;&nbsp;</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);
        }
    }
}
?>


数据库
create database chat;
create table messages(
id int unsigned primary key auto_increment,
sender varchar(64) not null,
getter varchar(64) not null,
content varchar(3600) not null,
sendTime datetime not null,
isGet tinyint default 0)

请老师们指点,多谢!

  • 写回答

1条回答

  • JPF1024 2017-08-09 16:42
    关注

    几个方向:

    1.检查参数发送到后台没有,可以通过f12的console和network看,是不是发送成功;
    2.参数在插入数据库之前,收到的是否完整,是否无异常;
    3.插入数据库的时候,是否发生了异常.

    评论

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用