Q:

O if do codigo php não executa só o else

<form method="GET">
    salário: <input type="number" name="salario"> <br>
    tempo de serviço (em meses): <input type="number" name="tds"> <br>
    n° reclamações: <input type="number" name="rec"> <br>
    <input type="submit" name="calcular">
</form>

<?php
if (!empty($_GET["salario"]) && !empty($_GET["tds"]) && !empty($_GET["rec"])) {

    $salario=$_GET["salario"];
    $tds=$_GET["tds"];
    $rec=$_GET["rec"];

    $nsal=($salario*0.2);

    if (($salario > 1000) && ($tds > 12) && ($rec == 0)) {

        echo "Você foi promovido, parabéns.";
        echo "E ganhou um aumento de salário. Seu novo salário é: $nsal";

    } else{
        echo "Sem novidades, volte depois.";
    }
 } 

?>

A:

O problema é que você está usando o empty() para o rec, se o valor for 0, o PHP considera com vazio. Troque o empty() por isset() que vai funcionar.
Veja o exemplo:
if (isset($_GET["salario"]) && isset($_GET["tds"]) && isset($_GET["rec"])) {
  // lógica aqui
}

Espero ter ajudado.

