Il secondo codice postato si trova nella stesso file dove c'è il form?
In tal caso la prima volta che arrivi sulla pagina, $_POST non è definito, quindi non puoi usarlo, funzionerà solo dopo aver compilato ed inviato il form una prima volta.