在PHP中获得意外的文件错误结束

时间:2013-11-13 10:41:20

标签: php mysql database printing

我正在学习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>

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

此代码中存在大量错误,超出了缺少}的初始语法错误。

  1. 您正在定义一堆变量$userName$db_host等,但之后不再在代码中使用它们。

  2. 确保您的HTML代码始终以doctype开头。将<!DOCTYPE html>添加为代码的第一行,位于<html>代码上方。

  3. INSERT查询的代码有几个不同的错误:

    »$_POST[passwd]:使用数组键时,必须引用键名。如果你不这样做,PHP会处理,但是会抛出警告信息,并且有些情况可能会出错。如果你在这样的字符串中使用数组键,你还需要将它包装在大括号中以使其有效。正确的语法如下所示:

    $stringVar = "..... `{$_POST["passwd"]}`....";
    

    »但是这里不要使用那种语法,因为还有更多:你也应该永远 直接在SQL查询字符串中使用$_POST变量您 必须 转义您添加到查询字符串的所有变量。如果不这样做,将导致您的代码遭到入侵。

    这里有太多需要详细说明(我没有时间编写整个教程),但请谷歌搜索“SQL注入攻击”以及如何避免它们。您可以使用mysqli_real_escape_string()来转义字符串,也可以使用“预准备语句”。我推荐后者,但正如我所说的谷歌。

  4. 另一个带有密码的项目:您应该永远将密码作为纯文本存储在数据库中。始终使用优质的哈希算法来隐藏黑客的密码。这也是一个非常大的主题,对我来说太大了,不能在这里详细描述,但对于用户的安全性至关重要。

  5. 在程序中途,您可以使用mysqli函数切换到mysql函数。请注意,这两组功能彼此不兼容。您使用mysqli打开了数据库,这意味着mysql_query将无法看到该数据库,并会抱怨数据库未被打开。

    确保在代码中始终使用相同的数据库功能集。 mysql函数已过时,因此我建议始终坚持使用mysqli

  6. 您的while循环结尾处没有结束}

    这是造成PHP抱怨的实际错误的原因,但是如果你只是修复它,你仍然会遇到其他问题,并且PHP可能实际上并没有抱怨所有这些错误;其中一些会导致你的代码运行正常,但是错了。

  7. <强> [编辑]
    顺便说一句,既然你说你只是在学习PHP,那么请不要对这些错误感到不满;他们是初学者可能犯的所有错误。

    但是,我建议您确保使用优质教程网站进行学习。有一些很多的网站有PHP代码示例,但其中很大一部分都有质量差的示例和糟糕的建议。大部分原因只是因为它们已经过时了。

    研究哪些网站可以学习。以下是一些指示:

    • 如果网站建议使用mysql_xxx()功能,则它们已过期。最新的网站应该讨论mysqliPDO来代替数据库访问。
    • 如果某个网站建议您在没有密码的情况下保存密码,那么您应该忽略他们所说的一切。安全很重要。
    • 如果网站建议使用md5()功能散列密码,则它们已过期。 MD5已经过时了。查找推荐新password_hash()password_verify()功能的网站。
    • 查找在PHP社区中受到尊重并且保持最新的网站。尝试从http://www.phptherightway.com/https://phpbestpractices.org/http://www.phpdeveloper.org/
    • 开始
    • 如果您使用图书来学习,同样适用:确保它是最新的。如果它是在几年前发布的,那可能不是。

答案 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/>";
}

希望它会对你有所帮助:)。