John Skelton stepped in for the injured Kevin Kolb and threw for 282 yards and three touchdowns, and the Arizona Cardinals rallied to hand the San Francisco 49ers their third loss of the season, 21-19 on Sunday.