I would look for a transition (ie. is now high but was low) and throw in a debounce (say, 20 mS).
eg.
if (buttonState == HIGH && oldButtonState == LOW)
{
delay (20);
// blah blah
} // end of button pressed
oldButtonState = buttonState;