Sounds like that your query is pulling nothing. What I would do, is above the while() section of your code, add [php]$mapname = array();[/php] This will force $mapname to be an array - otherwise, if your query pulls nothing, then the while() block won't be interpreted and hence your mapname is undefined. So when foreach() asks for it, it finds that its not an array and starts whining. Forcing $mapname to be an array will just mean that the foreach doesn't do anything if its empty.
Obviously, you need to put this code above wherever else that you may have used $mapname as it will destroy it first.
I do, however, have some concerns about your query.
`ship`='".$POST['ship']."'";
Should ship, not in fact be, m.ship or mn.ship?