#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 — это массив, который вы показали выше.