我是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";
}
}
?>
答案 0 :(得分:5)
在此之前的行;
中缺少分号(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相关攻击。请学习改用Prepared Statements。您可以使用 mysqli 或 PDO 。
第二,请不要使用md5
来加密密码。它很旧,发现有问题。使用标准的PHP函数password_hash()
和password_verify()
。阅读:Secure hash and salt for PHP passwords
第三次,您两次致电session_start()
。请摆脱第二个session_start()
函数调用。