buttonState = digitalRead(buttonPin);
You do this each time through loop() so when the button is pressed buttonState will remain in its pressed state all the time that the button is pressed. The loop() function repeats thousands of times a second. Can you see how that might be a problem ?
You need to detect when the button becomes pressed rather than when it is pressed. Look at the StateChangeDetection example in the IDE to see how to do it.