5

ユーザーがいくつかの条件で「拒否」ボタンを押したときに実行されるスクリプトがあります。実行すると、特定の領域へのアクセス権が取り消されます。何らかの理由でスクリプトが機能しません。MYSQL DB が更新されず、エラーが発生することもありません。

$username =  $_SESSION["USER"]["Username"]; 

mysql_connect("x", "y", "z") or die(mysql_error()); 
mysql_select_db("database") or die(mysql_error()); 
mysql_query("UPDATE `users` SET `SeceretArea`='Unauth' WHERE `Username`='$username'") or die(mysql_error());
4

4 に答える 4

3

デバッグプロセスを要約するために回答が更新されました。

エラーがない場合、データベース エントリが発生しない理由として 3 つの可能性があります。

  • あなたの表には、USERNAME列が と等しいエントリはありません$database
  • に渡される値はありません$database
  • に値が渡されて$databaseいますが、その値はクエリに置き換えられていません。

私の個人的な経験からmysql_query()、クエリを実行する前に必ずしも変数値を代入するとは限りません。最初にクエリ文字列を変数に作成し、それを に渡しますmysql_query()$username現在の設定はその値に置き換えられません。あなたができることはこれです:

...
$sql = "UPDATE `users` SET `SeceretArea`='Unauth' WHERE `Username`='$username'";
mysql_query($sql) or die(mysql_error());

それとは別に、テーブルをチェックして、必要な値を持つ行があることを確認してくださいUSERNAME。意図した値かどうかを確認してくださいvar_dump()$username

mysqliまた、 または のいずれかに切り替えることを検討する必要がありますPDO。オブジェクト モジュールに移行したくない場合は、mysqliの手続き型関数を使用できます。

于 2012-07-23T15:16:43.797 に答える
0

session_start();スクリプトの先頭で呼び出していることを確認してください。これがないと、$username変数が設定されません。

于 2012-07-23T15:14:06.693 に答える
0

$usernameに、渡したセッション値が含まれていることを確認してください。

echo "$username";

正解した場合にのみ、クエリに進みます。

また、テーブルのフィールド名が正しいことを確認してください。あなたのテーブルのSecretAreaである可能性があるSeceretAreaに気付きました。

于 2012-07-23T15:24:45.450 に答える
0

ほんの少しの考え:

  • あなたがどこにいるのか正確な値を持つエントリがDBにありUserNameますか?
  • コミットされていないトランザクションの中にいますか?
  • SQL ステートメントが同じ名前の別のテーブルに干渉していませんか?
于 2012-07-23T15:25:18.477 に答える