1

ここに示すように、$ member_idと一致する数値IDがある場合、そのレコードは削除され、$resはTRUEと評価されます。テーブルにabc1234などの文字列である'member_id'が含まれている場合、$member_idを引用符で囲んで文字列にした場合にのみ削除されます。不一致があり、何も削除されませんが(必要に応じて)、ユーザーは「$member_id」を取得します。メンバーテーブルから削除されました」というメッセージが表示されました。

<?php 
$member_id = "";
require("connect.php");
if (isset($_POST['member_id']))$member_id = fix_string($_POST['member_id']);

$sql=("DELETE FROM members WHERE member_id = $member_id");
$res = mysqli_query($con,$sql);
**if($res) {
 echo "member with ID of ".$member_id." has been removed from members table";
} else {
    echo "member was not deleted";
}**

function fix_string($string) {
    if (get_magic_quotes_gpc()) $string = stripslashes($string);
    return htmlentities ($string);
}
?>
4

1 に答える 1

1

ロジックは正しい場所にありますが、正しく実行されていません。次の手順を実行して、ユーザー/メンバーが削除されたかどうかを確認しようとしています。

$res = mysqli_query($con,$sql);
if($res) {

ただし、ステートメントが適切に実行された場合mysqli_query()は返されます-行を削除するかどうかは関係ありません。trueDELETE

あなたがしたいことは利用することですmysqli::$affected_rows

$res = mysqli_query($con, $sql);
if (mysqli_affected_rows($con) == 1) {
    echo "member with ID of ".$member_id." has been removed from members table";
} else {
    echo "member was not deleted";
}

これにより、ステートメントの影響を受けるレコードが1つあるかどうかがチェックされますDELETE(メンバーIDが一意であると想定します。そうでない場合は、>= 1代わりに使用できます)。あったら、まあ、削除されました!

補足(具体的な回答ではありません)メソッドを
削除し、入力を自動サニタイズするのプリペアドステートメントを選択する必要があります。既存のコードに対して次のことを試すことができます。fix_string()mysqli

require("connect.php");
$member_id = (!empty($_POST['member_id']) ? $_POST['member_id'] : '');

// prepare the statement
$stmt = mysqli_prepare($con, 'DELETE FROM members WHERE member_id = ?');

// bind the id
mysqli_stmt_bind_param($stmt, "s", $member_id);

// execute the statement
mysqli_stmt_execute($stmt);

if (mysqli_affected_rows($con) == 1) {
    echo "member with ID of ".$member_id." has been removed from members table";
} else {
    echo "member was not deleted";
}
于 2012-11-16T05:01:08.513 に答える