2016-04-02 3 views
1

私はログインスクリプトを取得するためにしばらく試してきましたが、私はこの問題を見つけることができませんでした。 、私はまだ素敵エラー500PDOP/PHP LoginScriptはMAMPを使用してエラー500で終了します

任意のアイデアを取得してしまう形に私が入力正しい資格情報をかどう

は、それは問題ではありませんか?

DB接続目的球:

function db_connect() { 

私はこのコラムを移動する場合 - >

$server = 'localhost'; 
    $uname = 'root'; 
    $passw = 'password'; 
    $datab = 'database'; 

    /* check connection */ 
    try{ 
     $conn = new PDO("mysql:host=$server;dbname=$datab;", $uname, $passw); 
    } catch(PDOException $e) { 
     die("Connection failed: " . $e->getMessage()); 
    } 

< ---

return $conn; /added this as suggested, still returns NULL. 
} 

ログインファイル:

include('../lib/functions.php'); //This is correct! 
db_connect(); 

<は - HERE、それは動作します - 以前>

は、レジスタ間、私のパスワードハッシュが故障した問題があったのでpassword_verify($_POST['password'], $results['passw'])も常に正しい入力でfalseを返す、効果がなかったです。

if(!empty($_POST['username']) && !empty($_POST['password'])): 

    $records = $conn->prepare('SELECT uname,passw FROM users WHERE uname = :user AND passw = :pass'); 
    $records->bindparam(':user', $_POST['username']); 
    $records->bindparam(':pass', $_POST['password']); 
    $records->execute(); 
    $results = $records->fetch(PDO::FETCH_ASSOC); 

    if(count($results) > 0 && password_verify($_POST['password'], $results['passw']) && $_POST['username'] == $results['uname']) //Also tried removing the &&-->username area incase two and statements were wrong without any luck { 
     die('It works!'); 
    } else { 
     die('OR NOT!'); 
    } 

endif; 
+0

エラーコード500は、サーバーエラーを意味します。例えば。あなたのPHPスクリプトで。 PHPのエラーログファイルを確認してください。 (php.ini参照) – paskl

+1

'db_connect()'は何も返しません!! – Saty

+2

あなたのPHPコードで予期しないエラーが発生したときにまず必要となること:httpサーバのエラーログファイルを見てください。ここでは、実際に_guess_するのではなく、問題が何であるかを簡単に_read_できる場所です。 – arkascha

答えて

1

あなたdb_connect()機能は、それ自身のスコープ内$connを定義します。したがって、変数$connはローカルです。 db_connect()の実行が終了すると、$connが表示されなくなります。

この機能の外は、$connは、単にNULLです。あなたの関数から外側のスコープに

戻り$conn

function db_connect() { 
    $server = 'localhost'; 
    $uname = 'root'; 
    $passw = 'password'; 
    $datab = 'database'; 

    /* check connection */ 
    try{ 
     $conn = new PDO("mysql:host=$server;dbname=$datab;", $uname, $passw); 
    } catch(PDOException $e) { 
     die("Connection failed: " . $e->getMessage()); 
    } 

    return $conn; // here 
} 

そして、あなたのスクリプトの中で:

include('../lib/functions.php'); //This is correct! 
$conn = db_connect(); 
// other codes 
+0

これを試しましたが、 '$ conn'はまだnullです。しかし、関数からコードを移動してログインファイルにまっすぐ入れると、正しい資格情報を入力してもfalseを返しても50%になります。 –

+0

私は信任状の部分を解決しましたが、何らかの理由で '$ conn'は関数の中で使用されてもnullを返します。何か案は? –

+0

改善されたコードで質問を編集してください。 –

関連する問題