Skip to content
Advertisement

Reload URL with param depending on value of dropdown

I would like to reload an URL with special parameters when a selection in a dropdown is made. The actual result is, that the URL changes and I see the URL with the parameter in the browserbar, but the page does not really reload/refresh.

Thats the code where I fetch the sorttype param … in fact a reload or refresh is not done, because other code is also not processed

// parse url
$url_components = parse_url($compurl); 
// get actual url path
$url = ltrim($url_components['path'], "/"); // ltrim($_SERVER['REQUEST_URI'], "/");
// get parameters from url
$sorttype = "";
parse_str($url_components['query'], $params); 
$sorttype = $params['sorttype'];

Thats the code where I place the dropdown

<!-- show sortoptions in dropdown-box with redirect on selection change -->
<form action="" method="post" style="float: right;">
    <strong>Sortierung:</strong>
    <select name="sortmode" onchange="location.href=this.options[this.selectedIndex].value; "  style="margin-top:6px;">
       <option <?php if (isset($sorttype) && ($sorttype == 'Autor')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Autor' ?>">Autor</option>
       <option <?php if (isset($sorttype) && ($sorttype == 'Erscheinungsjahr')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Erscheinungsjahr' ?>">Erscheinungsjahr</option>
       <option <?php if (isset($sorttype) && ($sorttype == 'Herausgeber')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Herausgeber' ?>">Herausgeber</option>
       <option <?php if (isset($sorttype) && ($sorttype == 'Region')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Region' ?>">Region</option>
       <option <?php if (isset($sorttype) && ($sorttype == 'Titel')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Titel' ?>">Titel</option>
       <option <?php if (isset($sorttype) && ($sorttype == 'Stadt')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Stadt' ?>">Stadt</option>
       <option <?php if (isset($sorttype) && ($sorttype == 'Verlag')) { echo 'selected'; } ?> value="<?php echo $url . '?sorttype=Verlag' ?>">Verlag</option>
    </select> 
</form>

Advertisement

Answer

There were multiple problems but the main is misunderstanding the post and get. When you want to use post, you don’t change the url. You only need to reload the page with your variable set in $_POST. I have edited the code for minimal length:

<!DOCTYPE html>
<html lang='en'>
<head>
    <?php 
        print_r($_POST);
        #print it if want to see if it was set
        $sorttype = $_POST['sorttype']; #assign the var
        if (!isset($sorttype)){$sorttype="Not sorted";} #to overcome multiple checks
    ?>
</head>

<form action="" method="POST" style="float: left;">
    <strong>Sortierung:</strong>
    <select name="sorttype" style="margin-top:6px;" onchange="this.form.submit()">
       <option value="Foo" <?php if (($sorttype == 'Foo')) { echo 'selected'; } ?>>Foo</option>
       <option value="Bar" <?php if (isset($sorttype) && ($sorttype == 'Bar')) { echo 'selected'; } ?>>Bar</option>
       </select> 
</form>
</html>

Select name is the var name for post, selected has to be at the end before closing tag like this: selected>. onchange only needs to submit the selected value this.form.submit()

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement