当下面的代码运行时,在表的正确位置生成正确的行,但随后它会生成一个额外的行,其中用户名为空,但密码为md5 d41d8cd98f00b204e9800998ecf8427e
,这也是空白的。
代码:
define("DB_SERVER", "localhost");
define("DB_USER", "will");
define("DB_PASS", "blahblah");
define("DB_NAME", "blah");
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["username"], $_POST["password"]);
}
我如何阻止它这样做?顺便说一下,这些代码是在php脚本中运行的。
只是一个猜测-它可能试图在函数内的"返回"行上运行一次查询,然后在实际调用行(addNewUsers)上再次运行查询。
试试这个:
function addNewUser($username, $password){
$password1 = md5($password);
$username = mysql_real_escape_string($username);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return $q;
}
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $connection) or die(mysql_error());
mysql_query(addNewUser($_POST["username"], $_POST["password"]), $connection);
看起来函数在没有设置POST变量的情况下被调用(因为该散列对应于一个空字符串)。您的代码是否试图在显示表单时添加用户?如果是这样,在添加用户之前,请确保用户名和密码都不是空的。
:
function addNewUser($username, $password){
global $connection;
if (empty($username) || empty($password))
return;
$password1 = md5($password);
$username = mysql_real_escape_string($username);
$q = "INSERT INTO ".TBL_USERS." VALUES ('$username', '$password1')";
return mysql_query($q, $connection);
}
我认为你应该在函数调用周围建立一个if语句。
试试这样做:
if(isset($_POST["send"]))
{
addNewUser($_POST["username"], $_POST["password"]);
}
$_POST["send"]将在提交表单时设置。
如果您不使用表单,您可以检查设置的用户名和密码:
if(isset($_POST["username"]) && isset($_POST["password"]))
{
addNewUser($_POST["username"], $_POST["password"]);
}
我希望它会起作用!
,
Mixxiphoid