views:

44

answers:

1

Hey!

I'm trying to populate a second dropdown in a dynamic way based on a previs selected dropdown. However, I've managed to write get the page to reload when I choose anything in the dropdownbox but the chosen value isnt passed after reloading. I have register_globals turned off (and prefer to) and i'm using the GET function to submit the form. However when I try setting values in the URL I cant get it to work. Example: dropdown.php?area=1 still gives me a value in the dropdownbox with the default value. What am I doing wrong? Running on a LAMP server. Apache 2.2, php 5.3. Note: I found the php code here on the web wwich is suppose to help me pass the GET variable and select the option in the selectbox.

This is my code:

<html>
<head>
        <SCRIPT language=JavaScript>
        function reload(form)
        {
        var val=form.area.options[form.area.options.selectedIndex].value;
        self.location='dropdown.php?area=' + val ;
        }
      </script>
</head>
</body>
<? @$area=$HTTP_GET_VARS['area']; ?>
        <form action="" method="get">
                <select name="area" id="area" onchange="reload(this.form)">
                        <option>1</option>
                        <option>2</option>
                        <option>3</option>
                </select>
        </form>
</body>
</html>

Also, if this could be done with POST (or equivalent function) it would be even better.

Regards.

A: 

I think you're not specifying anywhere which one of the options should be selected on page load. Depending on the value of $area, you should add something like

<option selected>1</option>

You could easily do this with a couple of lines of PHP when rendering the option nodes:

<? if $area == 1
       print '<option selected>1</option>';
?>

etc.

Alternatively, you could just populate the second combo using client-side javascript eliminating the need for a page reload. If you need to do some sensitive server-side processing to calculate the value of the second combo, do it in a background AJAX call using jQuery (examples here). Postbacks for this kind of thing are kind of undesirable and old-fashioned these days.

Regarding the GET issue, if submitting the form has any side effects (eg. a change in state in the user's account, deleting something, creating a new entity) then it should definitely be a POST. Discussion here for example.

axel_c
Thanks alot! Its actually working now! :DA question tho, would this be possible to do with $_POST instead?
xeet
@xeet: i don't see why not. You'll have to manually send the POST request using jQuery or similar though.
axel_c
Thanks, I'll try to read up on jQueries:)
xeet