MySQL没有添加到数据库

时间:2011-03-12 21:20:47

标签: php mysql hash md5

我有一个表单可以使用以下代码进行注册:

<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哈希,但事实并非如此,有人可以帮助我。

谢谢!

5 个答案:

答案 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/