Выпадающий список PHP-массивов и HTML-форм

#php #html #arrays #forms

#php #HTML #массивы #формы

Вопрос:

У меня есть простой PHP-массив под названием $categories, который выглядит следующим образом:

 Array
(
[Closed] => P1000
[Open] => P1001
[Pending] => P1002
[In Progress] => P1003
[Requires Approval] => P1004
)
  

У меня есть простая HTML-форма, в которой есть выпадающий список для одного поля, в котором я хотел бы использовать массив для параметров, однако я хочу, чтобы в нем отображался только текст (например, Закрытый, открытый, ожидающий, выполняется и требует утверждения) в качестве параметров в выпадающем списке, но сохранялся связанный ключ для этого параметра (например, P1000, P1001 и т.д.), Который затем отправляется как значение POST при отправке формы.

HTML-код для поля формы на данный момент является:

 <select name="category_id">
<option value=""></option>
<?php foreach($categories as $category) {$category = htmlspecialchars($category);?>
<option value="<?php echo $category; ?>"><?php echo $category; ?></option>
<?php
}
?>
</select>
  

Я могу заставить его отображать либо текст, либо идентификаторы, но не текст, и сохранять идентификатор. Надеюсь, это что-то простое, что кто-нибудь сможет указать мне правильное направление.

Большое спасибо, Стив

Ответ №1:

Вы забыли о теге $value. Вы дважды вставляли название категории вместо значения. Вы должны это сделать:

 <select name="category_id">
<option value=""></option>
<?php 
    #                             !vCHANGEv!
    foreach($categories as $category => $value) 
    {
       $category = htmlspecialchars($category); 
       echo '<option value="'. $value .'">'. $category .'</option>';
    }
?>
</select>
  

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

1. Спасибо Робику и всем остальным, кто указал на то же самое — не получал ключ для каждого значения в массиве. Теперь все работает отлично. Большое спасибо всем.

Ответ №2:

Поскольку вы должны включить ключ и значение, оба ключа должны отображать текст и значение для POST

 <?php foreach($categories as $key => $category) {
   $category = htmlspecialchars($category);?>
   <option value="<?php echo $category; ?>"><?php echo $key; ?></option>
<?php
}
?>
  

Ответ №3:

вы не включили ключи в цикл foreach

 foreach($categories as $id=>$category){
    $category = htmlspecialchars($category);
    echo "<option value="{$id}">{$category}</option>";
}
  

Ответ №4:

 foreach($categories as $category => $category_id)
  

Это то, что вы ищете.

Ответ №5:

 <select name="category_id">
<option value=""></option>
<?php
$keys = array_keys($categories);
for($i=0; $i<count($categories); $i  )
{?>
    <option value="<?php echo $keys[$i]; ?>"><?php echo $categories[$i]; ?></option>
<?php
}
?>
</select>
  

Предположим, что $categories — это массив, который вы показали выше.