注销脚本上的语法错误?

Posted

技术标签:

【中文标题】注销脚本上的语法错误?【英文标题】:syntax error on logout script? 【发布时间】:2012-12-09 16:35:00 【问题描述】:

我的注销脚本有问题。它工作正常,如果用户按下注销它会终止会话并转到 logout.php,用户被告知他们已被注销。

但是,当浏览器缓存被清空或网站不应该连接到互联网时,如果用户单击注销按钮,则会出现以下错误消息:

You have an error in your SQL syntax; check the manual that corresponds to your mysql server version for the right syntax to use near '' at line 1

它失败了,因为它无法将注销设置为“1”,所以我想知道如何将 else 语句放在某个地方说重定向到 logout.php,这样我就不会收到那个可怕的语法错误消息。

这是我的代码:

<?php   
ob_start();
    require('includes/_config/connection.php');
    require('includes/functions.php');  
?>

<?php
session_start();

$result = mysql_query("UPDATE ptb_users SET user_online='Offline' WHERE id=".$_SESSION['user_id']."") 
or die(mysql_error()); 
?>

<?php
    // Four steps to closing a session
    // (i.e. logging out)

    // 1. Find the session

    // 2. Unset all the session variables
    $_SESSION = array();

    // 3. Destroy the session cookie
    if(isset($_COOKIE[session_name()])) 
        setcookie(session_name(), '', time()-42000, '/');
    

    // 4. Destroy the session
    session_destroy();

    redirect_to("login.php?logout=1");

    ob_end_flush()
?>

【问题讨论】:

【参考方案1】:

你有双引号,你应该使用单引号

改变这个:

$result = mysql_query("UPDATE ptb_users SET user_online='Offline' WHERE id=".$_SESSION['user_id']."")

收件人:

$result = mysql_query("UPDATE ptb_users SET user_online='Offline' WHERE id='" . $_SESSION['user_id'] . "'")

请注意您应该替换所有mysql_* 函数。从PHP 5.5.0 开始,它们已被弃用。使用 PDO 或 MySQLi 之类的东西

【讨论】:

通常 ID 存储为整数,所以我认为您不需要在用户 ID 周围加上单引号。【参考方案2】:

是的,您的引号有问题:只要 user_id 是整数值,您就可以这样做:

$result = mysql_query("UPDATE ptb_users SET user_online='Offline' WHERE id=".$_SESSION['user_id']);

如果是字符串,切换到单引号:

$result = mysql_query('UPDATE ptb_users SET user_online="Offline" WHERE id="'.$_SESSION['user_id'].'"');

【讨论】:

【参考方案3】:

你不能在输出发送后调用 session_start() - 你需要输出什么吗?

还要确保 $_SESSION['user_id'] 实际上有一个值; print_r($_SESSION)

【讨论】:

以上是关于注销脚本上的语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

IE 11 上的 MutationObserver 语法错误

检查tcl脚本语法错误

Linux中测试脚本写好运行后提示语法错误咋回事

语法错误:“(”意外(预期“然后”)

rails,使用咖啡脚本出现语法错误

语法错误时不执行“ERR”陷阱