我有一个表单可以使用以下代码进行注册:
<form method="post">
Username<input type="text" size="12" maxlength="16" name="username"><br />
Password<input type="password" size="12" maxlength="32" name="password"><br />
<input type="submit" name="submit" value="Sign Up!" />
</form>
然后我也检查用户名是否包含任何特殊字符,如果没有,则运行此代码:
define("DB_SERVER", "localhost");
define("DB_USER", "will");
define("DB_PASS", "blahblah");
define("DB_NAME", "blahblah");
define("TBL_USERS", "users");
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $connection) or die(mysql_error());
function addNewUser($username, $password){
global $connection;
$username =$POST['username'];
$password =$_POST['password'];
$password1 = md5($password);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return mysql_query($q, $connection);
}
这应该将用户名和密码添加到我的表中,密码为md5哈希,但事实并非如此,有人可以帮助我。
谢谢!
答案 0 :(得分:1)
首先: 不要使用连接字符串将值插入数据库。这是一个主要的安全漏洞,可以使用一种称为SQL-Injection的技术来利用它。您可以使用所谓的Prepared Statements来阻止这种情况。
这应该可以解决你的问题: 您可能并没有真正调用addNewUser函数。您只需连接数据库即可。
试试这个:
define("DB_SERVER", "localhost");
define("DB_USER", "will");
define("DB_PASS", "blahblah");
define("DB_NAME", "blahblah");
define("TBL_USERS", "users");
function addNewUser($username, $password){
global $connection;
$password1 = md5($password);
$username = mysql_real_escape_string($username);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return mysql_query($q, $connection);
}
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $connection) or die(mysql_error());
addNewUser($_POST["text"], $_POST["password"]);
答案 1 :(得分:0)
看起来你实际上并没有在这里调用addNewUser
。此外,作为未来的提示,使用预准备语句来避免SQL注入可能是除了最简单的应用程序之外的任何方法。在PHP中使用SQL预处理语句的一个教程是here
答案 2 :(得分:0)
您是否正在调用addNewUser
功能?
另外,请注意SQL-Injections的SQL语句。
答案 3 :(得分:0)
$ username = $ POST ['username']错误。你忘了 _ 。它必须是$ username = $ _POST ['username']。
答案 4 :(得分:0)
要清楚......
你有一个功能,但它从未被调用过,正如大家所说的那样。
要调用它,请在函数启动前添加此行:
$var = addNewUser($_POST["username"], $_POST["password"]);
修改 进一步... 在您的函数中,您已经拥有$ username和$ password,您可以删除这些行:
$username =$POST['username'];
$password =$_POST['password'];
最后但并非最不重要的是,仅使用md5存储密码并不是一种好习惯。阅读:http://elbertf.com/2010/01/store-passwords-safely-with-php-and-mysql/