2011-12-08 76 views
1

我的腳本有問題。它應該做的是,當用戶註冊表單時,它應該插入它,但前提是「密碼」與我設置的不同表中的密碼匹配。驗證後,它應該將用戶信息插入數據庫,然後刪除密碼。我似乎無法弄清楚什麼是錯誤的,它在「passkey」表中只有一個輸入時起作用,但當我插入更多時,它停止工作。任何幫助,將不勝感激!註冊腳本,需要檢查數據庫輸入,然後在註冊時刪除

下面是代碼:

<?php 

session_start(); 

if ($_SESSION['auth'] == true) 
{ 
header('location: ../../index.php'); 
} 

else 

{ 
include($_SERVER['DOCUMENT_ROOT']."/skole/system/db/DbConnector.php"); 

new DbConnector(); 

if ($_POST) 
{ 
     $navn = mysql_real_escape_string($_POST['name']); 
     $brukernavn = mysql_real_escape_string($_POST['username']); 
     $passord = md5(mysql_real_escape_string($_POST['password'])); 
     $siste_logginn = date("d/m/y H:i:s"); 
     $logginn_ip = $_SERVER['REMOTE_ADDR']; 
     $email = mysql_real_escape_string($_POST['email']); 
     $passkey = mysql_real_escape_string($_POST['passkey']); 

     $qGetPasskey = mysql_query("SELECT * FROM passkey"); 
     $rGetPasskey = mysql_fetch_array($qGetPasskey); 

    if($rGetPasskey['passkey'] == $passkey) 
     { 

     mysql_query("INSERT INTO brukere SET navn = '{$navn}', brukernavn = '{$brukernavn}', passord = '{$passord}', siste_logginn = '{$siste_logginn}', logginn_ip= '{$logginn_ip}', email = '{$email}', passkey = '{$passkey}'"); 

    mysql_query("DELETE FROM passkey WHERE passkey = '{$passkey}'"); 

    echo 'Success'; 
    } 
//header('location: ../../index.php'); 
} 
else 
{ 
echo 'Failure'; 
//header('location: ../../index.php?aksjon=register&feil=1'); 
} 
} 

?> 

回答

1

我相信它不匹配,因爲沒有循環來檢查數組中的多個記錄。

試試這個:

$qGetPasskey = mysql_query("SELECT * FROM passkey"); 
    while($rGetPasskey = mysql_fetch_array($qGetPasskey)) { 
     if($rGetPasskey['passkey'] == $passkey) { 

     mysql_query("INSERT INTO brukere SET navn = '{$navn}', brukernavn = '{$brukernavn}', passord = '{$passord}', siste_logginn = '{$siste_logginn}', logginn_ip= '{$logginn_ip}', email = '{$email}', passkey = '{$passkey}'"); 

     mysql_query("DELETE FROM passkey WHERE passkey = '{$passkey}'"); 

     echo 'Success'; 
     } 
    } 

我希望它能幫助。

+0

它的工作,omg我怎麼會如此盲目?謝謝一堆! – PureDarkness

+0

沒有問題,有時當我們對自己的代碼太深入時,特別是當我們一直在研究它太久時,一組新的眼睛可以發現我們看不到的東西。 – Ryan

+0

這是真的,再次,謝謝。 :-) – PureDarkness

0

使用or die(mysql_error());

看到,如果你在你的查詢有任何MySQL的錯誤。

實施例:

mysql_query("INSERT INTO brukere SET navn = '{$navn}', brukernavn = '{$brukernavn}', passord = '{$passord}', siste_logginn = '{$siste_logginn}', logginn_ip= '{$logginn_ip}', email = '{$email}', passkey = '{$passkey}'") or die("Error ->".mysql_error()); 
+0

我只是試過這兩個查詢,但沒有顯示,所以我假設沒有問題的查詢,或問題甚至在它甚至執行之前,但我看不出問題可能在哪裏。 – PureDarkness

0

推薦的方法來存儲和檢查密碼是使用鹽醃哈希函數。
切勿將未加密的密碼存儲在數據庫中! 見:Secure hash and salt for PHP passwords

Store中的用戶數據,包括passhash

INSERT INTO user (username, salt, passhash) 
VALUES ('$username','$salt',SHA2(concat('$salt','$password'),512)) 

檢查有效的用戶名和密碼

SELECT id FROM user 
WHERE username = '$username' AND passhash = SHA2(concat('$salt','$password'),512) 

將數據插入到表中當且僅當一個用戶存在

$passkey = mysql_real_escape_string($_POST['passkey']);  
mysql_query("INSERT INTO brukere 
    (navn, brukernavn, passord, sisteloginn, loginn_ip, email, passhash) 
    SELECT 
    '$navn','$brukernavn','$passord', '$siste_logginn', '{$logginn_ip}', '{$email}', id 
    FROM user u 
    WHERE u.username = '$brukernavn' 
    AND passhash = SHA2(concat(u.salt,'$passkey'),512) "; 

請注意,您不需要查詢中的{},如果您想評估表達式,則只需要這些查詢。如果你只是想注入一個$ var,'$var'{'$var'}是一樣的。