我正在学习PHP,我目前正在尝试使用PHP打印MYSQL表的内容。我一直收到以下错误。
解析错误:语法错误,第53行的C:\ xampp \ htdocs \ login2.php中的文件意外结束
第53行是</html>
标记。
这是我的代码:
<html>
<head>
</head>
<body>
<?php
$userName = $_POST["userName"];
$password = $_POST["passwd"];
$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
$db_host = "localhost";
$db_username = "root";
$db_name = "labdb";
$con=@mysqli_connect("localhost","root","","labdb");
if(mysqli_connect_errno())
{
echo "Failed MySQL connect" . mysqli_connect_error();
}
$sql="INSERT INTO user (username, password, firstName, lastName)
VALUES
('$_POST[userName]','$_POST[passwd]','$_POST[firstName]','$_POST[lastName]')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
$query="SELECT * FROM user";
$result=mysql_query($query);
while($row = mysql_fetch_array($result)){
echo $row['userID'] . " " .$row['username'] . " " . $row['password'] . " " .
$row['firstName'] . " " . $row['lastName'];
echo "<BR/>";
mysqli_close($con);
?>
</body>
</html>
有人可以帮忙吗?
答案 0 :(得分:3)
此代码中存在大量错误,超出了缺少}
的初始语法错误。
您正在定义一堆变量$userName
,$db_host
等,但之后不再在代码中使用它们。
确保您的HTML代码始终以doctype开头。将<!DOCTYPE html>
添加为代码的第一行,位于<html>
代码上方。
INSERT
查询的代码有几个不同的错误:
»$_POST[passwd]
:使用数组键时,必须引用键名。如果你不这样做,PHP会处理,但是会抛出警告信息,并且有些情况可能会出错。如果你在这样的字符串中使用数组键,你还需要将它包装在大括号中以使其有效。正确的语法如下所示:
$stringVar = "..... `{$_POST["passwd"]}`....";
»但是这里不要使用那种语法,因为还有更多:你也应该永远 直接在SQL查询字符串中使用$_POST
变量您 必须 转义您添加到查询字符串的所有变量。如果不这样做,将导致您的代码遭到入侵。
这里有太多需要详细说明(我没有时间编写整个教程),但请谷歌搜索“SQL注入攻击”以及如何避免它们。您可以使用mysqli_real_escape_string()
来转义字符串,也可以使用“预准备语句”。我推荐后者,但正如我所说的谷歌。
另一个带有密码的项目:您应该永远将密码作为纯文本存储在数据库中。始终使用优质的哈希算法来隐藏黑客的密码。这也是一个非常大的主题,对我来说太大了,不能在这里详细描述,但对于用户的安全性至关重要。
在程序中途,您可以使用mysqli
函数切换到mysql
函数。请注意,这两组功能彼此不兼容。您使用mysqli
打开了数据库,这意味着mysql_query
将无法看到该数据库,并会抱怨数据库未被打开。
确保在代码中始终使用相同的数据库功能集。 mysql
函数已过时,因此我建议始终坚持使用mysqli
。
您的while
循环结尾处没有结束}
。
这是造成PHP抱怨的实际错误的原因,但是如果你只是修复它,你仍然会遇到其他问题,并且PHP可能实际上并没有抱怨所有这些错误;其中一些会导致你的代码运行正常,但是错了。
<强> [编辑] 强>
顺便说一句,既然你说你只是在学习PHP,那么请不要对这些错误感到不满;他们是初学者可能犯的所有错误。
但是,我建议您确保使用优质教程网站进行学习。有一些很多的网站有PHP代码示例,但其中很大一部分都有质量差的示例和糟糕的建议。大部分原因只是因为它们已经过时了。
研究哪些网站可以学习。以下是一些指示:
mysql_xxx()
功能,则它们已过期。最新的网站应该讨论mysqli
和PDO
来代替数据库访问。md5()
功能散列密码,则它们已过期。 MD5已经过时了。查找推荐新password_hash()
和password_verify()
功能的网站。答案 1 :(得分:-1)
Just close while loop with }.
Replace your while with
while($row = mysql_fetch_array($result)){
echo $row['userID'] . " " .$row['username'] . " " . $row['password'] . " " .
$row['firstName'] . " " . $row['lastName'];
echo "<BR/>";
}
希望它会对你有所帮助:)。