आपके तर्क में निम्नलिखित खामियां हैं:आपका $_POST
सरणी में कुंजी है untrain
और इसका मान कुंजियों की एक आंतरिक सरणी है room_id
(क्योंकि वे चेकबॉक्स नाम में हैं) और मान user_id
(चेकबॉक्स के मान)। आपके फ़ोरैच लूप में $room_id
चेकबॉक्स के मूल्यों को स्वीकार किया है, जो वास्तव में user_ids
हैं . इसके अलावा आपको $_POST['untrain']
. पर पुनरावृति करनी चाहिए , मुझे नहीं पता कि आप उस कुंजी को कहाँ ले जाते हैं $room->room_id
से.
मैं इसे इसमें बदल दूंगा:
if(isset($_POST['submit'])){
foreach ($_POST['untrain'] as $room_id => $user_id) {
//sanitize $room_id
$untrainQuery = "UPDATE room_users SET trained = '1' WHERE room_id = $room_id";
$db->update($untrainQuery);
}
}
या, यदि आपके पास सभी रूम_आईड्स की एक सरणी है, तो आप यह जांचने के लिए उन पर पुनरावृति कर सकते हैं कि क्या चेक किए गए हैं:
if(isset($_POST['submit'])){
foreach ($room_ids as $room_id) {
//sanitize $room_id
if(isset($_POST["untrain[{$room_id}]"]){//that is, if it was checked
$trained = 1;
}else{
$trained = 0;
}
$untrainQuery = "UPDATE room_users SET trained = $trained WHERE room_id = $room_id";
$db->update($untrainQuery);
}
}