2013-05-02 66 views
-2

即时通讯尝试从命令行进行身份验证,但无法正常工作。 请检查我的代码,并让我知道我错了什么地方。从命令行错误进行身份验证

<?php 

echo "enter your username\n"; 

$username = fgets(STDIN); 

echo "your password\n"; 

$password = fgets(STDIN); 

echo "enter your new password\n"; 

$newpassword = fgets (STDIN); 

//connecting to database 

$db = mysql_connect("localhost","sqldata","sqldata") or die(mysql_error()); 

//selecting our database 

$db_select = mysql_select_db("accounts", $db) or die(mysql_error()); 

$sql = mysql_query ("select * from uptable where username ='$username'"); 

$result = mysql_fetch_assoc($sql); 

$oldpassword = $result['password']; 

if ($password != $oldpassword) 
{ 

echo "error"; 

} 

else 
{ 

mysql_query("update uptable set password = '$newpassword' where username ='$username'"); 

echo "Your Password has been successfully changed"; 

} 

?> 
+1

您的脚本似乎很容易受到SQL注入的影响。另外,您不应该以纯文本格式存储密码。 – Gumbo 2013-05-02 03:29:56

+1

mysql_ *函数不再用于某些问题,如安全性,您可能想要了解** PDO **或MVC **,例如。 CodeIgniter,cakePHP ** – 2013-05-02 03:33:35

+1

你的意思是不工作?像是有错误吗?如果是的话,它说明了什么? – 2013-05-02 03:34:46

回答

0

改变所有的fgets()分配使用trim(),例如:

$username = trim(fgets(STDIN)); 

通过fgets()返回的字符串包含换行,但在数据库中的名称和密码想必没有。

+0

谢谢你,它工作得很好。 – user2341520 2013-05-02 03:50:54

+0

您是否尝试在变量上使用'var_dump()'来查看它们包含的内容?你是如何在发布前尝试调试的? – Barmar 2013-05-02 03:58:42

+0

我输入了正确的用户名和密码,它回声; “你的密码已成功更改”;我做了同样的,但错误的用户名密码它回声错误;。我不知道var_dump()以及如何使用它。抱歉。 – user2341520 2013-05-03 18:24:10