PHP代码在每次运行代码时都会不断创建另一行
无论何时运行下面的代码,都会在表中的正确位置生成正确的行,但随后会生成一个额外的行,其中用户名为空,但密码为md5 d41d8cd98f00b204e9800998ecf8427e,该行也为空 守则:PHP代码在每次运行代码时都会不断创建另一行,php,mysql,duplicates,Php,Mysql,Duplicates,无论何时运行下面的代码,都会在表中的正确位置生成正确的行,但随后会生成一个额外的行,其中用户名为空,但密码为md5 d41d8cd98f00b204e9800998ecf8427e,该行也为空 守则: define("DB_SERVER", "localhost"); define("DB_USER", "will"); define("DB_PASS", "blahblah"); define("DB_NAME", "blah"); define("TBL_USERS", "users");
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变量,因为该哈希对应于空字符串。在显示表单时,您的代码是否正在尝试添加用户?如果是,请确保在添加用户之前用户名和密码均不为空 比如:
我认为应该围绕函数调用构建一个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如果他没有在函数中运行查询,他还需要全局连接变量吗?
if(isset($_POST["username"]) && isset($_POST["password"]))
{
addNewUser($_POST["username"], $_POST["password"]);
}