2011-04-10 90 views
0

每當運行下面的代碼時,右邊的行會在表格中的正確位置創建,但是會生成一個額外的行,其用戶名爲空,但密碼與此md5 d41d8cd98f00b204e9800998ecf8427e這也是空白的。PHP代碼每次運行代碼時都會創建另一行

代碼:

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腳本中運行。

回答

0

只是一個猜測 - 它可能試圖在函數內的「返回」行上運行一次查詢,然後在實際調用行(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); 
+0

如果他沒有在功能運行查詢,將他仍然需要全局連接變量? – Ben 2011-04-10 07:48:53

+0

不! :)(編輯) – Dave 2011-04-10 07:50:31

+0

感謝這工作完美! – GoneInsane 2011-04-10 07:58:36

0

它看起來像函數被調用,而不設置(因爲該散列對應於一個空字符串)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); 
}  
0

我想你應該建立在你的周圍函數調用一個if語句。
嘗試是這樣的:

if(isset($_POST["send"])) 
{ 
    addNewUser($_POST["username"], $_POST["password"]); 
} 

$ _ POST [ 「發送」]提交表單時,將被設置。

如果你不與表單工作,你可以檢查所設置的用戶名和密碼:

if(isset($_POST["username"]) && isset($_POST["password"])) 
{ 
addNewUser($_POST["username"], $_POST["password"]); 
} 

我希望它會工作!

問候,
Mixxiphoid

相關問題