1

我看不到我的错误来自哪里,我检查了分号并且看不到任何缺失。我对php相当陌生,非常感谢您的帮助。实际错误如下:

解析错误:语法错误,第 54 行 /home/sam/public_html/query.php 中的意外 T_VARIABLE

以下是第 54 行:

$sql = "UPDATE Users SET Datecreated='".$date."' WHERE Username='".$usernamec."'";

这是完整的代码:

<?php  session_start();

include 'connect.php';

echo "Hello World!";

echo '$_SESSION[page]';

$_SESSION['loggedon']=12345;
$username=$_POST['username'];
$password=$_POST['password'];

$sql = "SELECT * FROM 'Users' WHERE 'Username'='".$username."'";
$result = @mysql_query( $sql );
while ($row= @mysql_fetch_assoc($result))
    {
    if (($username=$row['Username'])&&($password=$row['Password']))
    {
        $_SESSION['loggedon']=$row['AccessLevel'];
        $_SESSION['userid']=$row['UserID'];}}


if ($_SESSION['loggedon']==12345)
    {
    $sql = "SELECT * FROM 'RedundantUsers' WHERE 'Username'='".$username."'";
    $result = @mysql_query( $sql );
    while ($row= @mysql_fetch_assoc($result))
        {   
            $_SESSION['loggedon']=$row['AccessLevel'];
            $_SESSION['userid']=$row['UserID'];


            $userid    =$row['UserID'];
            $forename  =$row['Forename'];
            $surname   =$row['Surname'];
            $email     =$row['Email'];
            $usernamec =$row['Username'];
            $access    =$row['AccessLevel'];


            $sql = "INSERT INTO 'Users' ('UserID', 'Forename', 'Surname', 'Email', 'Username', 'AccessLevel')
                    VALUES ('$userid', '$forename', '$surname', '$email', '$usernamec', '$access')";

                if (!@mysql_query($sql))    
                    {
                    die('Error: ' . mysql_error());
                        }
               $sql = "DELETE * FROM 'RedundantUsers' WHERE 'Username'='".$usernamec."'"; }}

    date_default_timezone_set('UTC');

        $date = date("Y-m-d H:i:s");    

            $sql = "UPDATE 'Users' SET 'Datecreated'='".$date."' WHERE 'Username'='".$usernamec."'";

                if (!@mysql_query($sql))    
                    {
                    die('Error: ' . mysql_error());
                        }


                    echo $_SESSION['loggedon']; 

header('Location: /'.$_SESSION['page']);

?>

万一它有帮助,这里是connect.php:

<?php
$dbhost = '*****';
$dbuser = '*****'; 
$dbpass = '*****';  
$conn = @mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to local MySQL')
$dbname = '******';
@mysql_select_db($dbname);      
?>
4

2 回答 2

1

在第 54 行(发生错误的地方)

改变

echo $_SESSION[loggedon];

echo $_SESSION['loggedon'];

这意味着您忘记包含'在会话值中。除非值是已定义的常量,否则应始终包含单引号。

更新


<?php  session_start();

include 'connect.php';

echo "Hello World!";

echo $_SESSION['page'];

    $_SESSION['loggedon']=12345;
    $username=$_POST['username'];
    $password=$_POST['password'];

    $sql = "SELECT * FROM Users WHERE Username='".$username."'";
    $result = mysql_query($sql) or die(mysql_error());
    while ($row= mysql_fetch_array($result))
        {

        if (($username=$row['Username'])&&($password=$row['Password']))
        {
            $_SESSION['loggedon']=$row['AccessLevel'];
            $_SESSION['userid']=$row['UserID'];}}


    if ($_SESSION['loggedon']==12345)
        {
        $sql = "SELECT * FROM RedundantUsers WHERE Username='".$username."'";
        $result = mysql_query($sql);
        while ($row= mysql_fetch_array($result))
            {   
                $_SESSION['loggedon']=$row['AccessLevel'];
                $_SESSION['userid']=$row['UserID'];


                $userid    =$row['UserID'];
                $forename  =$row['Forename'];
                $surname   =$row['Surname'];
                $email     =$row['Email'];
                $usernamec =$row['Username'];
                $access    =$row['AccessLevel'];




                $sql = "INSERT INTO Users (UserID, Forename, Surname, Email, Username, AccessLevel)
                        VALUES ('$userid', '$forename', '$surname', '$email', '$usernamec', '$access')";

                    if (!mysql_query($sql))    
                        {
                        die('Error: ' . mysql_error());
                            }
                   $sql = "DELETE * FROM RedundantUsers WHERE Username='".$usernamec."'"; }}

        date_default_timezone_set('UTC');

            $date = date("Y-m-d H:i:s");  
            global $usernamec;          

                $sql = "UPDATE Users SET Datecreated='".$date."' WHERE Username='".$usernamec."'";

                    if (!@mysql_query($sql))    
                        {
                        die('Error: ' . mysql_error());
                            }


                        echo $_SESSION[loggedon];   

    header('Location: /'.$_SESSION[page]);

    ?>
于 2013-04-14T18:41:12.750 回答
1

这里有几个明显的问题:

  1. 您正在使用mysql_*方法,而应该使用 MySQLi。
  2. 你不能确保你的 SQL 查询中包含的字符串已经过清理,因此为 SQL 注入敞开了大门。
  3. 您的数组键应该是字符串,这意味着将它们放在单引号中。
  4. mysql_fetch_arrayto切换mysql_fetch_assoc将返回一半的数据量,但仍然可以正常工作 - 无需无缘无故增加内存使用量。
  5. 使用反引号 (`) 来表示您的表名和列名,这有助于保持 SQL 整洁,但也可以避免与保留字等的任何潜在冲突。

所以最终是这样的:

$row[UserID];

应该变成:

$row['UserID'];

与您在代码中使用的位置$_SESSION$_POST其他数组相同。

另外,一定要看看这个关于 MySQLi 的教程,尤其是关于转义字符串的部分!

编辑

您在语句中使用声明if,而不是比较:

if (($username=$row[Username])&&($password=$row[Password]))

应该:

if (($username==$row[Username])&&($password==$row[Password]))

仔细检查你的所有if陈述。

于 2013-04-14T18:50:41.767 回答