PHP:无法回显来自DB

时间:2015-08-06 12:20:12

标签: php ajax echo chat

我正在编写聊天脚本,但我对echo一些变量有疑问!

我已在 chat.php 中编写了这段代码来显示消息:

<?php
session_start();
$id=$_GET['id'];
if(isset($id)){
global $id;
global $qs;
global $answerer;
global $sp;
global $name;
include('config.php');
$conn=new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8;",$username,$password);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$id=$conn->quote(htmlentities($id));
$find=$conn->prepare("SELECT * FROM qs WHERE id=:id");
$find->bindParam(':id',$id);
$find->execute();
if($rows=$find->fetch(PDO::FETCH_ASSOC)){
    $qs=$rows['question'];
    $answerer=$rows['answerer'];
}
$answerer=explode("(",$answerer);
$ansgiver=$conn->prepare("SELECT * FROM ruhani WHERE name=:answerer");
$ansgiver->bindParam(':answerer',$answerer[0]);
$ansgiver->execute();
if($row=$ansgiver->fetch(PDO::FETCH_ASSOC)){
    $name=$row['username'];
    $avatar=$row['avatar'];
    $sp=$row['sp'];
}
class chat {
    public function fetchMessage() {
        include('config.php');
        global $id;
        $conn=new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8;",$username,$password);
        $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $ans=$conn->prepare("SELECT answere FROM ans WHERE q_id=:id ");
        $ans->bindParam(':id',$id);
        $ans->execute();
    }
    public function throwMessage($id, $text,$sayer){
        include('config.php');
        global $id;
        $conn=new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8;",$username,$password);
        $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $send=$conn->prepare("INSERT INTO ans(q_id,answere,sayer)  VALUES(:q_id,:text,:sayer) ");
        $send->bindParam(':q_id',$id);
        $send->bindParam(':text',$text);
        $send->bindParam(':sayer',$sayer);
        $send->execute();
    }
}
$chat = new chat();
?>
<!DOCTYPE html>
<head>
    <title>Example Title</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="style/style.css" media="screen, projection" />
    <script src="js/jquery-1.6.3.min.js"></script>
    <script src="js/chat.js"></script>
</head>
<body>
<div class="all">
<div class="env">
<span><?php echo $name ?>|<?php echo $sp ?></span>
<span>Hi,Can I help you?</span><br>
<span>me:<?php echo $qs ?></span>
<div class="messages"></div>
</div>
<textarea name="ask_ans" class="ask_ans" id="ask_ans" placeholder="Please write here!"></textarea><br>
<input type="submit" class="submit" name="submit" value="send"  />
<input type="hidden" id="hidden" value=<? echo $id ?> />
<input type="hidden" id="hidden2" value=<? echo $_SESSION['$username'] ?> />
</div>
</body>
<?php
}
?>

此Ajax部分代码( chat.js ):

var chat = { }
chat.fetchMessage=function (){
    $.ajax({
        url:"send.php",
        type: 'POST',
        data: {method : 'fetch'},
        cache:false,
        success: function(data){
            $(".all .env .messages").html(data)
        }
    });
}
chat.throwMessage=function (id,message,sayer){
    if($.trim(message).length != 0 ){
        $.ajax({
            url:"send.php",
            type: 'POST',
            data: {method : 'throw' , id : id , message : message , sayer : sayer  },
            cache:false,
            success: function(data){
                chat.fetchMessage();
                $(".ask_ans").val('');
            }
        });
    }
}
chat.entry=$(".all .submit");
chat.entry.bind('click',function (evt){
    evt.preventDefault();
    chat.throwMessage($("#hidden").val(),$(".ask_ans").val(),$("#hidden2").val());
});
chat.interval=setInterval(chat.fetchMessage(),5000);
chat.fetchMessage()

这是 send.php

<?php
require('chat.php');
if (isset($_POST['method']) and !empty($_POST['method'])){
    $chat   =new chat();
    $method =trim($_POST['method']);
    if ($method === 'fetch'){
        $messages=$chat->fetchMessage();
        if (!empty($messages)){
            while($r=$messages->fetch(PDO::FETCH_ASSOC)){
                $sayer=$r['sayer'];
                if($sayer===$starter){
                    ?>
                    <span class="text" style="float:left"><? echo $r['answere'] ?></span>
                    <?php
                }else{
                    ?>
                    <span class="text" style="float:right"><? echo $r['answere'] ?></span>
                    <?php
                }
            }
        }
    }else if ($method === 'throw'){
        $message=trim(htmlentities($_POST['message']));
        $id=trim(htmlentities($_POST['id']));
        $sayer=trim(htmlentities($_POST['sayer']));
        if(!empty($message) and !empty($id) and !empty($sayer)){
            $chat->throwMessage($id,$message,$sayer);
        }
    }
}
?>

我收到错误:

  

未定义的索引:id

我的问题是我无法在chat.php中回复$qs$name$sp

任何人都可以理解我的代码中的错误部分吗?

1 个答案:

答案 0 :(得分:2)

经过很长时间我检查了我的代码,我明白了问题:)

如你所见,我正在使用PDO :: quote()并将' '放在单词上。所以,当我在这里爆炸变量时:$answerer=explode("(",$answerer);,它无法找到在DB中搜索正确的单词并且没有echo变量。

现在我删除了PDO :: quote(),我的代码工作正常。: - )