Solved

Filter select option for state then suburb then postcode

Posted on 2011-02-22
6
800 Views
Last Modified: 2012-05-11
Hello All,

I have a quick question with my website. I have a registration form which has the following drop down options:

- State (Australian States)
- Suburbs
- Postcodes

I need the Suburb to be filtered by the state, so if you select say NSW, the suburbs dropdown will then populate with all of the suburbs that are listed in the state NSW, then depending which suburb they choose it will display the postcode for that specific suburb. The postcode dropdown should be populated depending on the choice of suburb.

Here is my code currently, by I am confused with what to do next on how to get the above to work:

<tr>
<td class="reg">State</td>
<td class="reg">
<?php
$state_query="select distinct(sp_state) from tbl_state_postals order by sp_state";
$state_result = mysql_query ($state_query);
echo '<select name=ddlState id=ddlState class=RegnForm><option value=0>Select State</option>';
while($nt=mysql_fetch_array($state_result))
{
echo "<option value=$nt[sp_state]>$nt[sp_state]</option>";
$nt['sp_state'];
 if ($searchtypepropsearch == "ressale") { echo 'selected="selected"'; } else { echo ""; }
}
echo "</select>";
//var_dump($nt['sp_state']);
//echo $nt;
?></td>
</tr>


<tr>
<td class="reg">Suburb</td>
<td class="reg">
<?php
$query="select sp_id,sp_suburbname from tbl_state_postals order by sp_suburbname";
$result = mysql_query ($query);
echo "<select name=ddlSuburb id=ddlSuburb class=RegnForm><option value=0>Select Suburb</option>";
while($nt=mysql_fetch_array($result))
{
echo "<option value=$nt[sp_suburbname]>$nt[sp_suburbname]</option>";
}
echo "</select>";
?></td>
</tr>

<tr>
<td class="reg">Postcode</td>
<td class="reg">
<?php
$postcode_query="select sp_id,sp_postalcode from tbl_state_postals order by  sp_postalcode";
$postcode_result = mysql_query ($postcode_query);
echo "<select name=ddlPostcode id=ddlPostcode class=RegnForm><option value=0>Select Postcode</option>";
while($nt=mysql_fetch_array($postcode_result))
{ 
echo "<option value=$nt[sp_postalcode]>$nt[sp_postalcode]</option>";
}
echo "</select>";
?></td>
</tr>

Open in new window


Thanks In Advance!
PD
0
Comment
Question by:piixeldesigns
  • 3
  • 2
6 Comments
 
LVL 109

Expert Comment

by:Ray Paseur
ID: 34951150
I'm not well familiar with Australian postcodes, but in the USA, a ZIP code is a similar thing.  We do not need to have the client enter a city and state if we have a ZIP code because it is a unique identifier of a postal carrier route, and can only exist in one city / state.  If you know ZIP code 20016 and 4101 Nebraska Avenue, you do not separately need to know Washington, DC.

If I were designing this, I would ask for the ZIP code first and use it to infer the city and state.  Maybe you could do something like that with your post codes.
0
 
LVL 1

Author Comment

by:piixeldesigns
ID: 34951195
I was thinking along this path but to preload all of the postcodes/zipcodes in Australia slows down my page by A LOT! hence why I was thinking of doing it the other way if possible?

Thanks!
0
 
LVL 3

Expert Comment

by:jmsloan
ID: 34951198
To poplute another selectbox from another you would need to submit the for or use ajax.  

I personaly like the use of javascript and ajax.
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 1

Author Comment

by:piixeldesigns
ID: 34951256
That sounds great and I have seen some examples of this however I have some other fields above the state,suburb and postcodes so how do I submit the form if it already has a <form above?

I am just a little confused with how this should be setup?

Thanks
0
 
LVL 3

Accepted Solution

by:
jmsloan earned 500 total points
ID: 34951333
Here is a rough example of how I would do it.  Below it the html code and the code snipet is the php code.  

<html>

<title>test ajax</title>

<head>

<script language="javascript">
function getXmlHttpRequestObject() {
   if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
   } else if(window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
   } else {
      alert("Please upgrade your browser to gain full functionality.");
   }
}
 
//Our XmlHttpRequest object
var AJAXObject = getXmlHttpRequestObject();

function ajaxcall(url,functionname){
   if (AJAXObject.readyState == 4 || AJAXObject.readyState == 0) {
      AJAXObject.open("GET", url, true);
      AJAXObject.onreadystatechange = functionname;
      AJAXObject.send(null);
   }
}


function changeCity(city){
   var url = "changecity.php?state="+city;
   ajaxcall(url,getChangeCity);
}

function getChangeCity(){
   if(AJAXObject.readyState == 4){
      document.getElementById('showcity').innerHTML = AJAXObject.responseText;
   }
}

</script>
</head>

<body>
<select id='state' name='state' onChange='changeCity(this.value)'>
  <option value=''></option>
  <option value='CA'>California</option>
  <option value='TX'>Texas</option>
</select><br><br>

<span id='showcity'>
<select id='city' name='city'>
 <option></option>
</select</span><br><br>

</body>

</html>
<?php

//$sql = "select city from city_table where state = '$_GET[state]'";
//$runquery


//hard code response you would supply this info from query
if($_GET[state] == "CA"){
   $main = "<select id='city' name='city'>
               <option name='Mission Viejo'>Mission Viejo</option>
               <option name='Santa Monica'>Santa Monica</option>
               <option name='West Covina'>West Covina</option>
            </select>";
}else{
   $main = "<select id='city' name='city'>
               <option name='Forth Worth'>Forth Worth</option>
               <option name='Houston'>Houston</option>
               <option name='Dallas'>Dallas</option>
            </select>";
}

echo $main;

?>

Open in new window

0
 
LVL 1

Author Closing Comment

by:piixeldesigns
ID: 34957854
Thanks for the help!!!
0

Featured Post

Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Help in good tutorials for PHP, HTML and CSS 6 40
Delete  php pages of a part of our site 8 31
Wordpress Query 5 25
Force PDF to open inline as opposed to dowload 16 22
Part of the Global Positioning System A geocode (https://developers.google.com/maps/documentation/geocoding/) is the major subset of a GPS coordinate (http://en.wikipedia.org/wiki/Global_Positioning_System), the other parts being the altitude and t…
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…

860 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question