I have a dynamic country and region list i am trying to get working but for some reason when i select a country the next region field does not populate.
Here is the code:
HTML
Expand|Select|Wrap|Line Numbers
- <select name="country" onchange="update(this.value)"> <option value="184">USA</option>
- <option value="183">United Kingdom</option>
- </select>
- <select name="region" onchange="alert(this.value)">
- <option value="">Make a selection </option>
- </select>
Javascript
Expand|Select|Wrap|Line Numbers
- var AdminResponse = "";
- function parseResponse(){
- var nText = AdminResponse.getElementsByTagName('optionText');
- var nVal = AdminResponse.getElementsByTagName('optionVal');
- document.forms[0]['region'].options.length = 1;
- for (i=0; i<nText.length; i++)
- {
- var nOption = document.createElement('option');
- var isText = document.createTextNode(nText[i].firstChild.data);
- nOption.setAttribute('value',nVal[i].firstChild.data);
- nOption.appendChild(isText);
- document.forms[0]['region'].appendChild(nOption);
- }
- }
- function update(nVal){
- var AdminRequest = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
- AdminRequest.onreadystatechange = function()
- {
- if (AdminRequest.readyState == 4)
- {
- if (AdminRequest.status == 200)
- {
- AdminResponse = AdminRequest.responseXML;
- parseResponse();
- }
- else {
- alert('Error Update.php File '+ AdminRequest.statusText);
- }
- }
- }
- var infoStr = "?choice="+nVal;
- AdminRequest.open("GET", "Update.php"+infoStr, true);
- AdminRequest.send(null);
- }
PHP
[PHP]
<?php
$choice = $_GET['choice'];
$xml = "<?xml version='1.0' ?><options>";
require_once('init.php');
$query = "SELECT * FROM regions WHERE countryid = '$choice'";
$result = @mysql_query($query);
$num = @mysql_num_rows($result);
if ($result && $num > 0)
{
while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
$xml .= "<optionText>" . $row['region'] . "</optionText><optionVal>" . $row['region'] . "</optionVal>";
}
}
$xml .= "</options>";
@mysql_free_result($result);
@mysql_close();
header("Content-Type: text/xml");
echo $xml;
?>
[/PHP]
SQL Structure
id / countryid / region
1 / 184 / Brighton
2 / 184 / Berkshire
3/ 184 / Bath Avon
4 / 184 / Bedfordshire
5 / 183 / Alabama
6 / 183 / Alaska
7 / 183 / American Samoa
8 / 183 / Arizona
Any help would be greatfully appreciated.
Cheers,
Adam