-2

Сорри за может быть глупые вопросы, только начинаю изучать PHP.

Есть форма, в ней пять чекбоксов вида:

<form action="#" method="post" class="form">
  <input class="main__input" type="checkbox" name="budget_01[]" value="Красный" id="red">
  <label for="red" class="main__label"><span>Красный</span></label>
  <input class="main__input" type="checkbox" name="budget_01[]" value="Зеленый" id="green">
  <label for="green" class="main__label"><span>Зеленый</span></label>
  <input class="main__input" type="checkbox" name="budget_01[]" value="Желтый" id="yellow">
  <label for="yellow" class="main__label"><span>Желтый</span></label>
  <input class="main__input" type="checkbox" name="budget_01[]" value="Фиолетовый" id="purpure">
  <label for="purpure" class="main__label"><span>Фиолетовый</span></label>
  <input class="main__input" type="checkbox" name="budget_01[]" value="Синий" id="blue">
  <label for="blue" class="main__label"><span>Синий</span></label>
  <button type="submit" class="button"
</form>

Кроме чекбоксов на сайте есть текстовые инпуты и их много, поэтому для отсылки данных пользуюсь FormData:

const dataForm = new FormData(form);
const user = {};

dataForm.forEach((val, key) => { user[key] = val; });

Сформировал PHP-шаблон письма. С текстовыми инпутами все ОК, они нормально подставляются в переменные.

Для подстановки чекнутых чекбоксов создал для каждого свою переменную со значением "не определено". Хочу, чтоб если в массиве присутствует чекнутый чекбокс, его значение подставлялось заместо "не определено".

$budget01_01 = "не определено";
$budget01_02 = "не определено";
$budget01_03 = "не определено";
$budget01_04 = "не определено";
$budget01_05 = "не определено";
$budget_01_arr = $_POST['budget_01'];

if (!empty($_POST['budget_01'])) { foreach($_POST['budget_01'] as $value) { $budget_01_arr .= $value; } }

$body = "<h2>New contact</h2> <tr style='background-color: #f8f8f8;'> <td style='padding: 10px; border: #e9e9e9 1px solid;'><b>.$budget_01_arr.</b></td> </tr>";

Два вопроса:

  1. Почему в письме ничего не приходит, связанное с чекбоквами (инпуты подставляются, потому что на них заранее установлены переменные)?
  2. Как вообще работать с ошибками в PHP, если сайт написан на HTML? Как-то вывести их в консоль нельзя? Как вообще с ними работают?
  3. Ну и, если не сложно, подскажите, как все-таки подставить значения в переменных? Мне же не нужно искать, какие чекбоксы помечены, придут только помеченные чекбоксы.

1 Answers1

-1

Ошибка заключалась в том, что я пользовался статьями, в которых описывается, как получить заполненные чекбоксы в собственный массив. Именно для этого нужно было ставить для чекбоксов одинаковое название атрибута "name" с квадратными скобками в конце. Но при создании json у меня уже в JS перебираются все активные инпуты (в т.ч. чекбоксы) и записываются в подмножество 'user', каждый объект со своими свойствами. Поэтому в этом подмножестве никакого массива 'budget_01' не было. Мне просто нужно было создать для каждого инпута свою переменную и перебрать все переменные циклом:

HTML
<input class="main__input" type="checkbox" name="budget_01_01" value="Красный" id="red">

PHP $json = file_get_contents('php://input'); $obj = json_decode($json, true);

if (!empty($obj['budget_01_01'])) { $budget_01_01 = $obj['budget_01_01']; } else { $budget_01_01 = "не определено"; }