Problema a setear cookies

Lopezito Seguir

Zeta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
13 Dic 2011
Mensajes
1.515
Buenas gente.
Estoy tratando de crear un login, pero al logearme me salta el siguiente error:

Insertar CODE, HTML o PHP:
Warning: Cannot modify header information - headers already sent by (header.php:6) in file.php on line 53

Warning: Cannot modify header information - headers already sent by (header.php:6) in file.php on line 54

La parte de código vendría a ser:

PHP:
    if($verif){ 
        if (isset($_POST['recuerdame'])) {
        $tiempo = time()+31536000;
            setcookie('nickclasi25', $_POST['nick'], $tiempo);
            setcookie('passclasi25', md5($_POST['password']), $tiempo);
        } else {
            setcookie('nickclasi25', $_POST['nick'], false);
            setcookie('passclasi25', md5($_POST['password']), false);
        }
    } else {
        echo '<div class="error">El usuario y la contraseña no coinciden</div>';
    }

Las lineas de error son las setcookie();
¿Qué es lo que estoy haciendo mal?
Saludos.
 

sondeoh

Eta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
23 Nov 2012
Mensajes
1.411
Pon arriba de todo un

ob_start();


Y al final de todo

ob_end_flush();

Más info en php.net
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.101
Buenas gente.
Estoy tratando de crear un login, pero al logearme me salta el siguiente error:

Insertar CODE, HTML o PHP:
Warning: Cannot modify header information - headers already sent by (header.php:6) in file.php on line 53

Warning: Cannot modify header information - headers already sent by (header.php:6) in file.php on line 54

La parte de código vendría a ser:

PHP:
    if($verif){ 
        if (isset($_POST['recuerdame'])) {
        $tiempo = time()+31536000;
            setcookie('nickclasi25', $_POST['nick'], $tiempo);
            setcookie('passclasi25', md5($_POST['password']), $tiempo);
        } else {
            setcookie('nickclasi25', $_POST['nick'], false);
            setcookie('passclasi25', md5($_POST['password']), false);
        }
    } else {
        echo '<div class="error">El usuario y la contraseña no coinciden</div>';
    }

Las lineas de error son las setcookie();
¿Qué es lo que estoy haciendo mal?
Saludos.

el problema es que no podes setear cookies si ya enviaste HTML... el seteo de cookies se hace antes de enviar cualkier code html.
 

ecoal95

Gamma
Programador
Desde
1 Sep 2012
Mensajes
243
Gracias.
Mil gracias :drunk:

A ver, eso funciona, pero el problema es el que dice [MENTION=24748]Click[/MENTION]ow

Con ob_start y ob_end_flush lo que haces es evitar enviar el html mientras se ejecuta (lo almacenas en un buffer) y soltarlo al final, por lo que el código funciona. Pero deberías buscar donde está esa salida de datos, porque te puede dar más problemas.
 

Lopezito

Zeta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
13 Dic 2011
Mensajes
1.515
[MENTION=9679]cicklow[/MENTION] y [MENTION=28190]ecoal95[/MENTION]

No entendí como debería de ir, mi código de login:

login.php

PHP:
<?php
if($_GET['submit'] == 'true'){
if(isset($_POST['nick']) && isset($_POST['password'])){
global $url;
    conmysql();
    $verif = mysql_query("SELECT * FROM usuarios WHERE nick='".htmlentities($_POST['nick'])."' and password='".md5($_POST['password'])."'");
    if($verif){ 
        if (isset($_POST['recuerdame'])) {
        $tiempo = time()+31536000;
            setcookie('nickclasi25', $_POST['nick'], $tiempo);
            setcookie('passclasi25', md5($_POST['password']), $tiempo);
        } else {
            setcookie('nick', $_POST['nick'], false);
            setcookie('passclasi25', md5($_POST['password']), false);
        }
        header('Location: '.$url);
    } else {
        echo '<div class="error">El usuario y la contraseña no coinciden</div>';
    }
    descmysql();
    
} else {
    echo '<div class="error">Complete todo el formulario.</div>';
}
}
?>
<form action="<?php echo url(''); ?>?action=ingresar&submit=true" method="POST" class="regform">
<p>Nick: <input type="text" name="nick" required="required" /></p>
<p>Contraseña: <input type="password" name="password" required="required" /></p>
<p style="float: left;margin-left: 155px;">Recuerdame: <input type="checkbox" name="recuerdame" /></p>
<input type="submit" value="Conectarse" />
</form>
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.101
[MENTION=9679]cicklow[/MENTION] y [MENTION=28190]ecoal95[/MENTION]

No entendí como debería de ir, mi código de login:

login.php
vos aca nos mostras el codigo completo o falta? porque a simple vista no tiene que darte error.
 

Lopezito

Zeta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
13 Dic 2011
Mensajes
1.515
vos aca nos mostras el codigo completo o falta? porque a simple vista no tiene que darte error.

Emm es el código de login.php
Ya que tengo separado las cosas, pero este es mi código donde incluyo ese código:

PHP:
<?php
ob_start();
get_header();
?>
<section class="left">
<?php
if($_GET['action'] == 'registrarse'){
include 'reg.php';
} else if($_GET['action'] == 'ingresar' && !isset($_COOKIE['nickclasi25'])){
include 'login.php';
} else if($_GET['action'] == 'post' && isset($_GET['idpost'])){
include 'post.php';
} else {
include 'loop.php';
}
?>
</section>
<aside class="sidebar">
</aside>
<?php
get_footer();
ob_end_flush();
?>

Además, como borro las cookies?
Saludos.
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.101
Emm es el código de login.php
Ya que tengo separado las cosas, pero este es mi código donde incluyo ese código:

PHP:
<?php
ob_start();
get_header();
?>
<section class="left">
<?php
if($_GET['action'] == 'registrarse'){
include 'reg.php';
} else if($_GET['action'] == 'ingresar' && !isset($_COOKIE['nickclasi25'])){
include 'login.php';
} else if($_GET['action'] == 'post' && isset($_GET['idpost'])){
include 'post.php';
} else {
include 'loop.php';
}
?>
</section>
<aside class="sidebar">
</aside>
<?php
get_footer();
ob_end_flush();
?>

Además, como borro las cookies?
Saludos.

pues bueno a simple vista ya metiste html
Insertar CODE, HTML o PHP:
<section class="left">

para eliminar la cookie es:
PHP:
setcookie('nickclasi25', $_POST['nick'], -$tiempo);
 

Lopezito

Zeta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
13 Dic 2011
Mensajes
1.515
pues bueno a simple vista ya metiste html
Insertar CODE, HTML o PHP:
<section class="left">

para eliminar la cookie es:
PHP:
setcookie('nickclasi25', $_POST['nick'], -$tiempo);

Pero si quito la sección quedaría fuera de lugar los formularios, debería incluir en otro archivo el inicio de la sección, por ejemplo, en el archivo de la cabecera?
 

Cicklow

Admin
Dseda
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Suscripción a IA
Desde
30 May 2011
Mensajes
1.101
Pero si quito la sección quedaría fuera de lugar los formularios, debería incluir en otro archivo el inicio de la sección, por ejemplo, en el archivo de la cabecera?

podrias verificar y setear las cookies en el header arriba del todo... o redireccionar a un login.php y ese file solo tiene PHP. y tmb creas un logout.php con la eliminacion de las cookies.
en el login.php si los datos estan bien, seteas las cookies y dsp redireccionas a donde kieras. si dio mal los datos redireccionas a donde pedis el login + un aviso. ejemplo file.php?error=login
tons
PHP:
<?php
if($_GET['error']=="login"){
echo 'tus datos estan mal!';
}
?>
 

Lopezito

Zeta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
13 Dic 2011
Mensajes
1.515
podrias verificar y setear las cookies en el header arriba del todo... o redireccionar a un login.php y ese file solo tiene PHP. y tmb creas un logout.php con la eliminacion de las cookies.
en el login.php si los datos estan bien, seteas las cookies y dsp redireccionas a donde kieras. si dio mal los datos redireccionas a donde pedis el login + un aviso. ejemplo file.php?error=login
tons
PHP:
<?php
if($_GET['error']=="login"){
echo 'tus datos estan mal!';
}
?>

Ok, el código un poco más separado :drunk:
Gracias por su atención.
Saludos.:rolleyes:
 
Arriba