Объедините несколько полей в одно значение для отправки формы - PullRequest
3 голосов
/ 23 июня 2010

Продолжая с моего предыдущего вопроса , как я могу объединить месяц, день и год <select> s в одно значение "date", чтобы оно получилось в моем PHP-скрипте как

$_POST['date'], в формате MySQL YYYY-MM-DD?

Ответы [ 8 ]

11 голосов
/ 23 июня 2010

Вы можете использовать скрытое поле и построить его значение на SubSubmit, но на вашем месте я бы просто использовал обозначение массива в атрибуте имени и взорвал бы массив с помощью '-' в качестве клея: как это

<select name="date[year]">
...
<select name="date[month]">
...
<select name="date[day]">
...

php:

$date = implode('-', $_POST['date'])
//validate date format here
6 голосов
/ 23 июня 2010

Объедините это в своем PHP-скрипте, для этого нет причин добавлять зависимость от JavaScript. Основывайтесь на том, что работает . Кроме того, если вы сделаете это на сервере, он не будет подвергаться такому потенциальному злонамеренному или случайному вмешательству.

2 голосов
/ 23 июня 2010

Если вы выполните следующее, вы можете получить искомый результат.

<form method="post">
    <select name="date[]" id="year">
        <option>2010</option>
        <option>2011</option>
    </select>
    <select name="date[]" id="month">
        <option>8</option>
        <option>9</option>
    </select>
    <select name="date[]" id="day">
        <option>21</option>
        <option>22</option>
    </select>
    <input type="submit">
</form>

Результирующий $_POST var содержит следующее

Array
(
    [date] => Array
        (
            [0] => 2011
            [1] => 9
            [2] => 22
        )
)

Тогда все, что вам нужносделать это $date = implode('-', $_POST['date']);

2 голосов
/ 23 июня 2010

Если вы хотите сделать это, я предлагаю вам предпринять следующие шаги:

  1. Напишите свою HTML-страницу так, чтобы даже без JS все было понятно - имейте нормальный <input type="text" name="wtv" /> с сообщением, указывающим ожидаемый формат YYYY-MM-DD.
  2. Затем добавьте JavaScript, чтобы сделать это <input type="text" name="wtv" /> для type="hidden"; также добавьте три элемента <select> - один для дня, месяца и года. Не передавайте эти <select> элементы name атрибуты.
  3. Вам понадобится немного JS, чтобы гарантировать, что, поскольку пользователь выбирает разные месяцы, невозможные даты не появляются; поэтому, если я выберу «февраль» в месяцах, дни после 28 не будут доступны; но если это високосный год ...
  4. Добавьте обработчик событий onchange к этим трем элементам <select>, чтобы при их изменении вы изменили значение вашего исходного <input type="hidden" name="wtv" />, чтобы отразить выбранные значения.

Когда форма отправляется, поскольку элементы <select> не имеют атрибутов name, их информация не будет отправлена ​​на сервер, но у вашего скрытого <input /> есть имя, поэтому оно будет отправлено , отформатированный как дата.

Я уже писал такой виджет раньше ... Я постараюсь открыть демонстрационную страницу и дать ссылку на нее.

1 голос
/ 23 июня 2010

Смысл сбора этих данных по отдельности заключается в том, чтобы убедиться, что их формат правильный. Если вы отправите полную дату в свой php-скрипт, параметры проверки для php-скрипта будут гораздо более сложными. Лучше отправить 3 поля формы, проверить их простым способом, а затем создать дату в php.

Если вы настаиваете на отправке полной даты, вероятно, самый простой способ - скрытое поле (как говорит @kgb).

1 голос
/ 23 июня 2010

Вы можете создать скрытое поле и заполнить его перед отправкой формы

0 голосов
/ 23 июня 2010

Из вашего исходного поста я заметил, что вы используете плагин Datepicker() для jQuery, чтобы получить дату. Почему бы просто не установить формат даты по умолчанию равным 'yy-mm-dd'?

Если вы хотите проверить формат при получении PHP, используйте

date('Y-m-d', strtotime($_POST['date']));
0 голосов
/ 23 июня 2010

Вы можете использовать либо javascript, либо сам php, чтобы сделать это, но нет встроенного средства xhtml, с помощью которого это возможно (насколько я знаю).

Если вы используете для этого javascript (используя скрытые поля для отправки данных в ваш php-скрипт), вам все равно придется проверить поле на стороне сервера, прежде чем использовать php для обработки или вставки данных в базу данных. По этой причине я собираюсь пропустить вариант javascript и перейти к подходу php, который я бы использовал.

Я предполагаю числовые данные вида дд для дня, мм для месяца и гггг для года:

$day = $_POST['day']; // assume 23
$month = $_POST['month']; // assume 06
$year = $_POST['year']; // assume 2010

$mysql_date_format = $year . "-" . $month . "-" . $day; // should result in 2010-06-23

Используйте $mysql_date_format в своих скриптах, как вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...