0

どういうわけか、これについて頭を包むことはできません。

$result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='$username'");

    if(!$result){
        echo "The username entered does not exist!";
    }
    else {

        if($newpassword == $confirmnewpassword){
        $sql = mysql_query("UPDATE cf_user SET `strPassword` = '$newpassword' WHERE `strUserId` = '$username'");        
        }

        if(!$sql){
        echo "Congratulations, password successfully changed!";
        }
        else{
        echo "New password and confirm password must be the same!";
        }
    }

ユーザー名を指定しても、「入力されたユーザー名は存在しません」というメッセージが表示されます。!$results は等しくないことを意味しますか? if (mysql_num_rows($result)==0), mysql_num_rows が存在しないことも試しました。

変数を使用せずに sql コマンドを手動でテストしたところ、結果が得られました。フォームの結果をエコーし​​ましたが、期待どおりです。

助けてくれてありがとう。

4

4 に答える 4

0

サーバーの php バージョンによっては、クエリ内の変数が正しく挿入されない場合があります。

あなたが持っている:

    $result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='$username'");

PHP連結演算子(ピリオド)を使用してみてください。役立つ場合があります(見下すのではなく、これを試してみてください。問題になる可能性があります。

    $result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='".$username."' ");

もちろん、これは、変数を削除すれば機能すると言っている部分への対応です。したがって、変数領域の周りのクエリにエラーがあると思います。

私はプレミアムソフトの NaviCat を使用してクエリをテストし、クエリが機能することを確認しており、トラブルシューティングがはるかに簡単です。クエリを変数に保存してエコーすることで、クエリが正しく記述されているかどうかを確認できます。これにより、適切にパイプされているかどうかを確認できます。

すなわち。

$query = "SELECT `strPassword` FROM cf_user WHERE `strUserId`='".$username."' ";

// echoes to browser to see final sql statement.  Don't use in production environment, and make SURE to delete then going live!!!  It will expose you database names and field names to whoever runs the function...
echo $query;

$result = mysql_query($query);
于 2012-05-04T00:28:20.500 に答える
0

次のようなことをする必要があります:

$result = mysql_query("SELECT user_id FROM cf_user WHERE `strUserId`='$username' AND strPassword='".md5($password)."' LIMIT 0,1");

if(mysql_num_rows($result)==0){
    echo "The username entered does not exist!";
}
....

$resultは実際の結果ではなく、結果セットへのリソース リンクです。

PHPマニュアルから:

SELECT、SHOW、DESCRIBE、EXPLAIN、および結果セットを返すその他のステートメントの場合、mysql_query() は成功するとリソースを返し、エラーの場合は FALSE を返します。

他のタイプの SQL ステートメント、INSERT、UPDATE、DELETE、DROP などの場合、mysql_query() は成功時に TRUE を返し、エラー時に FALSE を返します。

返された結果リソースは、返されたデータにアクセスするために、mysql_fetch_array() および結果テーブルを処理するその他の関数に渡される必要があります。

mysql_num_rows() を使用して、SELECT ステートメントに対して返された行数を調べるか、mysql_affected_rows() を使用して、DELETE、INSERT、REPLACE、または UPDATE ステートメントによって影響を受けた行数を調べます。

mysql_query() は、クエリによって参照されるテーブルにアクセスする権限がユーザーにない場合にも失敗し、FALSE を返します。

于 2012-05-03T17:48:40.673 に答える
-1

まず最初に:スニペットはあまりうまくコーディングされていません。

まず、mysql_queryforを使用するとSELECT、エラーに対してのみfalseが返されます。空の結果がある場合、それは正常に実行されます。

と一緒に使用すると、成功するUPDATEと戻りtrue、でfalseを返しますerror。コードが間違っているようです。falseを返す場合は、パスワードを正常に変更したことを意味しますが、そうではありません。

実行する必要があるのは次のとおりです。

$result = mysql_query("SELECT `strPassword` FROM cf_user WHERE `strUserId`='$username'");

if ($result !== FALSE) { //not an error
    if (mysql_num_rows($result) > 0) { //some rows have been returned
        if ($newPassword == $confirmPassword) {
            $query = mysql_query("UPDATE STATEMENT HERE");
            if ($query === TRUE) {
                die('Password changed');
            } else {
                die(mysql_error());
            }
        } else {
            die('Passwords don't match);
        }
    } else { //no rows returned
        die('Username not found');
    }
} else { //error
    die(mysql_error());
}

上記のコードは単なるサンプルであり、PROD環境での使用はお勧めしません。入力エスケープはありません。

于 2012-05-03T17:51:07.453 に答える
-2

var_dump($result) を試して、実際の結果がパスワードかどうかを確認してください

于 2012-05-03T17:48:22.563 に答える