Как получить значение для снятого флажка в элементе флажка при отправке формы?
У меня есть форма, как показано ниже:
<form action="" method="post">
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
</form>
Когда я проверяю все флажки и отправляю форму, результат выглядит так:
Array ([status_3] => 1 [status_2] => 1 [status_1] => 1 )
Затем я снимаю второй флажок и отправляю форму, результат выглядит так:
Array ( [status_3] => 1 [status_1] => 1 )
Можно ли сделать результат, как это ниже, когда я снимаю второй флажок:
Array ( [status_3] => 1 [status_2] => 0 [status_1] => 1 )
Есть идеи сделать это?
Ответы
Ответ 1
Первый способ - скрытые поля (недостаток: пользователь может манипулировать значением поля (но можно также манипулировать значением флажка, так что это не проблема, если вы только ожидаете 1 или 0))
<form action="" method="post">
<input type="hidden" name="status_1" value="0" />
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="hidden" name="status_2" value="0" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="hidden" name="status_3" value="0" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
<input type="submit" />
</form>
<?php
var_dump($_POST);
/*
* checking only the second box outputs:
*
* array (size=3)
'status_1' => string '0' (length=1)
'status_2' => string '1' (length=1)
'status_3' => string '0' (length=1)
*/
Второй способ - присвоить значение по умолчанию для неустановленных индексов:
<form action="" method="post">
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
<input type="submit" />
</form>
<?php
for($i = 1; $i<=count($_POST); $i++) {
$_POST["status_$i"] = isset($_POST["status_$i"]) ? $_POST["status_$i"] : 0;
}
var_dump($_POST);
/**
* Here we will be checking only the third checkbox:
*
* array (size=3)
'status_3' => string '1' (length=1)
'status_1' => int 0
'status_2' => int 0
*/
Ответ 2
Я думаю, что добавление скрытых полей, подобных этой, будет работать
<input type="hidden" id="status_1_" name="status_1" value="0">
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="hidden" id="status_2_" name="status_2" value="0">
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="hidden" id="status_3_" name="status_3" value="0">
<input type="checkbox" id="status_3" name="status_3" value="1" />
Ответ 3
Я думаю, что невозможно получить массив, как то, что вы хотите от html-форм. Но можно использовать некоторые трюки:
$defaultForm = array(
'status_1' => 0,
'status_2' => 0,
'status_3' => 0,
);
// example array from $_POST
$form = array(
'status_1' => 1,
'status_3' => 1,
);
$form = array_merge($defaultForm, $form);
Результат:
массив (3) {
'status_1' = > int (1)
'status_2' = > int (0)
'status_3' = > int (1)
}
Ответ 4
Попробуйте это. Если флажок не установлен, то вместо этого будет передано скрытое поле с тем же именем.
<form action="" method="post">
<input type="hidden" id="hidden_status_1" name="status_1" value="0" />
<input type="checkbox" id="status_1" name="status_1" value="1" />
<input type="hidden" id="hidden_status_2" name="status_2" value="0" />
<input type="checkbox" id="status_2" name="status_2" value="1" />
<input type="hidden" id="hidden_status_3" name="status_3" value="0" />
<input type="checkbox" id="status_3" name="status_3" value="1" />
</form>
Ответ 5
Спасибо всем. Спасибо @RoyalBg дать мне решение. Вот так:
<input type="hidden" name="status_1" value="0" />
<input type="checkbox" id="status_1" name="status_1" value="1" /> Check 1 <br />
<input type="hidden" name="status_2" value="0" />
<input type="checkbox" id="status_2" name="status_2" value="1" /> Check 2 <br />
<input type="hidden" name="status_3" value="0" />
<input type="checkbox" id="status_3" name="status_3" value="1" /> Check 3 <br />
Он отлично работает..:)
Ответ 6
вопрос уже может быть дан ответ, но я просто хотел взять на него удар... решение на стороне сервера:
$p = $_POST;
$a = array();
$a['status_3'] = (int) ($p['status_3'] === 1);
$a['status_2'] = (int) ($p['status_2'] === 1);
$a['status_1'] = (int) ($p['status_1'] === 1);
Тестирование
// if input is Array("status_1"=>1) output will be
Array ( [status_1] => 1 [status_3] => 0 [status_2] => 0 )
// if input is Array("status_1"=>1, "status_2"=>1) output will be
Array ( [status_1] => 1 [status_3] => 0 [status_2] => 1)
Ответ 7
<!--html code-->
<input type="checkbox" name="correct" value="1">Option 1
<input type="checkbox" name="correct" value="2">Option 2
<input type="checkbox" name="correct" value="3">Option 3
<input type="checkbox" name="correct" value="4">Option 4
//php code in function called on form submit
public function addOptions(Request $request)
{
$option = array('1' => 0,'2'=>0,'3'=>0,'4'=>0 );
$option[$request->correct] = 1;
return $option;
}
Ответ 8
Почему вы взяли его в массиве?
Вы можете получить флажок без отметки 0 с помощью "isset"
if(!isset($_POST['status_2'])
{
//Set status_2 parameter as 0
}
Ответ 9
попробуйте под кодом
$myresult = array();
if(!isset($_POST['status_1'])){
$myresult['status_1'] = 0;
}
if(!isset($_POST['status_2'])){
$myresult['status_2'] = 0;
}
if(!isset($_POST['status_3'])){
$myresult['status_3'] = 0;
}
echo "<pre>";
print_r($myresult);
echo "</pre>";
exit;
Ответ 10
Попробуйте следующее:
for ($i = 1; $i<=3; $i++) {
$_POST["status_$i"] = isset($_POST["status_$i"]) ? $_POST["status_$i"] : 0; // 0 if not set
}
var_dump($_POST);
Ответ 11
Предполагая, что мы используем флажки с нулями или единицами...
Использование скрытого флажка с нулевым значением - это просто обход. Другая работа вокруг - добавить 0 к значению при получении сообщения или получить.
Пример:
$chkbx1 = $_POST ['chckbx1'];
$ chkbx1 + = 0;
Это принимает значение NULL, а превращает его в ноль, но если значение равно единице, как в его проверке, тогда значение остается неизменным.
Реальная проблема здесь не придумывает обход. Его понимание, почему это происходит. Старые версии mySQL принимают нулевые значения и преобразуют их в нуль. В более новых версиях вы должны отключить строгий режим, а затем обход не нужен.
Ответ 12
! [динамический код таблицы с флажком] https://drive.google.com/file/d/1NusEviACjkBSLjj7Bhnag4uI7zAkO99d/view
Что делать, если я использую одноименный флажок в нескольких строках и хочу представить ноль, если не отмечен, и значение, если отмечено?