0

Tengo un archivo que es tal que así:

    <?php
    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");
?>

Pero cuando llego desde mi formulario, a la página con el código mencionado arriba me sale este error:

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\oneplayer_git\template\header.php:57) in C:\xampp\htdocs\oneplayer_git\logincheck.php on line 17

Juan Pinzón
  • 9,007
  • 18
  • 48
  • 76
Pavlo B.
  • 1,835
  • 16
  • 41
  • 72
  • Mira este link: http://librosweb.es/foro/pregunta/128/como-solucionar-el-problema-headers-already-sent-de-php/ – Francisco Romero Oct 26 '16 at 11:34
  • Lee sobre [inyección SQL](http://es.stackoverflow.com/q/10518/250) y [cómo evitarla en PHP con MySQLi](http://es.stackoverflow.com/q/18232/250). Este código es vulnerable a ataques de inyección SQL y no debería usarse en un entorno de producción de cara al público. – Alvaro Montoro Oct 26 '16 at 12:41
  • 4
    Posible duplicado de [PHP y la función header(location: )](http://es.stackoverflow.com/questions/19791/php-y-la-funci%c3%b3n-headerlocation), o de [Problema con php en header con formulario](http://es.stackoverflow.com/questions/23779/problema-con-php-en-header-con-formulario). – Alvaro Montoro Oct 26 '16 at 12:44

2 Answers2

1

Prueba a poner al inicio del archivo:

<?php
ob_start();
?>

y al final del mismo:

<?php
ob_end_flush();
?>

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();
?>
  • La respuesta va en el camino correcto, pero no explicas al OP por qué hacer lo que recomiendas, ni hablas de los posibles efectos secundarios. – jachguate Oct 26 '16 at 13:18
0

Prueba con esto:

header( "refresh:10; url=ruta.php" );

El tiempo de refresco es en segundos.

MHG
  • 1
  • 1