You need to have a separate table for : states, cities, listings.
states table should have an id, state name.
Cities table should have an id, state id, and city name.
listings should have an id, city id, and whatever else you want.
When you click on a state in the map, it should pass a var in the query string to identify the state.
eg: page.php?state=28
You could also use the state name if you want.
eg: page.php?state=washington
on page.php, you should have a query that looks for the state id or name. Make sure you check to see if the var is given.
if( empty($_GET['state']) ) echo("You have accessed page incorrectly. Go back to the map.");
else
{
$result = mysql_query("SELECT * FROM cities WHERE cities_sateid = " . htmlspecialchars($_GET['state']) );
echo("Choose from the following cities<br>");
while( $row = mysql_fetch_array($result) ) echo("<a href=\"page2.php?city=$row[city_id]\">$row[city_name]</a><br>");
}
That gives you a list of all the cities, and links to page2.php, which will look for the listings.
then you repeat the pattern, this time with the listings.
if( empty($_GET['city']) ) echo("You have accessed page incorrectly. Go back to the cities.");
else
{
$result = mysql_query("SELECT * FROM listings WHERE listings_cityid = " . htmlspecialchars($_GET['city']) );
echo("Choose from the following listings<br>");
while( $row = mysql_fetch_array($result) ) echo("<a href=\"page3.php?listing=$row[listings_id]\">$row[listings_name]</a><br>");
}
Finally, on the listings page you verify that they have submitted a listings id, and query the db for it.