PHP中的意外T变量

时间:2018-10-07 11:30:05

标签: php xampp

我是PHP的新手,我需要一些帮助。 我很确定这可能是最常见的问题之一,并且很容易解决,但我一直在尝试。我会很愚蠢的

好的,这是我的问题: 每次我进入本地主机尝试打开我的PHP站点时,都不会,因为每次都出现此错误。

  

“解析错误:语法错误,出现意外的'$ db'(T_VARIABLE)   C:\ xampp \ htdocs \ exam \ register.php在第4行“

这是我的PHP代码。

    <?php
    session_start()

    $db = mysqli_connect("localhost", "root", "", "authentication");

    if (isset($_POST['register_btn'])) {
        session_start();
        $username = mysql_real_escape_string($_POST['username']);
        $emailaddress = mysql_real_escape_string($_POST['emailaddress']);
        $password = mysql_real_escape_string($_POST['password']);
        $password2 = mysql_real_escape_string($_POST['password2']);

        if ($password == $password2) {
            $password = md5($password);
            $sql = "INSERT INTO users(username, email, password) VALUES ('$username', '$emailaddress', '$password')";
            mysql_query($db, $sql);
            $_SESSION['message'] = "You are now registered!";
            $_SESSION['username'] = $username;
            header("location: home.php");
        }else {
            $_SESSION['message'] = "The two passwords do not match";
        }   
    }
?>

1 个答案:

答案 0 :(得分:5)

在此之前的行;中缺少分号(session_start())。这就是解析器无法在下一行识别变量$db的原因。

session_start(); // <-- this semicolon is needed

$db = mysqli_connect("localhost", "root", "", "authentication");

但是您的代码中还存在其他问题。您在 mysql_ mysqli _ 扩展名之间混合使用。要连接到数据库,您正在使用mysqli_connect;在转义字符串时,您正在使用mysql_real_escape_stringmysql_query。这是行不通的。

首先,请删除 mysql _ * 扩展名。它已在PHP 5中弃用,并在PHP 7中已完全删除

现在,您的代码已接受SQL injection相关攻击。请学习改用Prepared Statements。您可以使用 mysqli PDO

第二,请不要使用md5来加密密码。它很旧,发现有问题。使用标准的PHP函数password_hash()password_verify()。阅读:Secure hash and salt for PHP passwords

第三次,您两次致电session_start()。请摆脱第二个session_start()函数调用。