Foros del Web » Programando para Internet » PHP »

Problema con Header

Estas en el tema de Problema con Header en el foro de PHP en Foros del Web. Hola. Llevo desde ayer revisando el código y no encuentro el error. Tengo una página para registrar unas cuentas en una base de datos, y ...
  #1 (permalink)  
Antiguo 07/11/2011, 08:16
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Problema con Header

Hola.

Llevo desde ayer revisando el código y no encuentro el error.

Tengo una página para registrar unas cuentas en una base de datos, y si la sentencia se ejecuta correctamente, el sistema debería llevarte a otra página automáticamente.

El problema es que al registrar los datos en la base de datos, no te lleva a la siguiente web, es como si actualizara la pagina, he probado a poner el header al principio del php, para comprobar si funciona, y en ese caso si que lleva instantáneamente al entrar en la web a otra distinta.

Pense que podía ser por los SQL, y los elimine, pero sigue sin funcionar.

Os dejo el código que utilizo:

Código PHP:
<?php
header
('Content-Type: text/html; charset=iso-8859-1');
require_once(
"funciones/config.php");
require_once(
"funciones/configuracion.php");
require 
'class.phpmailer.php';
$codigoproceso substrmd5(microtime()), 2020);
// Funciones - Mensajes Generales de PERFECTO
function system_message_verify $msg ){

    
header("Location: manage.php?id=system-message-verify&msg=".$msg.""); exit();

}
session_start();

if(!empty(
$_POST["security"])){

    if(
$_SESSION["security"]  != $_POST["security"]) { $errors[] = "<font color='red'>Codigo de verificación erroneo.</font>"; }

}

$security rand(10000100000);
$_SESSION["security"] = $security;



if(!empty(
$_POST["accountname"]) && !empty($_POST["password"]) && !empty($_POST["password2"]) && !empty($_POST["email"]) && $_POST["expansion"] != "" && !empty($_POST["security"])){

// Conexión MYSQL - NO editar
    
$mysql_connect mysqli_connect($mysql["host"], $mysql["username"], $mysql["password"], $mysql["puerto"]) or die("¡Ups! Hay un error, vuelve más tarde.");
    
mysqli_select_db($mysql_connect$mysql["realmd"]) or die("¡Ups! Hay un error, vuelve a intentarlo más tarde");
    
    
$post_accountname mysqli_real_escape_string($mysql_connecttrim(strtoupper($_POST["accountname"])));
    
$post_firstname mysqli_real_escape_string($mysql_connecttrim($_POST["firstname"]));
    
$post_lastname mysqli_real_escape_string($mysql_connecttrim($_POST["lastname"]));
    
$post_password mysqli_real_escape_string($mysql_connecttrim(strtoupper($_POST["password"])));
    
$post_password_final mysqli_real_escape_string($mysql_connectSHA1("".$post_accountname.":".$post_password.""));
    
$post_password2 trim(strtoupper($_POST["password2"]));
    
$post_email mysqli_real_escape_string($mysql_connecttrim($_POST["email"]));
    
$post_expansion mysqli_real_escape_string($mysql_connecttrim($_POST["expansion"]));
    
$post_sexo mysqli_real_escape_string($mysql_connecttrim($_POST["sexo"]));
    
$fecha time();
    
$timerecruit date("Y-m-d H:i:s",$fecha);
    
    
$check_account_query mysqli_query($mysql_connect"SELECT COUNT(*) FROM account WHERE username = '".$post_accountname."'");
    
$check_account_results mysqli_fetch_array($check_account_query);
    if(
$check_account_results[0]!=0){ $errors[] = "<font color='red'>La cuenta ya existe.</font>"; }
    if(
strlen($post_accountname) > 32) { $errors[] = "<font color='red'>La cuenta no debe pasar las 32 letras.</font>"; }
    if(
strlen($post_password) < 6) { $errors[] = "<font color='red'>La contraseña tiene que ser mayor de 6 letras.</font>"; }
    
    if(
strlen($post_accountname) < 3) { $errors[] = "<font color='red'>La cuenta tiene que ser mayor de 3 letras.</font>"; }
    if(
strlen($post_accountname) > 32) { $errors[] = "<font color='red'>La cuenta no debe pasar las 32 letras.</font>"; }
    if(
strlen($post_password) < 6) { $errors[] = "<font color='red'>La contraseña tiene que ser mayor de 6 letras.</font>"; }
    if(
strlen($post_password) > 32) { $errors[] = "<font color='red'>La contraseña no debe de ser mayor de 32 letras.</font>"; }
    if(
strlen($post_email) > 64) { $errors[] = "<font color='red'>El email no debe de ser mayor de 64 letras.</font>"; }
    if(
strlen($post_email) < 8) { $errors[] = "<font color='red'>El email debe de ser mayor de 8 letras.</font>"; }
    if(!
ereg("^[0-9a-zA-Z%]+$"$post_accountname)) { $errors[] = "<font color='red'>La cuenta tiene que estar bien escrita.</font>"; }
    if(!
ereg("^[0-9a-zA-Z%]+$"$post_password)) { $errors[] = "<font color='red'>La contraseña tiene que estar bien escrita.</font>"; }
    if(!
ereg("^[0-2%]+$"$post_expansion)) { $errors[] = "<font color='red'>Debes seleccionar una expansión para tu cuenta.</font>"; }
    if(
strlen($post_expansion) > 1) { $errors[] = "<font color='red'>Debes seleccionar al menos 1 expansión.</font>"; }
    if(
$post_accountname == $post_password) { $errors[] = "<font color='red'>La cuenta no puede ser igual que la contraseña.</font>"; }
    if(
$post_password != $post_password2) { $errors[] = "<font color='red'>Las contraseñas no coinciden.</font>"; }
    
    
    
    if(!
is_array($errors)){
    

        
        [
B]header('Location: http://www.example.com/');[/B]
    }
    
    
mysqli_close($mysql_connect);

}
¿Alguien sabe que ocurre?
  #2 (permalink)  
Antiguo 07/11/2011, 10:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Header

Creo que el problema es que deberías de contar, si $errors tiene elementos usando:
Código PHP:
Ver original
  1. if (count($errors) == 0) {
  2.          // rediriges
  3. }

Ya que de la otra forma nunca defines $errors como un array, y al tratar de usarlo, PHP te generará un NOTICE de que la variable no existe y por eso no redirige.
  #3 (permalink)  
Antiguo 07/11/2011, 12:52
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Header

Nada, no redirige a ningún sitio :S

He eliminado el "ereg" pensando que podría ser eso, ya que salía deprecated pero tampoco.
He añadido una SQL dentro del:

if (count($errors) == 0) {

Y sigue sin redirigid... ¿no hay otra forma de llevarte a otra página?

Última edición por Soir; 07/11/2011 a las 12:59
  #4 (permalink)  
Antiguo 07/11/2011, 13:01
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 9 meses
Puntos: 56
Respuesta: Problema con Header

Pues el error te lo dice, estas usando ereg que es una funcion obsoleta, como alternativa a ella tienes preg_match.

Pero deberias aparte ir haciendo echo a las variables a ver que datoste pasan.

Por cierto intenta quitar esto:

"header('Location: http://www.example.com/'); " es decir las B /B

Asi:

header('Location: http://www.example.com/');
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.

Última edición por CesarHC; 07/11/2011 a las 13:06 Razón: Una ideilla
  #5 (permalink)  
Antiguo 07/11/2011, 13:21
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Header

Quite los ereg y cambie la parte del header, añadir una sql para ver si funciona bien:

Código PHP:
<?php
error_reporting
(E_ALL);
ini_set('display_errors''1');
?>
<?php
header
('Content-Type: text/html; charset=iso-8859-1');
require_once(
"funciones/config.php");
require_once(
"funciones/configuracion.php");
require 
'class.phpmailer.php';
$codigoproceso substrmd5(microtime()), 2020);
// Funciones - Mensajes Generales de PERFECTO
function system_message_verify $msg ){

    
header("Location: manage.php?id=system-message-verify&msg=".$msg.""); exit();

}
session_start();

if(!empty(
$_POST["security"])){

    if(
$_SESSION["security"]  != $_POST["security"]) { $errors[] = "<font color='red'>Codigo de verificación erroneo.</font>"; }

}
$security rand(10000100000);
$_SESSION["security"] = $security;
if(!empty(
$_POST["accountname"]) && !empty($_POST["password"]) && !empty($_POST["password2"]) && !empty($_POST["email"]) && $_POST["expansion"] != "" && !empty($_POST["security"])){

// Conexión MYSQL - NO editar
    
$mysql_connect mysqli_connect($mysql["host"], $mysql["username"], $mysql["password"]) or die("¡Ups! Hay un error, vuelve más tarde.");
    
mysqli_select_db($mysql_connect$mysql["realmd"]) or die("¡Ups! Hay un error, vuelve a intentarlo más tarde");
    
    
$post_accountname mysqli_real_escape_string($mysql_connecttrim(strtoupper($_POST["accountname"])));
    
$post_firstname mysqli_real_escape_string($mysql_connecttrim($_POST["firstname"]));
    
$post_lastname mysqli_real_escape_string($mysql_connecttrim($_POST["lastname"]));
    
$post_password mysqli_real_escape_string($mysql_connecttrim(strtoupper($_POST["password"])));
    
$post_password_final mysqli_real_escape_string($mysql_connectSHA1("".$post_accountname.":".$post_password.""));
    
$post_password2 trim(strtoupper($_POST["password2"]));
    
$post_email mysqli_real_escape_string($mysql_connecttrim($_POST["email"]));
    
$post_expansion mysqli_real_escape_string($mysql_connecttrim($_POST["expansion"]));
    
$post_sexo mysqli_real_escape_string($mysql_connecttrim($_POST["sexo"]));
    
$fecha time();
    
$timerecruit date("Y-m-d H:i:s",$fecha);
    
    
$check_account_query mysqli_query($mysql_connect"SELECT COUNT(*) FROM account WHERE username = '".$post_accountname."'");
    
$check_account_results mysqli_fetch_array($check_account_query);
    if(
$check_account_results[0]!=0){ $errors[] = "<font color='red'>La cuenta ya existe.</font>"; }
    if(
strlen($post_accountname) > 32) { $errors[] = "<font color='red'>La cuenta no debe pasar las 32 letras.</font>"; }
    if(
strlen($post_password) < 6) { $errors[] = "<font color='red'>La contraseña tiene que ser mayor de 6 letras.</font>"; }
    
    if(
strlen($post_accountname) < 3) { $errors[] = "<font color='red'>La cuenta tiene que ser mayor de 3 letras.</font>"; }
    if(
strlen($post_accountname) > 32) { $errors[] = "<font color='red'>La cuenta no debe pasar las 32 letras.</font>"; }
    if(
strlen($post_password) < 6) { $errors[] = "<font color='red'>La contraseña tiene que ser mayor de 6 letras.</font>"; }
    if(
strlen($post_password) > 32) { $errors[] = "<font color='red'>La contraseña no debe de ser mayor de 32 letras.</font>"; }
    if(
strlen($post_email) > 64) { $errors[] = "<font color='red'>El email no debe de ser mayor de 64 letras.</font>"; }
    if(
strlen($post_email) < 8) { $errors[] = "<font color='red'>El email debe de ser mayor de 8 letras.</font>"; }
    if(
strlen($post_expansion) > 1) { $errors[] = "<font color='red'>Debes seleccionar al menos 1 expansión.</font>"; }
    if(
$post_accountname == $post_password) { $errors[] = "<font color='red'>La cuenta no puede ser igual que la contraseña.</font>"; }
    if(
$post_password != $post_password2) { $errors[] = "<font color='red'>Las contraseñas no coinciden.</font>"; }
    
    
    
    if (
count($errors) == 0) {
    
$query_seleccionar_nombre mysqli_query($mysql_connect"INSERT INTO account (username, sha_pass_hash, email, last_ip, locked, expansion, recruiter) VALUES ('".$post_accountname."', '".$post_password_final."', '".$post_email."', '127.0.0.1', '1', '".$post_expansion."', 0)") or die(mysqli_error($mysql_connect));
        
header('Location: http://www.example.com/');
    }
    
    
mysqli_close($mysql_connect);

}
La SQL se mete sin problemas, pero no funciona el header, ya no se que hacer! :S
  #6 (permalink)  
Antiguo 07/11/2011, 13:29
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 9 meses
Puntos: 56
Respuesta: Problema con Header

Muestranos que te llega a $errors.
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.
  #7 (permalink)  
Antiguo 07/11/2011, 13:39
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Header

Que me llega a errors?

function error_msg(){

global $errors;

if(is_array($errors)){

foreach($errors as $msg){

echo '<div class="errors">'.$msg.'</div>';

}

}

}
  #8 (permalink)  
Antiguo 07/11/2011, 13:42
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 9 meses
Puntos: 56
Respuesta: Problema con Header

Pues compañero me refiero al $errors, que paree ser la causa de tu problema.

Código PHP:
Ver original
  1. if (count($errors) == 0) {
  2.    
  3. $query_seleccionar_nombre = mysqli_query($mysql_connect, "INSERT INTO account (username, sha_pass_hash, email, last_ip, locked, expansion, recruiter) VALUES ('".$post_accountname."', '".$post_password_final."', '".$post_email."', '127.0.0.1', '1', '".$post_expansion."', 0)") or die(mysqli_error($mysql_connect));
  4.         header('Location: http://www.example.com/');
  5.     }
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.
  #9 (permalink)  
Antiguo 07/11/2011, 13:48
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Header

Esque a errors no llega nada, se ejecuta todo sin problemas, la sentencia sql se mete correctamente en la base de datos, pero el header no funciona, y debería hacerlo si se ejecuta la sql correctamente.
:S
  #10 (permalink)  
Antiguo 07/11/2011, 13:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Header

Revisa que efectivamente $errors sea un array de 0 elementos, poniendo un echo o algo similar, antes del header y verifica que este entrando.

Saludos.
  #11 (permalink)  
Antiguo 07/11/2011, 13:59
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Header

He puesto un echo con un count y no se muestra nada, ni la palabra "Errores" ni nada. Así que supongo que el problema está por ahí.

Código PHP:
if(!is_array($errors)){
    
$query_seleccionar_nombre mysqli_query($mysql_connect"INSERT INTO account (username, sha_pass_hash, email, last_ip, locked, expansion, recruiter) VALUES ('".$post_accountname."', '".$post_password_final."', '".$post_email."', '127.0.0.1', '1', '".$post_expansion."', 0)") or die(mysqli_error($mysql_connect));
        
$query_seleccionar_id mysqli_query($mysql_connect"SELECT id FROM account WHERE username = '".$post_accountname."'") or die(mysqli_error($mysql_connect));
        
$results_seleccionar_id mysqli_fetch_array($query_seleccionar_id);
        
mysqli_query($mysql_connect"INSERT INTO account_datos (id, nombre, apellidos, sexo, reclutador, donador) VALUES ('".$results_seleccionar_id["id"]."', '".$post_firstname."', '".$post_lastname."', '".$post_sexo."', 0, 0)");
        
mysqli_query($mysql_connect"INSERT INTO dam_procesos (proceso, idcuenta) VALUES ('".$_POST["codigoproceso"]."', '".$results_seleccionar_id["id"]."')");
        echo 
'Errores: '.count($errors).'';
        
header('Location: http://www.example.com/');
    } 
  #12 (permalink)  
Antiguo 07/11/2011, 14:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Header

En ese caso no esta entrando a ese if, realiza un var_dump($errors) antes del if y ve que es lo que se guarda.

Saludos.
  #13 (permalink)  
Antiguo 07/11/2011, 14:12
Avatar de Soir  
Fecha de Ingreso: marzo-2011
Mensajes: 40
Antigüedad: 13 años
Puntos: 1
Respuesta: Problema con Header

Tampoco se muestra nada :S
  #14 (permalink)  
Antiguo 07/11/2011, 16:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema con Header

Si lo pones antes del if, al menos se debería de mostrar array(0), si no lo hace entonces tienes un problema en tu instalación de PHP, y deberías tratar de instalarlo de las fuentes oficiales de PHP...

Etiquetas: header, html, mysql, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:24.