Доброго времени суток, из 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');
}
В зависимости от браузера, значение чекбокса будет разный (значение по умолчанию). Как правило это 1,on. Если чекбокс не проставлен, то он не отправляется на сервер. Возможно проблема в том, что у вас возникает предупреждение/ошибка. Попробуйте проверять его существование
if(array_key_exists('otchet', $_POST) && $_POST['otchet']){...}
PS. Не очень понятно как switch связан с этим условием. Было бы не плохо, если бы был представлен полный код, отражающий их зависимость друг от друга.
Решил проблему перемещением блока if ($_POST['otchet'])
с шапки в тело документа.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как вывести из базы в колонке xfields только слово после |label| не во всех ячейках они присутствуют
Я создаю Telegram бота, и вот для теста я хочу, чтобы он отвечал на сообщения в зависимости от контекстаНо вот в чем дело, сообщение от бота не отправится...