我正在YouTube上关注如何在网站上添加登录表单的视频,https://www.youtube.com/watch?v=4oSCuEtxRK8
在8:37,当他点击用户名或密码时,没有任何反应,没有错误信息,但我的错误信息出现了。这是我的代码
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if ($username&&$password)
{
$connect = mysql_connect("localhost","root","root") or die("Couldn't connect!";
mysql_select_db("phplogin") or die ("Couldn't find db");
$query = mysql_query("SELECT * FROM "); users WHERE username='$username'");
$numrows = mysqal_num_rows($query);
echo $numrows;
}
else
die("Please enter username and a password!");
?>
我得到的错误消息是
Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\Hamza\login.php on line 9
我使用localhost:8080而不仅仅是localhost
http://localhost:8080/Hamza/login.php
这会有问题吗?
答案 0 :(得分:2)
我不确定即使是专业的清洁公司也能清理这个烂摊子:) 请参阅下面的更新代码,您有几个错字已被评论并替换为新行。
从Youtube学习时,有时会暂停并查看代码,尝试了解它的工作原理。好像你只是急于复制所有内容,甚至从不查看代码。
同时阅读错误消息,他们出于某种原因。
Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\Hamza\login.php on line 9
意外';'第9行 - 看看第9行,你忘了关闭die()支架,所以;出人意料。
<?php
$username = $_POST['username'];
$password = $_POST['password'];
if ($username&&$password)
{
//$connect = mysql_connect("localhost","root","root") or die("Couldn't connect!";
$connect = mysql_connect("localhost","root","root")or die("Couldn't connect!");
mysql_select_db("phplogin") or die ("Couldn't find db");
//$query = mysql_query("SELECT * FROM "); users WHERE username='$username'");
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
//$numrows = mysqal_num_rows($query);
$numrows = mysql_num_rows($query);
echo $numrows;
}
else
die("Please enter username and a password!");
?>
一些(非常重要的)附注,您必须迟早学习:
密码不应以纯文本形式存储在您的数据库中(或任何其他地方)。
如果使用PHP 5.5.0或更高版本,则可以使用php函数password_hash()
创建一个非常安全的哈希。然后,您可以使用password_verify()
作为登录功能。
有关详细信息,请参阅http://php.net/manual/en/function.password-hash.php。
较旧的哈希算法(如md5和sha1)不应用于存储密码。它们不安全,容易破裂。
如果你不能使用password_verify()
,请阅读盐。通过在每个哈希密码中添加一个独特的盐,盐可以使哈希更加安全。
您当前的代码只对用户名进行数据库查询。不用说,您还应该在登录用户之前检查提交的密码:)
输入消毒。清理所有用户输入以避免安全漏洞非常重要。将所有用户视为不断攻击您网站的黑客。请阅读answer here以获取一些快速提示,但我建议您谷歌并阅读有关输入消毒的更多信息。
不要使用mysql_ *函数。你最好开始使用mysqli(语法几乎与mysql相同)或PDO。阅读它们并了解它们,因为您需要在某些时候。 (不推荐使用mysql_ *,将在以后的PHP版本中停止工作)
MySQLi和PDO都支持预处理语句。它基本上意味着数据库预先准备和优化查询,然后在执行之前将所有值绑定到查询中。这也将在一定程度上避免SQL注入,因为在您将值(可能是用户输入)绑定到查询时已经准备好了查询。
答案 1 :(得分:0)
需要更正查询:
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
这是非常基本的。了解您是新手,因此您需要更仔细地查看错误日志。