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.
Boston schools pull out free condoms over wrapping complaints
Aaron Carter is still in love with Hilary Duff