Craig entered the game in the third inning to replace Matt Holliday, who left with discomfort in his right hand, and proceeded to have a big game, smacking a three-run homer and an RBI double as St. Louis rallied from a 5-0 deficit.
Nick Punto went 4-for-5 with a solo home run and Skip Schumaker drove in three runs for the Cards, who will seek to edge out the Atlanta Braves for the wild-card in Wednesday's final game of the regular season.
The Braves came into Tuesday with a one-game lead but lost to Philadelphia. Should the Braves and the Cardinals remain tied after Wednesday, a one-game tie-breaker would be played Thursday night in St. Louis.
Eduardo Sanchez (3-1) earned the win with 1 1/3 scoreless innings in relief of starter Jake Westbrook, who lasted only 2 1/3 frames, allowing five runs on seven hits.
Houston's Enerio Del Rosario (0-3) was saddled with the loss after allowing three runs in seventh.
Jimmy Paredes and Brett Wallace each drove in two runs for the Astros.