0

Pancake で動作する簡単なログイン スクリプトを作成しようとしています。(オンライン請求)

フォームに何を入力しても、「else」ステートメントにリダイレクトされます。成功ページにリダイレクトしようとするのではなく。

<?php
$con=mysqli_connect("example.com","example","example","example");
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con, "SELECT * FROM mypanda_clients
                              WHERE unique_id='$_POST[username]'");

while ($row = mysqli_fetch_array($result))
{
    if ($_POST[password] == $ROW[passphrase])
    {
        header('Location: http://www.green-panda.com/my_panda/Clients/'.$_POST[username]); // concatenate the string
    }
    else
    {
        echo "The username and or password was incorrect. Please try again."; // missing semi colon
    }
}
?>
4

2 に答える 2

2

変数は$rowではなく$ROWであり、インデックスを引用符で囲む必要があります

から

if ($_POST[password] == $ROW[passphrase])

if( $_POST[ 'password' ] == $row[ 'passphrase' ] )

mysqli_fetch_assoc代わりに使用することもお勧めしますmysqli_fetch_array

于 2013-05-17T21:56:29.920 に答える
1

変数 $ROW が定義されていません。

変化する

if ($_POST[password] == $ROW[passphrase])

if ($_POST[password] == $row[passphrase])

さらに、配列キーを引用符で囲むと、PHP はステートメントをより高速に処理します。

if ($_POST['password'] == $row['passphrase'])

これは、php がコードを解釈する方法によるものです。これが整数ベースのインデックスではないことを認識する前に、テキスト「パスフレーズ」の最後に到達する必要があります。次に、それを連想配列内のキーとして見つけようとします。$row['passphrase']これは、成功する前に事実上 2 回ルックアップを試みていることを意味します。

編集:

私はここで少しずれていました-フィリップのコメントを追加して、これが間違っている理由を正確に明確にします:

*「実際にはもっと悪いです。E_NOTICE をオンにすると、不明な定数を文字列値に変換していると警告されます。これは正しくありません。PHP が助けようとするだけです」*

于 2013-05-17T21:55:43.193 に答える