there is no cheap flight only coach and train.
overnight bus with www.eurolines.com
train is between 7 and 8 hours.
I took the Jaroslav Hasek train which leaves early in the morning from Prague. You arrive in Budapest at 14 o'clock. The cost was 1368 CZK (44 EUR), just one way. It's better to buy two way ticket because it's just a little more exensive than one way. You can pay with the credit card both in Prague and Budapest, just watch for the Visa or MC sign because not all the cashier booths have it.
For the flights you can check easyjet. However I think it's not really worth it because you would have to pay also the cab. Also the train trip is nice.
In Prague the train leaves from Hlavni Nadrazi (hope I spelled it right) and arrives in Budapest at Nyugati train station. From there you can take the Metro.
Enjoy the trip.