TableMan
TableMan

Reputation: 205

PHP & HTML : how to create dynamic drop down list

I have a little problem.

I'm searching the internet now for quite some time to find a proper solution but I was not successful so far.

This is what I want :

this is my first drop down list which is contain Category :

<select name="category" class="form-control" id="select1">
    <option value="-1"> - Choose One -</option>
         <?php
           $StoreCategoriesAPIAccessor = new StoreCategoriesAPIService(GuzzleClient::getClient());
           $stores = $StoreCategoriesAPIAccessor->getStoreCategories();
           foreach ($stores as $store):      
         ?>
     <option value="<?php echo $store->getStoreCategoryId(); ?>"><?php echo $store->getCategory(); ?></option>
         <?php endforeach; ?>
 </select>

this is my second drop down list :

<select name="category" class="form-control" id="select2">
    <option value="-1"> - Choose One -</option>
         <?php
            $StoreAPIAccessor = new StoreAPIService(GuzzleClient::getClient());
            $stores = $StoreAPIAccessor->getStores();
            foreach ($stores as $store):      
         ?>
         <option value="<?php echo $store->getStoreId(); ?>"><?php echo $store->getStoreName(); ?></option>
          <?php endforeach; ?>
</select>

Anyone know how to implement dynamic drop down list for this case ?

Upvotes: 0

Views: 242

Answers (1)

Populus
Populus

Reputation: 7680

Well first of all I'd like to ask that you separate business logic from view logic as much as possible, so I will do that in this answer.

Secondly, the 2nd dropdown box logic that you have does not contain anything that would retrieve stores for a given category, I will therefore make some assumptions and you can adjust based on that.

<?php
$StoreCategoriesAPIAccessor = new StoreCategoriesAPIService(GuzzleClient::getClient());
$categories = $StoreCategoriesAPIAccessor->getStoreCategories();

if (!empty($_GET['category'])) {
    $category_id = $_GET['category'];
    $StoreAPIAccessor = new StoreAPIService(GuzzleClient::getClient());
    $stores = $StoreAPIAccessor->getStores($category_id); // Assumption, the call to getStores() accepts category_id as a parameter
} else { // Optional as you don't need to declare variables in PHP, but its better practice to do so
    $category_id = null;
    $stores = array();
}
?>
<select id="select_category" name="category" class="form-control" onchange="window.location='?category=' + this.value">
    <option value="">- Choose One -</option>
    <?php foreach ($categories as $category): ?>
        <option value="<?php echo $category->getStoreCategoryId() ?>"><?php echo $category->getCategory() ?></option>
    <?php endforeach ?>
</select>

<select id="select_store" name="store" class="form-control"<?php echo $category_id == null ? " disabled='disabled'" : "">
    <option value="">- Choose One -</option>
    <?php foreach ($stores as $store): ?>
        <option value="<?php echo $store->getStoreId() ?>"><?php echo $store->getStoreName() ?></option>
    <?php endforeach ?>
</select>

Upvotes: 1

Related Questions