2011-12-08 35 views
1

私のスクリプトに問題があります。それは私が設定した別のテーブルにあるものと "passkey"が一致する場合にのみ、フォームにユーザーが登録するときに挿入する必要があるということです。確認後、ユーザー情報をデータベースに挿入し、パスキーを削除する必要があります。私は何が間違っているのか分からないようで、 "passkey"テーブルに入力が1つしかないときに機能しましたが、もっと挿入すると作業が止まりました。どんな助けもありがとう!ここで登録スクリプトで、データベースの入力を確認して登録時に削除する必要があります

はコードです:あなたは、クエリ内の任意のMySQLのエラーを持っている場合

<?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

それは働いた、私はどのように盲目になることができますか?本当にありがとう! – PureDarkness

+0

問題はありません。時には私たち自身のコードに深く入り込むことがあります。特に、あまりにも長時間作業していると、目に見えないものが目に見えてきます。 – Ryan

+0

それは本当に、また、ありがとうございます。 :-) – PureDarkness

0

使用or die(mysql_error());

を参照してください。

例:

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

ストア

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

挿入データテーブルに有効なユーザ名とパスワードとユーザーが存在する場合だけのためのユーザデータを含むpasshash

INSERT INTO user (username, salt, passhash) 
VALUES ('$username','$salt',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'}は同じです。

関連する問題