PHP / HTML проверяет, содержит ли select уже определенное значение

#php #html #select #option

#php #HTML #html-select

Вопрос:

Я работаю над перепроектированием несколько плохо спроектированной системы и столкнулся со следующей проблемой. У меня есть поле времени, в котором пользователь может выбрать час, минуту и часовой пояс для события. Это делается с помощью выпадающего меню выбора HTML с несколькими различными опциями. Мой предшественник счел необходимым дать людям возможность выбирать точную минуту, тогда как в моем конкретном приложении будет достаточно 15-минутных приращений (не говоря уже о том, чтобы сделать список примерно в миллион раз проще для навигации для пользователей).

Проблема, с которой я столкнулся, заключается в следующем: если событие было создано, чтобы произойти, скажем, в 1:17 вечера ранее, но 17 больше не находится в выпадающем меню my minute, в нем будет отображаться опция по умолчанию —select— . Но я бы предпочел, чтобы в этих случаях 17 отображались в меню и были выбраны по умолчанию. Моя проблема в том, что я не знаю, как точно проверить, существует ли мое значение minute уже в списке, а затем добавить его, если это не так. Я полагаю, что я мог бы создавать массив PHP параллельно с моими выпадающими опциями, но я бы предпочел иметь возможность просматривать список опций напрямую и определять, есть ли значение уже там, если да, то двигаться дальше, если не добавлять его в конец. Есть ли способ получить такую информацию из HTML-объекта в PHP?

Ответ №1:

Нет, вы не можете получить доступ к этой информации из PHP. Единственное, что вы могли бы сделать, это буферизировать отправляемый вами HTML-код, а затем использовать DOM для доступа к раскрывающемуся списку. Но я предлагаю вам использовать php-массив, как вы упомянули, и создать из него выпадающий список.

 $values = array(0,15,30,45);
if(!in_array($values, $minute)) {
    $values[] = $minute;
}

// Generate select box..
[...]
  

Ответ №2:

Вы можете использовать модуль (%), чтобы определить, делится ли значение на 15 (при условии, что вы используете минуты 0, 15, 30 и 45 в новом списке), например

 if($value !== 0 amp;amp; $value % 15 !== 0) { // add it to the list }
  

Ответ №3:

Нет, если не считать синтаксического анализа вашего HTML с помощью анализатора PHP и получения значений, нет хорошего способа узнать это заранее. Лучшим решением для этого было бы иметь массив со значениями в вашем выпадающем списке и сверяться с этим массивом.

В качестве альтернативы я бы предложил выбрать ближайшее из новых возможных значений к предыдущему выбору пользователя. Вы могли бы получить это так:

 round($minute, 15) * 15; //14 will give 15, 35 will give 30, etc
  

Ответ №4:

Почему бы вам просто не создать весь объект (select / option) и удалить его с имеющейся у вас веб-страницы? У вас все равно будет HTML-страница. Вы просто не помещаете HTML для выбора / опции заранее. Вы создаете его в PHP и помещаете на страницу.

Вы используете PHP для определения значений, которые должны быть в опции.

Ответ №5:

PHP запускается во время рендеринга HTML, если вы хотите изменить a <select> с помощью PHP, этот рендеринг должен быть выполнен до представления списка. Ваше лучшее решение — создать массив и добавить туда свое пользовательское значение.

 define('DEFAULT_SELECT', array(0, 15, 30, 45));
...
$select_options = DEFAULT_SELECT;
if (!in_array($new_option, $select_options)) { array_push($new_option, $select_options)); }