0

タイトルの表現が悪くて申し訳ありません。この状況を他に何と呼べばいいのかわかりません。

これが私のジレンマです。楽しみのために、人々がバトルフィールド 3 サーバーの名前、プラットフォーム、および場所を送信できるように、口コミに頼る必要がなくなるように、ちょっとしたことをしています。

この古いコードは正常に動作し、レコードを削除してその仕事をします。

<?php

mysql_connect('localhost', 'root', 'pass');
mysql_select_db('database');

$server_secret = mysql_real_escape_string($_POST['secret_initial']);
$server_confirm = mysql_real_escape_string($_POST['secret_verify']);

if ($server_secret == $server_confirm) {
    echo "Both matched.";
    if ((strlen($server_secret) < 6) and (strlen($server_verify) < 6)) {
        echo "Password too short.";
    } else {
        echo "Password is of proper length.";
        $sql = "DELETE FROM `servers` WHERE secret='" . sha1($server_secret) . "'";
        mysql_query($sql) or die("Couldn't delete record. " . mysql_error());
    }
} else {
    echo "Mismatch.";
}

?>

ただし、これを使用すると:

<?php

mysql_connect('localhost', 'root', 'pass');
mysql_select_db('database');

// Create variables from form
$server_secret = mysql_real_escape_string($_POST['secret_initial']);
$server_confirm = mysql_real_escape_string($_POST['secret_verify']);

// Check for verification
if ($server_secret == $server_confirm) {
    // Delete from database
    $sql = "DELETE FROM `servers` WHERE secret='" . sha1($server_secret) . "'";
    if (mysql_query($sql) or die("Couldn't delete record. " . mysql_error()) {
        $success = true;
    } else {
        $success = false;
    }
}

?>

$success が false の場合でも、常に true として報告されます。また、シークレットと検証の両方が正しい場合でも、MySQL データベースからエントリが削除されないことも混乱を招きます。

古いバージョンでも問題なく動作します。それが私を困惑させるものです。

成功を確認するために使用したのと同じ方法 ( if (mysql_query($sql)) は、挿入には問題なく機能し、失敗した場合は実際にフィードバックを返しますが、レコードを削除しようとすると、何らかの理由で常に成功が報告されます。

誰かがここで私を助けることができれば、本当に感謝しています。

注意: 私は PHP/MySQL の初心者なので、ご容赦ください。

4

2 に答える 2

2

この投稿から

クエリが実際に何も削除しなかった場合でも、mysql_query は TRUE を返します。

そのため、Delete クエリから常に true を取得します。

クレジットはパオロに行きます

于 2012-09-01T17:16:38.483 に答える
1

これは、クエリが構文的に正しいため、エラーが発生しないためです。代わりに、実際に影響を受けた行の数を確認する必要があります。

<?php

mysql_connect('localhost', 'root', 'pass');
mysql_select_db('database');

// Create variables from form
$server_secret = mysql_real_escape_string($_POST['secret_initial']);
$server_confirm = mysql_real_escape_string($_POST['secret_verify']);

// Check for verification
if ($server_secret == $server_confirm) {
    // Delete from database
    $sql = "DELETE FROM `servers` WHERE secret='" . sha1($server_secret) . "'";
    $result = mysql_query($sql);
    if (mysql_affected_rows($result)) {
        $success = true;
    } else {
        $success = false;
    }
}

?>
于 2012-09-01T17:07:47.023 に答える