Cuando realizas un reedireccionamiento utilizando "header('location xxx');" no puedes enviar ningún tipo de salida antes del "header", esto abarca cualquier función que realice un "echo, var_dump, print_r, etc", tampoco puede a ver espacios en blanco, ni tampoco ningun tag html fuera de los tag <?php y ?> porque te enviara error
Código PHP:
Ver original<?php
//Ejemplos
echo 'hola mundo';
header('location index.php'); //esto marcara error ?>
Código PHP:
Ver original<div id="midiv">
<?php header('location: index.php'); //esto también marcara error ?> </div>
Código PHP:
Ver original<?php
header('location: index.php'); //y esto de nuevo mandara error porque antes del <?php hay un espacio en blanco
Nota: Se me olvidaba comentarte algo, el manejo de tus variables POST es de lo peor (no lo tomes a mal), ya que no filtras en absoluto lo que tus usuarios están enviando, un usuario mal intencionado puede realizar un XSS, inyección SQL y tumbar todo tu trabajo, así que mejora la seguridad de tus variables tanto GET como POST, puedes checar el siguiente
tema y busca en Google sobre XSS y SQL Injection