をDUPLICATE ONのようなもの削除するか、サブクエリとELSE IFの正しい使用はありませんこれを1つのクエリで行います(この1つのクエリは成功するか失敗するので便利です)。私のように、あなたの目標を達成するためにいくつかのクエリをロールオーバーしなければならないと思います。しかし、後続のクエリが成功し続けるかどうかを追跡します。
"Unknown"または "NoChange"の戻り値(この場合は 'state')から始めます。これがあなたにajaxコールを返した場合、チェックボックスをクリックする前の状態に戻る必要があり、可能なポップアップメッセージが表示されていることがわかります(これはjsonと一緒に実行できます)。
正しいif/thenコード構造でクエリを実行し、後続のクエリを追跡し、それに応じてシリーズが成功したときに '状態'を更新します。 これはあなたが必要とするものを正確に実行し、ブラックホールがないようにします。
(私は真/偽/ nullを/エラー情報を返すクエリを実行するためのいくつかのラッパー、使用 - あなたは各クエリの結果を確認することができます)
私はすでに場所であなたのAJAX呼び出しを持っていると仮定します。コード例は、サーバー側から処理を開始する場所を示します。
ob_end_clean();
$json = array("state" => "Unknown");
$module_id = (isset($_POST['module_id']) ? $_POST['module_id'] : null);
$group_id = (isset($_POST['group_id']) ? $_POST['group_id'] : null);
$action = (isset($_POST['action']) ? $_POST['action'] : null);
if (!empty($module_id) && !empty($group_id) && !empty($action)) {
$query = "
SELECT
1
FROM
config_module_actions_groups
WHERE
1
AND module_id = '{$module_id}'
AND group_id = '{$group_id}'
AND action = '{$action}'
";
if (getQueryAsArraySingleValues($query)) {
$query = "
DELETE FROM
config_module_actions_groups
WHERE
1
AND module_id = '{$module_id}'
AND group_id = '{$group_id}'
AND action = '{$action}'
";
if (executeQuery($query)) {
$json["state"] = "Off";
} else {
$json["message"] = "Not correctly deactivated";
}
} else {
$query = "
REPLACE INTO
config_module_actions_groups
SET
module_id = '{$module_id}',
group_id = '{$group_id}',
action = '{$action}'
";
if (executeQuery($query)) {
$json["state"] = "On";
} else {
$json["message"] = "Not correctly activated";
}
}
}
// output
echo json_encode($json);
exit;
私は開発しているサーバーを知っていますが、すぐにホストを変更する予定で、どのバージョンまたはsysの管理者が私たちがどこにいても許してくれないものがあるので、私は可能な限り基本的なままにしておきます。 – guyfromfl
一意のインデックスを使用して、Insert Ignoreを使用します。 。このようにして同じことをすることができます。 – Adrian