It was their first victory in eight league games and looked unlikely when on-loan Derby winger Dave Martin was sent off in the 70th minute for a second bookable offence.
But despite desperate Preston pressure late on, the Saddlers hung on bravely to clinch all three points while Preston – after winning seven games on the bounce – fell to their second successive league defeat.
Walsall raced ahead in the 11th minute after starting brightly, Kevin Hurst crossing low to Nicholls, who held off a challenge from Connor McLaughlin before lashing a right-footed drive high into the net from the edge of the box.
Preston tried hard to get back in the game but Neil Mellor headed over from Jamie Proctor’s cross after 23 minutes, then did the same from a Paul Coots centre.
Mellor had to go off just before half-time following a tackle from Saddlers midfielder Adam Chambers who was booked. Walsall almost added to their lead when Hurst saw his 66th-minute drive cleared off the line by Barry Nicholson.