2015-09-26 26 views
-1

我在我的网站中实现了聊天功能。它给出的错误是“注意:未定义的索引:用户名”。所以在我的聊天室中,用户名显示为undefine。在聊天功能中未定义的索引用户名

我已经包含chat.js和jquey.js文件。 这是我Chat.php文件

<?php 
define ('DBPATH','localhost'); 
define ('DBUSER','root'); 
define ('DBPASS',''); 
define ('DBNAME','abc'); 

session_start(); 
global $dbh; 
$dbh = @mysql_connect(DBPATH,DBUSER,DBPASS); 
@mysql_select_db(DBNAME,$dbh); 

if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); } 
if ($_GET['action'] == "sendchat") { sendChat(); } 
if ($_GET['action'] == "closechat") { closeChat(); } 
if ($_GET['action'] == "startchatsession") { startChatSession(); } 

if (!isset($_SESSION['chatHistory'])) { 
    $_SESSION['chatHistory'] = array(); 
} 

if (!isset($_SESSION['openChatBoxes'])) { 
    $_SESSION['openChatBoxes'] = array(); 
} 

function chatHeartbeat() { 

    $sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC"; 
    $query = @mysql_query($sql); 
    $items = ''; 

    $chatBoxes = array(); 

    while ($chat = mysql_fetch_array($query)) { 

     if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) { 
      $items = $_SESSION['chatHistory'][$chat['from']]; 
     } 

     $chat['message'] = sanitize($chat['message']); 

     $items .= <<<EOD 
         { 
      "s": "0", 
      "f": "{$chat['from']}", 
      "m": "{$chat['message']}" 
     }, 
EOD; 

    if (!isset($_SESSION['chatHistory'][$chat['from']])) { 
     $_SESSION['chatHistory'][$chat['from']] = ''; 
    } 

    $_SESSION['chatHistory'][$chat['from']] .= <<<EOD 
          { 
      "s": "0", 
      "f": "{$chat['from']}", 
      "m": "{$chat['message']}" 
     }, 
EOD; 

     unset($_SESSION['tsChatBoxes'][$chat['from']]); 
     $_SESSION['openChatBoxes'][$chat['from']] = $chat['sent']; 
    } 

    if (!empty($_SESSION['openChatBoxes'])) { 
    foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) { 
     if (!isset($_SESSION['tsChatBoxes'][$chatbox])) { 
      $now = time()-strtotime($time); 
      $time = date('g:iA M dS', strtotime($time)); 

      $message = "Sent at $time"; 
      if ($now > 180) { 
       $items .= <<<EOD 
{ 
"s": "2", 
"f": "$chatbox", 
"m": "{$message}" 
}, 
EOD; 

    if (!isset($_SESSION['chatHistory'][$chatbox])) { 
     $_SESSION['chatHistory'][$chatbox] = ''; 
    } 

    $_SESSION['chatHistory'][$chatbox] .= <<<EOD 
     { 
"s": "2", 
"f": "$chatbox", 
"m": "{$message}" 
}, 
EOD; 
      $_SESSION['tsChatBoxes'][$chatbox] = 1; 
     } 
     } 
    } 
} 

    $sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0"; 
    $query = mysql_query($sql); 

    if ($items != '') { 
     $items = substr($items, 0, -1); 
    } 
header('Content-type: application/json'); 
?> 
{ 
     "items": [ 
      <?php echo $items;?> 
     ] 
} 
<?php 
      exit(0); 
} 

function chatBoxSession($chatbox) { 

    $items = ''; 

    if (isset($_SESSION['chatHistory'][$chatbox])) { 
     $items = $_SESSION['chatHistory'][$chatbox]; 
    } 

    return $items; 
} 

function startChatSession() { 
    $items = ''; 
    if (!empty($_SESSION['openChatBoxes'])) { 
     foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) { 
      $items .= chatBoxSession($chatbox); 
     } 
    } 


    if ($items != '') { 
     $items = substr($items, 0, -1); 
    } 

header('Content-type: application/json'); 
?> 
{ 
     "username": "<?php echo $_SESSION['username'];?>", 
     "items": [ 
      <?php echo $items;?> 
     ] 
} 
<?php 
    exit(0); 
} 

function sendChat() { 
    $from = $_SESSION['username']; 
    $to = $_POST['to']; 
    $message = $_POST['message']; 

    $_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time()); 

    $messagesan = sanitize($message); 

    if (!isset($_SESSION['chatHistory'][$_POST['to']])) { 
     $_SESSION['chatHistory'][$_POST['to']] = ''; 
    } 

    $_SESSION['chatHistory'][$_POST['to']] .= <<<EOD 
         { 
      "s": "1", 
      "f": "{$to}", 
      "m": "{$messagesan}" 
     }, 
EOD; 


    unset($_SESSION['tsChatBoxes'][$_POST['to']]); 

    $sql = "insert into chat (chat.from,chat.to,message,sent) values ('".mysql_real_escape_string($from)."', '".mysql_real_escape_string($to)."','".mysql_real_escape_string($message)."',NOW())"; 
    $query = mysql_query($sql); 
    echo "1"; 
    exit(0); 
} 

function closeChat() { 

    unset($_SESSION['openChatBoxes'][$_POST['chatbox']]); 
    exit(0); 
} 

function sanitize($text) { 
    $text = htmlspecialchars($text, ENT_QUOTES); 
    $text = str_replace("\n\r","\n",$text); 
    $text = str_replace("\r\n","\n",$text); 
    $text = str_replace("\n","<br>",$text); 
    return $text; 
} 
?> 

当那个时代startChatSession方法调用它给出了这样的错误。

+0

你使用codeigniter吗?另外,为什么不使用application/config/database.php设置数据库信息,然后自动加载库。 – user4419336

+0

是的我使用codeigniter。我也试过,但根据教程我这样做。 –

回答

0

在您的代码中,您从未将任何值设置为$ _SESSION ['username']。 这就是为什么PHP抱怨,索引“用户名”不存在于$ _SESSION。

+0

我已经在另一个页面中设置了用户名值,并且在firefox和chrome中它会显示如下行: - “username”:“
”这里给出了“SyntaxError:JSON解析错误:第22列“ –

+0

我尝试从这个网站: - http://webexplorar.com/codeigniter-chat-example/ –

+0

那么这可能是一个会话问题。有没有你的会话ID在URL中或没有PHP设置与会话ID cookie?否则session_start()无法知道要重新激活哪个会话,而只是启动一个新的空的会话。那会导致你得到的通知。 – alexandre