Most people tend to rush landings, that is the problem, or they try and "force" them with bad technique. Start out early, get lined up and bleed off any excess speed/alt while still 45 sec+ away from landing. Then, turn into the airfield and control your speed while lowering flaps/gear. You should make gentle adjustments to your course just to refine it as you approach and watch you speed, it should be between 110-130mph on most aircraft (some can be slower than that). Typically that range of speed gives you enough control that you won't be stalling all over the place. Don't come in too low, you want a nice glide-slope into the runway, coming in too low tends to result in stalls and crashes plus you can't see the runway well to refine your aim. A good method to not come in shallow like that is to aim to land on the far end of the runway, to start, then slowly move the aim point to the start of the runway. This also helps later with CV landings. Just float down while adjusting your speed and pull back gently as you cross the runway threshold and reduce power until you settle onto the runway. You don't want to "fly into it", you want to float down onto it.
Usually after a couple of offline practices you'll get the feeling for it. Once you get the hang of it you can shorten your approach and be more aggressive.