在PHP中获取意外的文件结尾错误
我正在学习PHP,目前正在尝试使用PHP打印MYSQL表的内容。我一直得到以下错误 解析错误:语法错误,第53行C:\xampp\htdocs\login2.php中的文件意外结束 第53行是在PHP中获取意外的文件结尾错误,php,mysql,database,printing,Php,Mysql,Database,Printing,我正在学习PHP,目前正在尝试使用PHP打印MYSQL表的内容。我一直得到以下错误 解析错误:语法错误,第53行C:\xampp\htdocs\login2.php中的文件意外结束 第53行是标记 这是我的密码: <html> <head> </head> <body> <?php $userName = $_POST["userName"]; $password = $_POST["passwd"]; $firstName =
标记
这是我的密码:
<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>
除了缺少}
的初始语法错误之外,这段代码中还有一大堆错误
您正在定义一组变量,$userName
,$db\u host
等,但以后在代码中不使用它们
确保HTML代码始终以doctype开头。将
添加到
标记上方,作为代码的第一行
INSERT
查询的代码有几个单独的错误:
»$\u POST[passwd]
:使用数组键时,必须引用键名。如果您不这样做,PHP会处理,但会抛出警告消息,并且在某些情况下可能会出错。如果在这样的字符串中使用数组键,还需要将其用大括号括起来以使其有效。正确的语法如下所示:
$stringVar = "..... `{$_POST["passwd"]}`....";
»但是不要在这里使用这种语法,因为还有更多:您也不应该在SQL查询字符串中直接使用$\u POST
变量,并且必须对添加到查询字符串中的任何变量进行转义。否则将导致您的代码被黑客攻击
这里有太多的内容需要详细介绍(我没有时间写完整的教程),但请在谷歌上搜索“SQL注入攻击”之类的内容以及如何避免它们。您可以使用mysqli\u real\u escape\u string()
对字符串进行转义,也可以使用“准备好的语句”。我推荐后者,但正如我所说的谷歌
另一个带有密码的项目:永远不要在数据库中以纯文本形式存储密码。始终使用高质量的哈希算法来隐藏密码,以防黑客攻击。这也是一个非常大的主题,我在这里无法详细描述,但对用户的安全至关重要
在程序进行到一半时,您可以从使用mysqli
函数切换到mysql
函数。请注意,这两组函数互不兼容。您使用mysqli
打开了数据库,这意味着mysql\u query
不会看到这一点,并且会抱怨数据库没有打开
确保在整个代码中始终使用相同的DB函数集。mysql
函数已经过时,因此我建议始终坚持使用mysqli
您的while
循环末尾没有结束的}
这就是导致PHP抱怨的实际错误的原因,但是如果您只是修复了这个问题,您仍然会遇到其他问题,而PHP可能不会真正抱怨所有这些问题;其中一些会导致您的代码运行正常,但出现错误
[编辑]
顺便说一句,既然你说你只是在学习PHP,请不要为这些错误感到难过;这些都是初学者可能会犯的错误
但是,我建议你一定要使用高质量的教程网站来学习。有很多网站都有PHP代码示例,但其中很大一部分都有质量差的示例和不好的建议。大部分原因只是因为它们已经严重过时了
在哪些网站上学习你的研究。以下是几点建议:
- 如果一个站点建议使用
mysql\u xxx()
函数,那么它们已经过时了。最新的站点应该讨论数据库访问的mysqli
和PDO
- 如果一个网站建议在不使用密码的情况下保存密码,那么你应该忽略他们所说的一切。安全很重要
- 如果一个站点建议使用
md5()
函数散列密码,那么它们就过时了。MD5已经过时了。寻找推荐新的password\u hash()和password\u verify()函数的网站
- 寻找在PHP社区中受到尊重并保持最新的站点。试着从
- 如果你用一本书来学习,同样的道理也适用:确保它是最新的。如果它是在几年前出版的,那么它可能不是
只需在循环时关闭}。
将您的while替换为
while($row=mysql\u fetch\u数组($result)){
echo$row['userID']。.$row['username']。.$row['password']。“”。
$row['firstName']。“”.$row['lastName'];
回声“
”;
}
希望它能帮助你:)你没有像在while循环之后那样关闭while循环。你的代码中充满了SQL注入、明文密码以及mysql\uu
和mysqli\u
的随机混合。请修复所有这些。这么多的错误,这么少的时间。我已经给出了一个答案,涵盖了我在空闲的几分钟内发现的所有内容,但我怀疑还有更多我可以说的。您可能想在第4节中添加“不要使用MD5,忽略所有告诉您使用MD5的站点”:-)
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/>";
}