Nano Hash - криптовалюты, майнинг, программирование

Как создать динамическое поле выбора с помощью optgroup

Привет, у меня есть эта таблица mysql.

CREATE TABLE IF NOT EXISTS `selling_counties` (
  `county_id` int(11) NOT NULL auto_increment,
  `country` varchar(20) collate utf8_unicode_ci NOT NULL,
  `county_name` varchar(25) collate utf8_unicode_ci NOT NULL,
  `datecreated` datetime NOT NULL,
  `datemodified` datetime NOT NULL,
  PRIMARY KEY  (`county_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=97 ;

и мне нужно иметь поле выбора с optgroup, где будет страна, а county_name будет таким, как

<select name ="county">
    <optgroup label="England">
        <option>South Yorkshire</option>
        <option>Staffordshire</option>
        <option>Suffolk</option>
        <option>Surrey</option>
        <option>Tyne and Wear</option>
        <option>Warwickshire</option>
        <option>West Midlands</option>
        <option>West Sussex</option>
        <option>West Yorkshire</option>
        <option>Wiltshire</option>
        <option>Worcestershire</option>
    </optgroup>
    <optgroup label="Wales">
        <option>Clwyd</option>
        <option>Dyfed</option>
        <option>Gwent</option>
        <option>Gwynedd</option>
        <option>Mid Glamorgan</option>
        <option>Powys</option>
        <option>South Glamorgan</option>
        <option>West Glamorgan</option>
    </optgroup>
    <optgroup label="Scotland">
        <option>Aberdeenshire</option>
        <option>Angus</option>
        <option>Argyll</option>
        <option>Selkirkshire</option>
        <option>Shetland</option>
        <option>Stirlingshire</option>
        <option>Sutherland</option>
        <option>West Lothian</option>
        <option>Wigtownshire</option>
    </optgroup>
    <optgroup label="Northern Ireland">
        <option>Antrim</option>
        <option>Armagh</option>
        <option>Down</option>
        <option>Fermanagh</option>
        <option>Londonderry</option>
        <option>Tyrone</option>
    </optgroup>
</select>

Я уже пробовал это PHP: Dynamic Drop down with optgroup, но это немного сложный для меня, так как я новичок в php, более того, он исходит из 2 отдельных таблиц, а мой исходит из одной и той же таблицы.

Любая помощь будет весьма ценна.

21.11.2012

Ответы:


1

Вам нужно выбрать значения из таблицы

$mysqli = new mysqli($host, $user, $passwd, $database);
$result = $mysqli->query('select county_id, country, county_name from selling_counties');
$countries = array();
while ($row = $result->fetch_assoc()) {
    $country = $row['country'];
    if (!array_key_exists($country, $countries))
        $countries[$country] = array();

    $countries[$country][] = array($row['county_id'], $row['county']);
}

и поместите их в свой html select.

Обновите, чтобы добавить county_id в <option>:

<option value="<?php echo htmlentities($county[0]); ?>"><?php echo htmlentities($county[1]); ?></option>
21.11.2012
  • Не могли бы вы вставить код для html, чтобы я мог его попробовать. Спасибо 21.11.2012
  • @user1530513 user1530513 Вы можете использовать HTML-часть MrCode. Это должно работать нормально. 21.11.2012
  • Спасибо, приятель, это сработало как шарм. Я действительно ценю твою помощь. 23.11.2012
  • Одна вещь, которую вы упустили, как я могу получить идентификатор в ‹option value=id from county_id here›county_name‹/option› 23.11.2012
  • @user1530513 user1530513 Чтобы добавить county_id, вы должны выбрать его в запросе и соответствующим образом обновить параметр. См. измененный ответ. 23.11.2012
  • Спасибо дружище, это было круто. Действительно понял с первого раза. Большое спасибо, приятель. 23.11.2012

  • 2

    Создайте новый массив, подобный этому, со странами в качестве ключей и массивом округов в качестве каждого значения. Предполагая, что $rows - это массив необработанных строк таблицы.

    <?php
    
    $countries = array();
    
    foreach($rows as $row)
    {
        if(isset($countries[$row['country']])) // <-- edit, was missing a ]
        {
            $contries[$row['country']][] = $row['county_name'];
        }
        else
        {
            $countries[$row['country']] = array($row['county_name']);
        }
    }
    
    ?>
    
    <select name ="county">
        <?php foreach($countries as $country => $counties): ?>
    
            <optgroup label="<?php echo htmlentities($country); ?>">
    
                <?php foreach($counties as $county): ?>
    
                    <option><?php echo htmlentities($county); ?></option>
    
                <?php endforeach; ?>
    
            </optgroup>
    
        <?php endforeach; ?>
    </select>
    
    21.11.2012
  • в этой строке что-то не так $contries[$row['country']][] = $row['county_name']; 21.11.2012
  • @user1530513 user1530513 Мне не хватало ] в строке isset(). Попробуй снова. 21.11.2012
  • Спасибо за любезную помощь, приятель. Я использовал часть этого, чтобы заставить его работать. Большое спасибо. 23.11.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..