Есть календарь, генерируемый так: Код (Text): <form name="datearray" action="datearray_save_action.php"> <?php $from = $_POST['from']; echo 'С '.$from.'<br>'; $to = $_POST['to']; echo 'По '.$to.'<br>'; setlocale(LC_ALL, 'ru_RU.UTF-8'); date_default_timezone_set('Asia/Yekaterinburg'); $dat1=$from; $dat2=$to; $per=strtotime($dat1); $per2=strtotime($dat2); $it=$per/(3600*24); $it2=$per2/(3600*24); $days=$it2-$it; $daysamount = $days+1; echo 'Интервал '.$daysamount.' дней<br>'; $cost=0; echo '<table><tr><td align="center">'; for ($i=0; $i<=$days; $i++) { $chdate = date( 'd.m.y', strtotime($dat1)+3600*24*$i); echo strftime('%a', strtotime($dat1)+3600*24*$i).'<br>'; echo date( 'd', strtotime($dat1)+3600*24*$i).'<br>'; echo '<input type="checkbox" name="chdate" id="ch" value = "'.$chdate.'"onclick="count()"/>'; // запросы в базу echo '</td><td align="center">'; } echo '</td></tr></table>'; ?> Выбрано: <h id="count">0</h> <input type="submit" value="Сохранить"> пытаюсь передать его в datearray_save_action.php, точнее хотя бы принять так: Код (Text): <?php if(isset($_POST['chdate'])) { print_r($_POST); } ?> Ничего не выходит. Пожалуйста, подскажите как записать 'checked' даты из диапазона в базу mysql Шпасибо
Откуда он должен браться? есть еще код? Ничего не выводится потому что переменной нету). И кроме кнопки в форме у вас ничего не передается. Используйте hidden поля чтобы передать какие то данные. к примеру Код (Text): <input type=hidden name=date value=<?php echo $chdate ;?> Код (Text): <?php if(isset($_POST['chdate'])) { print_r($_POST['date']); } ?> а по поводу записи в БД. там думаю все поняться. тоже проверяете существование кнопки, потом вызываете функцию записи данных в бд.
суть в том что чекбоксов много. их количество задается интервалом дат переменными from, to. допустим их десять, генерированных циклом. они одинаковы кроме value. хочу кнопкой передать значения всех "чекнутых" чекбоксов на другую страницу post'ом. как?
У "чекнутый" бокс создаст переменную, вот и все дела. Ловить эти переменные в том скрипте куда передали Покажите код
просто давай правильные имена инпутам. типа Код (Text): <input name="calendar[20140322]" type="checkbox> <input name="calendar[20140323]" type="checkbox> тогда в $caledar = $_POST['calendar'] у тебя будет массив из отмеченных записей. что-то вроде Код (Text): array( '20140322' => 'on', '20140323' => 'on', ) а неотмеченных там не будет упоминаться вообще. далее, крутишь массив по интересующему диапазону и каждое значение календарного ключа сверяешь с полученным массивом Код (Text): if (array_key_exists($key, $calendar)) { /* что-то делаем */ }
Итоговый вид Разметка Код (Text): ... <form method="post"> <label><input name="calendar[20140301]" type="checkbox"> 01.03.2014</label><br> <label><input name="calendar[20140302]" type="checkbox"> 02.03.2014</label><br> <label><input name="calendar[20140303]" type="checkbox"> 03.03.2014</label><br> ... Скрипт Код (PHP): <?php define('ONE_DAY', (24*60*60)); $date1 = strtotime('2014-03-01'); $date2 = strtotime('2014-04-01') - ONE_DAY; ?> <!DOCTYPE html> <html> <head> </head> <body> <p><strong> <?php // Get RESULT if any if ($_SERVER['REQUEST_METHOD'] == 'POST') { $checked = array(); for ($d = $date1; $d <= $date2; $d += ONE_DAY) { // Is checkbox checked? if (isset($_POST['calendar'][date('Ymd', $d)])) { $checked[] = $d; } } // Show result echo implode(', ', array_map(function($d) {return date('d.m.Y', $d);}, $checked)); } // Show FORM ?> </strong><p> <form method="post"> <?php for ($d = $date1; $d <= $date2; $d += ONE_DAY): ?> <label><input name="calendar[<?= date('Ymd', $d) ?>]" type="checkbox"> <?= date('d.m.Y', $d) ?></label><br> <?php endfor; ?> <p><input type="submit" value=" Send "></p> </form> </body> </html>
Ещё один момент. в коде можно написать: Код (Text): <input type="checkbox" name="calendar[]" value="..." /> <input type="checkbox" name="calendar[]" value="..." /> Тогда на сервере будет собран массив из $_POST['calendar'] === array('...', '...')
[ edited: ошибка выпилена ] я был неправ насчет атрибута value у checkbox. да, это тоже работает, а я не пользовался ))) век живи — век учись. кажется это стандартное поведение. просто если НЕ указан value, то принимает значение 'on' для чекбокса. p.s. Есть элегантный способ создать список дат: $dates = range($date1, $date2, ONE_DAY);
ткните мордой, пинайте, но не отображает он в datearray_save_action.php нифига Код (Text): <meta charset="utf-8"> <form name="datearray" action="datearray_save_action.php"> <?php $from = $_POST['from']; echo 'С '.$from.'<br>'; $to = $_POST['to']; echo 'По '.$to.'<br>'; setlocale(LC_ALL, 'ru_RU.UTF-8'); date_default_timezone_set('Asia/Yekaterinburg'); $dat1=$from; $dat2=$to; $per=strtotime($dat1); $per2=strtotime($dat2); $it=$per/(3600*24); $it2=$per2/(3600*24); $days=$it2-$it; $daysamount = $days+1; echo 'Интервал '.$daysamount.' дней<br>'; $cost=0; echo '<table><tr><td align="center">'; for ($i=0; $i<=$days; $i++) { $chdate = date( 'd.m.y', strtotime($dat1)+3600*24*$i); echo strftime('%a', strtotime($dat1)+3600*24*$i).'<br>'; echo date( 'd', strtotime($dat1)+3600*24*$i).'<br>'; echo '<input type="checkbox" name="chdate['.$chdate.']" id="ch" onclick="count()"/>'; // запросы в базу echo '</td><td align="center">'; } echo '</td></tr></table>'; ?> Выбрано: <h id="count">0</h> <input type="submit" value="Сохранить"> </form> <script language="JavaScript"><!-- function count() { var form = document.forms.datearray; var n = 0; for (var i=0; i < form.elements.length; i++) { var elt = form.elements[i]; if (elt.id == "ch" && elt.checked) n++; } var node = document.getElementById('count'); node.innerHTML = n } //--></script> В адресной строке: Код (Text): datearray_save_action.php?chdate%5B01.03.14%5D=on&chdate%5B02.03.14%5D=on datearray_save_action.php: Код (Text): <?php $test = $_POST['chdate']; print ($test); ?>