PHP y la funcion header ("Location:

Redireccionar con header('Location: ...')

header() envía los encabezados HTTP y debe ser lo primero que envía el server, antes de cualquier otra declaración, sin siquiera líneas en blanco antes. Además, para algunos navegadores, la URL a la que se desea redireccionar no puede ser una ruta relativa, debe ser una ruta absoluta.
header('Location: http://tuweb.com/pagina.html');
die();
Y con die() terminamos inmediatamente la ejecución del script, evitando que se envíe más salida al cliente. Sin embargo, es mejor envíar un mensaje notificando que se ha redireccionado con un enlace para seguir, en caso de que no funcione el redireccionamiento automático. Por ejemplo
header('Location: http://tuweb.com/pagina.html');
echo "El recurso se ha movido hacia <a href=\"http://tuweb.com/pagina.html\">aquí</a>."
die();
Por ejemplo, si quisiéramos redireccionar a una página dentro de la ruta actual, independientemente de cuál sea la ruta:
$host = $_SERVER['HTTP_HOST'];
$ruta = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$html = 'pagina.html';
$url = "http://$host$ruta/$html";
header("Location: $url");
echo "El recurso se ha movido hacia <a href=\"$url\">aquí</a>."
die();
En tu caso, el código PHP debería estar al principio del archivo.


Nota: Algunos servicios de hosting envían headers por su cuenta, haciendo que sea imposible redireccionar mediante encabezados. Las alternativas son:
Con una etiqueta META en el HTML
<meta http-equiv="Location" content="http://tuweb.com/pagina.html"/>
o mediante JavaScript
window.location.replace("http://tuweb.com/pagina.html");
La recomendación más robusta es que utilices todas las variantes, por si alguna falla. Por ejemplo
$host = $_SERVER['HTTP_HOST'];
$ruta = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$html = 'pagina.html';
$url = "http://$host$ruta/$html";

header("Location: $url");
include redirect.php;
die();
Y el codigo de redirect.php sería:
<html>
  <head>
    <meta http-equiv="Location" content="<?= $url ?>"/>
    <script type="text/javascript">
      window.location.replace("<?= $url ?>");
    </script>
  </head>

  <body>
    El recurso se ha movido hacia <a href="<?= $url ?>">aquí</a>.
  </body>
<html>
Aunque la función header() No es para mostrar un error grave al menos que no este escrito bien o no de la manera correta es algo similar con el require cuando el archivo no existe este muestra un error grave y no ejecuta la aplicación.

Recuerda que header() debe ser llamado antes de mostrar nada por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP. Es un error muy común leer código con funciones como include o require, u otro tipo de funciones de acceso de ficheros que incluyen espacios o líneas en blanco que se muestran antes de llamar a la función header(). Sucede el mismo problema cuando se utiliza un solo fichero PHP/HTML.
Deberías comprobar que la función header está antes de cualquier respuesta del tipo echoprint_rvar_dump, etc. Una respuesta httpenvía primero las cabeceras y después el contenido. Si se intenta añadir o modificar las cabeceras después de haberlas enviado suele dar este tipo de errores. Es cuestión de comprobar el flujo de la web o aplicación 

Es cuestión de poner el código php antes del html.
<?php
include("conexion.php");
if(!isset($_POST["bot_actualizar"])) {
    $id         = $_GET["id"];
    $nombre     = $_GET["nombre"];
    $precio     = $_GET["precio"];
    $fabricante = $_GET["fabricante"];
}
else {
    $id         = $_POST["id"];
    $nombre     = $_POST["nombre"];
    $precio     = $_POST["precio"];
    $fabricante = $_POST["fabricante"];
    $sql        = "UPDATE precios SET nombre=:minom, precio=:mipre, fabricante=:mifab WHERE id=:miid";
    $resultado  = $base->prepare($sql);
    $resultado->execute(array(":miid"  => $id,
                              ":minom" => $nombre,
                              ":mipre" => $precio,
                              ":mifab" => $fabricante
    ));
    header("Location:index.php");
}
?>
<!doctype html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- //... resto del código -->
Eso debería solucionarlo.

Otra solucion es  agregar  ob_start(); justo después de session_start();  o al principio si esta no esta, tomando tu código quedaría así:
 <?php 
        session_start();
        ob_start();

        if(!isset($_SESSION['user']) || (!isset($_SESSION['nick'])) ){
            header("Location: index.php?session=TimeOut");
            exit();
        }else{      

            if($_SESSION['user']!=$_SESSION['name_validate'] || $_SESSION['id']!=$_SESSION['id_user']||$_SESSION['user_validate']!=$_SESSION['permise'] || $_SESSION['data_validate']!=$_SESSION['random'] ){
               header("Location: index.php?access=Denied");
               exit();
            }                    
        }    
?>
o asi:

Vamos, quedaría:
<?php
ob_start();
session_start();
include("template/head.php");
include("template/header.php");
include ("inc/functions.php");
?>
    <div class="content">
        <?php
$password = encripta_password($_POST['loginpass']);
include ("db_files/db.php");
$strSQL = "SELECT * FROM usuarios where email = '".$_POST['loginmail']."'";
$query = mysqli_query($db, $strSQL);
while($result = mysqli_fetch_array($query)){
if ($password == $result['password'] && $_POST['loginmail'] == $result['email']){
echo "<br><center><h4>Has iniciado sesión, serás redirigido en 5 segundos</h4></center>";
$_SESSION['user']=$result['email'];
header( "refresh:5;url=index.php" );
}else {
echo "error";
}
}

mysqli_close($db);
?>
    </div>
    <?php
include("template/footer.php");
ob_end_flush();
?>
Aquí te dejo la guía e información acerca de esta función en PHP:

Al inicip del archivo añade
<?php ob_start() ?>
y al final
<?php ob_end_flush();?>
Tambien Depende del nivel de visualización de los WARNING en la configuración de tu archivo php.ini.

En Resumen;

<?php
//aquí tu codigo php
?>
//aquí todo lo relacionado con html.
Tu código PHP debe de ir al principio, antes de tu HTML para que tu pantalla esté limpia, y el header funcione.

Comentarios