#php
#php
Вопрос:
в этом php-коде я пытаюсь проверить, задан ли один из этих запросов, и если один из них value == ‘x’, но функция всегда выводит «выбрано» для всех параметров, что я делаю не так?
Функция:
function getSortBy(){
if (isset($_GET['sortby']) amp;amp; !empty($_GET['sortby'])) {
if ($_GET['sortby'] == 'default') {
return 'selected';
}elseif($_GET['sortby'] == 'price-desc'){
return 'selected';
}elseif($_GET['sortby'] == 'price-asc'){
return 'selected';
}elseif($_GET['sortby'] == 'date-desc'){
return 'selected';
}elseif($_GET['sortby'] == 'date-asc'){
return 'selected';
}elseif($_GET['sortby'] == 'size-desc'){
return 'selected';
}elseif($_GET['sortby'] == 'size-asc'){
return 'selected';
}else{
return null;
}
}else{
return null;
}
}
HTML:
<select>
<option value="default" <?php echo getSortBy(); ?>>Default</option>
<option value="price-desc" <?php echo getSortBy(); ?>>Price High to Low</option>
</select>
Комментарии:
1. То, как вы его закодировали, всегда будет возвращаться
selected
. Что вы ожидаете напечатать. Допустим, если $_GET[‘sortby’] == ‘price-desc’, что вы хотите напечатать в своем HTML?2. Ваша функция говорит, что когда любое из этих значений равно true, оно возвращает selected . Вероятно, вы хотите передать в эту функцию значение, например
<?php echo getSortBy('price-desc'); ?>
, и в вашей функции просто проверитьif ($_GET['sortby'] == $valPassedIntoFunction) { return 'selected'; }
или подобное.3. Не забывайте, что вам нужно добавить атрибут name к вашему элементу select. В вашем примере нет атрибута имени ‘sortby’ и, следовательно, нет ключа в $ _GET.
Ответ №1:
Это работает с PHP 7.3.
Файл: test_html1.php
Источник:
<?php
$options = [
'default' => 'Default',
'price-desc' => 'Price High to Low',
];
$currVal = isset($_GET['sortby']) ? $_GET['sortby'] : '';
?>
<html>
<form>
<select name="sortby">
<?php foreach ($options as $val => $name) : ?>
<option value="<?php echo $val; ?>" <?php if ($currVal == $val) echo ' selected="selected"' ?>>
<?php echo $name; ?>
</option>
<?php endforeach; ?>
</select>
<input type="submit" />
</form>
</html>
Поместите его на сервер для тестирования, например http://localhost/test_html1.php .
Ответ №2:
Вы хотите сравнить значение $_GET['sortby']
со значением параметров, в противном случае, если $_GET['sortby']
имеет какое-либо из этих значений, все элементы option будут иметь атрибут selected
.
PHP:
function getSortBy($value){
if (isset($_GET['sortby']) amp;amp; !empty($_GET['sortby'])) {
if ($_GET['sortby'] == $value) {
return 'selected';
} else {
return null;
}
} else {
return null;
}
}
HTML:
<select>
<option value="default" <?php echo getSortBy('default'); ?>>Default</option>
// ect.
<option value="price-desc" <?php echo getSortBy('price-desc'); ?>>Price High to Low</option>
</select>
Ответ №3:
Короткое и простое:
<select>
<option value="default" <?= markSelected('default') ?>>Default</option>
<option value="price-desc" <?= markSelected('price-desc') ?>>Price High to Low</option>
</select>
<?php
function markSelected($value)
{
if ($_GET['sortby'] ?? null === $value)
{
return 'selected';
}
return null;
}
Ответ №4:
Что-то вроде этого должно работать:
function getSortBy ($value)
{
if (isset($_GET['sortby']) amp;amp; $_GET['sortby'] === $value) {
return "value = '$value' selected ";
}
return "value = '$value' ";
}
HTML:
<select>
<option <?= getSortBy('default') ?>>Default</option>
<option <?= getSortBy('price-desc') ?>>Price High to Low</option>
</select>