2015-09-26 29 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