Let's look at your map problem first. You could look at image modification with some of the PHP graphics functions, but I suspect they might be a bit complicated. Instead, I suggest you take your map and split it into multiple pieces, like a grid. Each piece is given some sort of identification code. For each piece, create a similar piece, but marked somehow to show that it is selected (different color, or an "X" on it as examples). To show your map, you simply reassemble the pieces back with an html <table>.
Your program will work like this...
Your "map" is displayed at the top of a form. Below it, is your "shopping cart"
You select items (like checkboxes) then click "submit"
Your receiving script reads the passed values and modifies the "shopping cart" database table, showing items selected.
The script then redirects you back to the submitting form.
*The display map function reads the database, determines items have been selected and replace the appropriate map tiles with selected map tiles.
That's basically how it might work. Now lets get a little fancier...
Each map tile could be a hyperlink that calls a form that displays what items are located in that area. You could use that to add or remove additional items in the area. Basically, it would be the same form for each tile, you just pass the tile ID as a parameter, which causes the form to load with the information for that tile.
Hopefully, this will give you some ideas...