$_POST зависит от чекбокса

242
06 марта 2017, 13:10

Доброго времени суток, из select выбирается значение, switch определяет какое действие выполнять. В форме вместе с select есть чекбокс. Так вот, если чекбокс не выбран, то ничего не происходит, значение отправляется верное, но switch его инорирует. Если чекбокс активирован, switch работает. Вот форма:

<form action="" method="post" name="dropdownlist" id="select-interval">
        <select class="select rounded shadow" id="interval" name="interval" size="1">
            <option disabled selected>Выберите интервал</option>
            <option value="week">Неделя</option>
            <option value="month">Месяц</option>
            <option value="date-selector" data-type="range">Выберите даты...</option>
        </select>
        <table id="hidden-table" class="hidden"><tr>
        <td>Дата начала</td>
        <td><input type="date" name="start_date"/></td></tr>
        <tr><td>Дата конца</td>
        <td><input type="date" name="end_date"/></td></tr></table>
        <input class="submit color_button rounded" type="submit" value="Выбрать" name="show-select" id="submit" /><Br>
        <input type="checkbox" name="otchet" value="a1">Создать отчет
</form>

Switch:

switch($_POST['interval'])
{
case "week": //Неделя
    $TemplatePath = 'docs/TemplateWeek.docx';
    $table_title = 'Активность за неделю';
    $strSQL="SELECT * FROM worktime WHERE pcid='".$_SESSION['currpcid']."' AND year(date)= year(now()) AND week(date, 1) = week(now(), 1) ORDER BY date"; //Выбор записей за неделю 
break;
case "month": //Месяц
    $TemplatePath = 'docs/TemplateMonth.docx';
    $table_title = 'Активность за прошедший месяц';
    $strSQL="SELECT * FROM worktime WHERE pcid='".$_SESSION['currpcid']."' AND date > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH)) AND date < DATE_ADD(LAST_DAY(CURDATE() - INTERVAL 1 MONTH), INTERVAL 1 DAY) ORDER BY date"; //Выбор записей за неделю
break;
case "date-selector": //Выбор даты
    $start_date=$_REQUEST['start_date'];
    date_create($start_date)->Format('Y-m-d');
    if (!$_REQUEST['end_date'])
    {
        $end_date=date("Y-m-d");
    }
    else
        $end_date=$_REQUEST['end_date'];
    if ($start_date > $end_date)
    {
        echo "Начальная дата должна быть меньше даты окончания!";
    }   
    date_create($end_date)->Format('Y-m-d');
    $TemplatePath = 'docs/TemplateInterval.docx';
    $table_title = 'Активность с' . $start_date . ' по ' . $end_date . '';  
    $strSQL="SELECT * FROM worktime WHERE pcid='".$_SESSION['currpcid']."' AND date BETWEEN '$start_date' AND '$end_date' ORDER BY date DESC"; //Выбор записей по интервалу
break;
}

Действие при нажатом чекбоксе:

if ($_POST['otchet'])
{
    $OtchetDateTime = date('y-d-m H-i-s');
    require_once 'PHPWord.php';
    $PHPWord = new PHPWord();
    $document = $PHPWord->loadTemplate($TemplatePath);
    $document->setValue('Value1', '00001');
    $document->setValue('Value2', $resultpcname[0]);
    $document->setValue('Value3', $globaltime);
    $document->setValue('Value4', $totaltimeout);
    $document->setValue('Value5', date('Y'));
    $document->setValue('Value6', date("m.d.y"));
    $document->setValue('Value7', $OtchetDateTime);
    $document->setValue('Value8', $start_date);
    $document->setValue('Value9', $end_date);
    $document->save('docs/reports/'. $OtchetDateTime .' '. $_POST['interval']. '-report.docx');
}
Answer 1

В зависимости от браузера, значение чекбокса будет разный (значение по умолчанию). Как правило это 1,on. Если чекбокс не проставлен, то он не отправляется на сервер. Возможно проблема в том, что у вас возникает предупреждение/ошибка. Попробуйте проверять его существование

if(array_key_exists('otchet', $_POST) && $_POST['otchet']){...}

PS. Не очень понятно как switch связан с этим условием. Было бы не плохо, если бы был представлен полный код, отражающий их зависимость друг от друга.

Answer 2

Решил проблему перемещением блока if ($_POST['otchet']) с шапки в тело документа.

READ ALSO
Не работает Cron, в Laravel 5.4 + Docker

Не работает Cron, в Laravel 5.4 + Docker

Обновили Laravel 53 до Laravel 5

373
unicode to decimal in php

unicode to decimal in php

Ребята, подскажите как конвертировать unicode в decimal?

264
Как вывести имена из базы MySQL?

Как вывести имена из базы MySQL?

Как вывести из базы в колонке xfields только слово после |label| не во всех ячейках они присутствуют

256
Возможно ли обновлять скрипт помимо AJAX?

Возможно ли обновлять скрипт помимо AJAX?

Я создаю Telegram бота, и вот для теста я хочу, чтобы он отвечал на сообщения в зависимости от контекстаНо вот в чем дело, сообщение от бота не отправится...

232