Dynamic Drop Down Visibility Issue

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
Kingo
Forum Contributor
Posts: 146
Joined: Thu Jun 03, 2004 9:38 am

Dynamic Drop Down Visibility Issue

Post by Kingo »

Hello
I'm trying to display the contents from a dynamic drop down list. But initially all the list boxes are present. I want to do the following.
Initially only the Country's List box shouls be visible.
When a country is selected , all the states corrosponding to that country should be visible along with the countrys list boz and similarly, if i select a state, all the cities in that state whould be visible along with country and state list boxes.

Here is the code that works without the visibility.

Code: Select all

<?php 

echo "<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> ";
echo "<title>Dynamic Drop Down List</title></head>   <body> ";
echo "Hello";

require_once('Connections/mysql_conn.php');


echo "<FORM name=f1  action="$_SERVER[PHP_SELF]" method=post>"; 

$result = mysql_query("SELECT COUNTRY.COUNTRYNAME,STATE.COUNTRYID, CITY.STATEID, STATE.STATENAME,CITY.CITYNAME,CITY.ID FROM COUNTRY, STATE, CITY WHERE STATE.COUNTRYID = COUNTRY.ID and CITY.STATEID=STATE.ID"); 

echo "<CENTER><BR><B>Dynamic Drop Down Boxes (in PHP)</B><BR>"; 

// write the country's listbox... 
echo "<b>Country</b>";
echo "<select name = "country" size="1" onchange="countryselected(this);">";
echo "<option value=0></option>";
$sJavaScript = "
function countryselected(elem) {\n for ( var i = document.f1.state.options.length; i>=0;i--){\n document.f1.state.options[i]=null;\n} for ( var i = document.f1.city.options.length; i>=0;i--){\n document.f1.city.options[i]=null;\n";

   
$sLastCountry=""; 
$sLastState=""; 
$sLastCity=""; 


while ( $row = mysql_fetch_array($result) ) 
  {    
    // is this a new country? 

    If ($sLastCountry!=$row["COUNTRYNAME"])
	{ 
     
      // if yes, add the entry to the country's listbox 

      $sLastCountry = $row["COUNTRYNAME"]; 
      echo "\n<OPTION VALUE='".$row["COUNTRYID"]."'>".$sLastCountry."</OPTION>"; 
       
    // and add a new section to the javascript... 

      $sJavaScript = $sJavaScript."}\n"."if (elem.options[elem.selectedIndex].value==".$row["COUNTRYID"]."){\n"; 
	  

     } 
	 // is this a new state? 

    If ($sLastState!=$row["STATENAME"])
	{ 
	// if yes, add the entry to the states's listbox 

      $sLastState = $row["STATENAME"]; 
	 
    // and add a new state line to the javascript 

    $sJavaScript = $sJavaScript."document.f1.state.options[document.f1.state.options.length] = new Option('".$row["STATENAME"]."','".$row["STATEID"]."');\n"; 
	     
	}
	$sJavaScript = $sJavaScript."\n"."if (document.f1.state.options[document.f1.state.selectedIndex].value==".$row["STATEID"]."){\n"; 
	$sJavaScript = $sJavaScript."document.f1.city.options[document.f1.city.options.length] = new Option('".$row["CITYNAME"]."','".$row["ID"]."');\n}"; 
	// is this a new city?
	
	
} 
// finish the country's listbox 

  echo "</SELECT></TD>"; 
$result1 = mysql_query("SELECT COUNTRY.COUNTRYNAME,STATE.COUNTRYID, CITY.STATEID, STATE.STATENAME,CITY.CITYNAME,CITY.ID FROM COUNTRY, STATE, CITY WHERE STATE.COUNTRYID = COUNTRY.ID and CITY.STATEID=STATE.ID"); 
echo "<b>State</b>";
echo "<select name = "state" size="1" onchange="stateselected(this);">";
echo "<option ></option>";
$tJavaScript = "
function stateselected(elem) {\n for ( var i = document.f1.city.options.length; i>=0;i--){\n document.f1.city.options[i]=null;\n";

   
$sLastState=""; 
$sLastCity=""; 


while ( $row = mysql_fetch_array($result1) ) 
  {    
    // is this a new country? 

    If ($sLastState!=$row["STATENAME"])
	{ 
     
      // if yes, add the entry to the country's listbox 

      $sLastState = $row["STATENAME"]; 
      
       
    // and add a new section to the javascript... 

      $tJavaScript = $tJavaScript."}\n"."if (elem.options[elem.selectedIndex].value==".$row["STATEID"]."){\n"; 
	  

     } 
	 // is this a new state? 

    
	
    // and add a new state line to the javascript 

    $tJavaScript = $tJavaScript."document.f1.city.options[document.f1.city.options.length] = new Option('".$row["CITYNAME"]."','".$row["ID"]."');\n"; 
	     
	}
	
		
  
// finish the country's listbox 

  echo "</SELECT></TD>"; 

  echo "\n<TD valign="center">CITY</TD><TD><SELECT NAME="city" SIZE=1>"; 
  echo "<OPTION></OPTION>"; 
  echo "</SELECT></TD></TR>"; 
  echo "<TR><TD><font style='font-size=10'></TD><TD></TD><TD></TD><TD><INPUT TYPE=SUBMIT NAME='submitcity' VALUE='SUBMIT'></TD></TR>"; 

echo "</TABLE>"; 
// finish the javascript and write out 

  $sJavaScript = $sJavaScript."\n}\n}\n"; 
  $tJavaScript = $tJavaScript."\n}\n}\n"; 
  echo "\n<SCRIPT LANGUAGE="JavaScript">"; 
  echo "\n".$sJavaScript."\n";
  echo "\n".$tJavaScript."\n</SCRIPT>\n"; 

//close the form 

echo "</FORM></center>"; 


//code to test the submit button 
//normally people would save the index in another table 
//this example only display the indexe
/*
if ("SUBMIT" == $submitcity) 
{ 

echo "<center>Your Selected Country index= ".$country."<BR>";   
echo "Your Selected City index= ".$city."<BR></center>";    

}    
*/
echo "</body></html>";
?>
Kingo
Forum Contributor
Posts: 146
Joined: Thu Jun 03, 2004 9:38 am

Post by Kingo »

And Is there a way to optimize the above code. Any help is really appreciated.
Post Reply