0

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

有人可以帮忙吗?

4

2 回答 2

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 可能不会真正抱怨所有这些问题;其中一些会导致您的代码运行正常,但错误。

[编辑]
顺便说一句,既然你说你只是在学习 PHP,请不要为这些错误中的大多数感到难过;他们都是初学者可能会犯的错误。

但是,我确实建议您确保使用高质量的教程网站来学习。有很多网站提供 PHP 代码示例,但其中很大一部分的示例质量很差,建议也很糟糕。其中大部分只是因为它们已经过时了。

研究要向哪些网站学习。这里有几个指针:

  • 如果网站建议使用这些mysql_xxx()功能,它们就已经过时了。最新的站点应该讨论mysqliPDO用于 DB 访问。
  • 如果网站建议保存密码而不使用密码,那么您应该忽略他们所说的一切。安全很重要。
  • 如果网站建议使用该md5()函数对密码进行哈希处理,那么它们已经过时了。MD5 已过时。寻找推荐新功能password_hash()的网站。password_verify()
  • 寻找在 PHP 社区中受到尊重并保持最新的网站。尝试从http://www.phptherightway.com/https://phpbestpractices.org/http://www.phpdeveloper.org/开始
  • 如果您使用一本书来学习,这同样适用:确保它是最新的。如果它是在几年前出版的,它可能不是。
于 2013-11-13T11:09:52.697 回答
-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/>";
}

希望它会帮助你:)

于 2013-11-13T11:24:38.430 回答