Динамически создаваемые выпадающие списки в зависимости от пользовательского ввода через config.php

#php #jquery #forms

#php #jquery #формы

Вопрос:

Мне нужна помощь, пожалуйста. Мне нужно создать выпадающий список, а затем, когда опция будет отправлена, должен запуститься php-скрипт. Сложность в том, что я не могу жестко закодировать ни одно из значений. Мне нужно, чтобы это было «динамически создано»

config.php

 $number_Of_Option="3"

$Option_One_Name="Cars"
$Option_One_Year="2000"
$Option_One_Colour="Blue"

$Option_Two_Name="Houses"
$Option_Two_Year="2003"
$Option_Two_Colour="Pink"

$Option_Three_Name="Bikes"
$Option_Three_Year="1990"
$Option_Three_Colour="Orange"
  

Теперь мне нужно, чтобы выпадающий список был сделан с именем в выпадающем списке «Автомобили», «Дома», «Велосипеды», но они должны быть основаны на переменных, поэтому, если я изменю «Автомобили», это изменится.

Затем, когда опция отправлена (в данном случае вторая опция) Мне нужно, чтобы $ Option_Two_Year и $ Option_Two_Colour были переданы в скрипт, где эти две переменные являются переменными в скрипте. Таким образом, сценарий всегда один и тот же, однако, если выбран выпадающий, то он использует переменные 1, если 2, то он использует переменные 2 и т.д. Мне также нужно, чтобы это работало для бесконечного числа опций, чтобы в любой момент я мог попасть в config.php и добавьте еще один параметр со своими собственными переменными. Он может использовать массивы и jquery, если это проще или необходимо. Спасибо

Комментарии:

1. Рассматривали ли вы возможность использования массивов?

2. Я не совсем уверен, что вы имеете в виду, но было бы лучше создать массив с параметрами $Options = array(); $Options[0] = array(); $Options[0]['Name'] = "Cars"; $Options[0]['Year'] = "2000"; и так далее

3. Массивы прекрасны, но я не знаю, как это сделать, поэтому я ищу помощи..

Ответ №1:

Создайте внешний файл, например. options.php с помощью этого кода:

 $options = array();
$options["cars"] = array("2000","blue");
$options["houses"] = array("2003","pink");
$options["bikes"] = array("1990","orange");
  

Включите этот файл как на страницу формы, так и в скрипт синтаксического анализа, используя include("options.php");

На странице формы выполните:

 include("options.php");
echo '<select name="option">';
foreach($options as $name => $values)
{    echo '<option value="' .$name .'">' .$name .'</option>';
}
echo '</select>';
  

В скрипте синтаксического анализа выполните:

 include("options.php");
$chosenValue = $_POST['option'];
list($year,$colour) = $options[$chosenValue];
  

Теперь $year и $colour будут содержать год и цвет для опции с выбранным названием.

Комментарии:

1. Как бы мне создать кнопку отправки? Обычный HTML-файл?

2. Я получаю неопределенное смещение для этого списка строк ($ year, $ color) = $options [$chosenValue];

3. Извините, я допустил ошибку, вы не можете использовать list () для нечисловых массивов. Я обновлю ответ. Кроме того, вы можете создать кнопку отправки в обычном html, да. Не забудьте также обернуть вашу форму тегами <form>, я оставил их для простоты.

Ответ №2:

Вы знаете, что они изобрели массивы для этого? Если у вас достаточно свежая версия PHP (я думаю 1.0 или выше ;)), вы могли бы сохранить эти данные следующим образом:

 $options = array(
  'Cars' => array('Year'=>'2000', 'Colour'=>'Blue'),
  'Houses' => array('Year'=>'2003', 'Colour'=>'Pink'),
  'Bikes' => array('Year'=>'1990', 'Colour'=>'Orange'));
  

Затем вы могли бы получить выбранный параметр и найти соответствующие значения по этому параметру:

 $option = $_GET['option'];

if (array_key_exists($option, $options))
{
  $selectedYear = $options[$option]['Year'];
  $selectedColour = $options[$option]['Colour'];

  // Process them.
}
  

Если вы не хотите (или вам не разрешено) использовать массивы, вам нужно сопоставить каждую переменную:

 if ($option === $Option_One_Name)
{
  $selectedYear = $Option_One_Year;
  $selectedColour = $Option_One_Colour;
}
elseif ($option === $Option_Two_Name)
{
  ...
  

Конечно, вы можете немного ускорить это. Вы можете создать массив чисел и получить соответствующие переменные по их именам

 $numbers = array('One', 'Two', 'Three');

foreach($numbers as $number)
{
  $optionVar = 'Option_' . $number . '_Name';
  if ($option === $$optionVar)
  {
    $yearVar = 'Option_' . $number . '_Year';
    $selectedYear = $$yearVar;
    ...
  }
}
  

Этот код более сложный, но его не нужно будет расширять, если вы получите больше опций. Вам нужно только обновить массив Numbers.
Но все же, как вы можете видеть, использовать массивы будет проще.

Комментарии:

1. Я думал, что это массивы будет проще, просто никогда не использовал их раньше. Мои знания php начались несколько дней назад, поэтому я не хотел публиковать вопрос, который смущал людей, потому что мои массивы никогда не имели смысла..