Почему все options имеют selected?

ЕСТЬ РЕШЕНИЕ
#1 2 марта 2025 в 01:03

 Понимаю, что где-то ошибаюсь, но никак не пойму, где?)

По умолчанию, параметр «selected» пустой

  1. $selected = '';

принимаем из формы значение одного из options select-a  формы

  1. $city = cmsCore::request('region', 'str', 'Москва');
  2.  
  3. if($city){
  4. switch ($city) {
  5. case 'Москва':
  6. $geo1 = '55.45';
  7. $geo2 = '37.37';
  8. $timecor = '3';
  9. $selected = 'selected';
  10. break;
  11. case 'Оренбург':
  12. $geo1 = '51.76';
  13. $geo2 = '55.09';
  14. $timecor = '5';
  15. $selected = 'selected';
  16. break;
  17. case 'Уфа':
  18. $geo1 = '54.73';
  19. $geo2 = '55.95';
  20. $timecor = '5';
  21. $selected = 'selected';
  22. break;
  23.  
  24. }
  25. }

в результате, в форме у всех трех городов  options имеет  selected

Кто-нибудь видит ошибку?

Добавлено спустя 4 минуты
  1. echo '<select name="region" onchange="this.form.submit();">
  2. <option value="Москва" '.$selected.'>Москва</option>
  3. <option value="Оренбург" '.$selected.'>Оренбург</option>
  4. <option value="Уфа" '.$selected.'>Уфа</option>
  5. </select>';
#2 2 марта 2025 в 01:29

Может так сработает?

  1. $city = cmsCore::request('region', 'str', 'Москва');
  2.  
  3. $selected = array(
  4. 'Москва' => '',
  5. 'Оренбург' => '',
  6. 'Уфа' => ''
  7. );
  8.  
  9. if($city){
  10. switch ($city) {
  11. case 'Москва':
  12. $geo1 = '55.45';
  13. $geo2 = '37.37';
  14. $timecor = '3';
  15. $selected['Москва'] = 'selected';
  16. break;
  17. case 'Оренбург':
  18. $geo1 = '51.76';
  19. $geo2 = '55.09';
  20. $timecor = '5';
  21. $selected['Оренбург'] = 'selected';
  22. break;
  23. case 'Уфа':
  24. $geo1 = '54.73';
  25. $geo2 = '55.95';
  26. $timecor = '5';
  27. $selected['Уфа'] = 'selected';
  28. break;
  29. }
  30. }
  31.  
  32. echo '<select name="region" onchange="this.form.submit();">
  33. <option value="Москва" '.$selected['Москва'].'>Москва</option>
  34. <option value="Оренбург" '.$selected['Оренбург'].'>Оренбург</option>
  35. <option value="Уфа" '.$selected['Уфа'].'>Уфа</option>
  36. </select>';
Добавлено спустя 1 минуту

Ну а вообще, чтобы по феншую можно так:

  1. $city = cmsCore::request('region', 'str', 'Москва');
  2.  
  3. echo '<select name="region" onchange="this.form.submit();">
  4. <option value="Москва" '.($city == 'Москва' ? 'selected' : '').'>Москва</option>
  5. <option value="Оренбург" '.($city == 'Оренбург' ? 'selected' : '').'>Оренбург</option>
  6. <option value="Уфа" '.($city == 'Уфа' ? 'selected' : '').'>Уфа</option>
  7. </select>';

На первый взгляд должно работать, но проверять лень 😀

#3 2 марта 2025 в 01:39
 Понимаю, что где-то ошибаюсь, но никак не пойму, где?
Нил™

Попробуйте вот так:

  1. $city = $this->request->get('region', 'Москва');
Сегодня в 19:56
#4 2 марта 2025 в 02:10

Попробуйте вот так:

maxxux

забыл уточнить, что после

$city = cmsCore::request('region', 'str', 'Москва');

Нил™

простое echo $city выводит город правильно, то что было выбрано в форме. То есть город в перменной $city правильно

Ну а вообще, чтобы по феншую можно так:

Pechora

По феншую, результат положительный. Selected только тот город, который и был выбран в форме. Решение проблемы есть. Спасибо!

Теперь для просвещения было бы интересно понять, что не так с первым вариантом.

Если 

switch ($i) {
case 0:
echo «i equals 0»;
break;
case 1:
echo «i equals 1»;
break;
case 2:
echo «i equals 2»;
break;
}

является эквивалентом

if ($i == 0) {
echo «i equals 0»;
} elseif ($i == 1) {
echo «i equals 1»;
} elseif ($i == 2) {
echo «i equals 2»;
}

в варианте по феншую то же сравнение

Если 

Нил™

и там же (в switch) 

$geo1 = '';
$geo2 = '';
 

принимают нужные значения

#5 2 марта 2025 в 02:41

Все options имеют selected, потому что вы используете везде один и тот же $selected. А нужно для каждого варианта свой: Мск $selected1, для Оренбург $selected2 и тд… и поэтому варианты от Pechora, правильно работают $selected['Москва'], $selected['Уфа']. А второй вариант хорош, так как вообще без переменной $selected.

#6 2 марта 2025 в 12:05

maxxux, о, дошло наконец то. Ночью логика уже отдыхала видимо. С утра яснее стало.

Спасибо!)

Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.