【问题标题】:Undefined index username in chat functionality聊天功能中未定义的索引用户名
【发布时间】:2015-09-26 09:57:28
【问题描述】:

我正在我的网站中实现聊天功能。我收到此错误:

注意:未定义索引:用户名

所以在我的聊天框中显示未定义而不是用户名。

我已经包含了 chat.js 和 jquery.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 方法时出现此错误。

【问题讨论】:

  • 你在使用codeigniter吗?另外,为什么不使用 application/config/database.php 设置数据库信息,然后自动加载库。
  • 是的,我正在使用 codeigniter。我也试过了,但根据教程我这样做了。

标签: php jquery json codeigniter


【解决方案1】:

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

【讨论】:

  • 我已经在另一个页面中设置了用户名值,在 firefox 和 chrome 中它会给出如下行:- "username":"
    " 这里它给出了 "SyntaxError:JSON parse:字符串文字中的错误控制字符位于第 2 行第 22 列“
  • 那么可能是会话问题。 url 中有你的会话 id 还是 php 设置了一个带有会话 id 的 cookie?否则 session_start() 无法知道要重新激活哪个会话,而只是启动一个空的新会话。这会导致您收到通知。
  • url 中没有会话 id,当我运行页面会话值时,它会获取。并定义 setcookie 、getcookie 和 clearcookie 的功能,如果我删除 session_start ,则从该页面定义 _SESSION undefine 的错误。
  • 如果你把 session_start();回声 session_id();?死掉每个页面都打印相同的会话ID还是将表单页面更改为页面?
  • 当您在不同的页面上获得不同的 id 时,您的会话配置不正确。检查您的 php.ini 是否设置为“session.use_cookies = 1”?如果它 = 1,则检查您的浏览器是否阻止会话。您还可以在 php.ini 中看到 session.name(默认为 PHPSESSID)。然后您可以转到浏览器设置并检查是否可以找到此 cookie。我认为上面提到的事情之一应该是错误的。修复它们,您的会话应该会再次工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 2012-02-16
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多