PHP 中的意外 T 变量
unexpected T variable in PHP
我是 PHP 的新手,需要一些帮助。
我很确定这可能是最常见的问题之一并且有一个简单的修复方法,但我一直在尝试。我会很愚蠢的
好的,这是我的问题:
每次我去我的本地主机尝试打开我的 PHP 网站它不会因为我每次都收到这个错误。
"Parse error: syntax error, unexpected '$db' (T_VARIABLE) in
C:\xampp\htdocs\exam\register.php on line 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";
}
}
?>
session_start()
之前的行中缺少一个分号 (;
)。这就是解析器无法识别下一行中的变量 $db
的原因。
session_start(); // <-- this semicolon is needed
$db = mysqli_connect("localhost", "root", "", "authentication");
但是您的代码中还有其他问题。您正在混合 mysql_ 和 mysqli_ 扩展。要连接到数据库,您正在使用 mysqli_connect
;为了转义字符串,您使用 mysql_real_escape_string
和 mysql_query
。这行不通。
首先,请删除 mysql_* 扩展。它已在 PHP 5 中弃用,在 PHP 7 中完全删除。
现在,您的代码对 SQL injection related attacks. Please learn to use Prepared Statements 开放。您可以使用 mysqli 或 PDO。
其次,请不要使用md5
来加密您的密码。它很旧,发现有问题。使用标准 PHP 函数 password_hash()
and password_verify()
. Do Read: Secure hash and salt for PHP passwords
第三,你已经打了两次session_start()
。请去掉第二个 session_start()
函数调用。
我是 PHP 的新手,需要一些帮助。 我很确定这可能是最常见的问题之一并且有一个简单的修复方法,但我一直在尝试。我会很愚蠢的
好的,这是我的问题: 每次我去我的本地主机尝试打开我的 PHP 网站它不会因为我每次都收到这个错误。
"Parse error: syntax error, unexpected '$db' (T_VARIABLE) in C:\xampp\htdocs\exam\register.php on line 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";
}
}
?>
session_start()
之前的行中缺少一个分号 (;
)。这就是解析器无法识别下一行中的变量 $db
的原因。
session_start(); // <-- this semicolon is needed
$db = mysqli_connect("localhost", "root", "", "authentication");
但是您的代码中还有其他问题。您正在混合 mysql_ 和 mysqli_ 扩展。要连接到数据库,您正在使用 mysqli_connect
;为了转义字符串,您使用 mysql_real_escape_string
和 mysql_query
。这行不通。
首先,请删除 mysql_* 扩展。它已在 PHP 5 中弃用,在 PHP 7 中完全删除。
现在,您的代码对 SQL injection related attacks. Please learn to use Prepared Statements 开放。您可以使用 mysqli 或 PDO。
其次,请不要使用md5
来加密您的密码。它很旧,发现有问题。使用标准 PHP 函数 password_hash()
and password_verify()
. Do Read: Secure hash and salt for PHP passwords
第三,你已经打了两次session_start()
。请去掉第二个 session_start()
函数调用。