Hola.
El código es bastante largo, voy a poner los trozos que yo creo que son problematicos.
En el archivo cperfil.php, donde tengoo el formulario, antes de nada tengo colocado esto:
Código PHP:
<?
ob_clean();
ob_start();
session_start();
include_once("class/db.class.php");
include_once("inc/comp.login.inc.php");
$con = new bd();
include_once("class/runtimes.class.php");
$u = new limitar;
?>
El archivo db.class.php es una clase para conexion con MySQL y no da problemas de ningún tipo.
El archivo comp.login.inc.php tiene esto:
Código PHP:
<?
session_start();
// Comprobador de login. Incluido en todas las paginas que requieran de seguridad.
$c = new bd();
// Buscamos en la base de datos un usuario que corresponda con los datos entregados
$user=mysql_query("SELECT id FROM usuarios_perfil WHERE id='".$_SESSION['id']."' && cookie='".$_SESSION['random']."'");
$r=mysql_fetch_array($user);
// Cargamos salud y carcel del usuario.
$carga=mysql_query("SELECT salud,carcel FROM usuarios_jugador WHERE id='".$_SESSION['id']."'");
$d=mysql_fetch_array($carga);
if (!$r["id"] || $_SESSION["random"] != $_COOKIE["Crimob"]) {
header("Location: logout.php");
} else {
// Comprobamos que el usuario no esté en la cárcel. Dentro de cargador.class.php se realizan las acciones correspondientes a cada caso.
if ($d["salud"] == 0) {
header("Location: dead.php?s=death");
}
// Comprobamos que el usuario no esté muerto (salud=0). Dentro de cargador.class.php se realizan las acciones correspondientes a cada caso.
if ($d["carcel"] != 0) {
header("Location: carcel.php?a=prison");
}
}
?>
Y el archivo runtimes.class.php, entre otras muchas cosas, tiene esto:
Código PHP:
//-----------------------------------------------------------------------------------------------------------------
// Método cambiar el perfil de un usuario. Puede cambiar el avatar, el email y la contraseña.
function changePerfil() {
// Conectamos con BD.
$c = new bd();
// Escapamos los caracteres que nos llegan.
$email=$c->e($_POST["email"]);
$an_passwd=$c->e($_POST["antigua_passwd"]);
$avatar=$c->e($_POST["avatar"]);
$npasswd=md5($c->e($_POST["npasswd"]));
// Buscamos la contraseña del usuario.
$user=mysql_query("SELECT passwd FROM usuarios_perfil WHERE id='".$_SESSION['id']."'");
$u=mysql_fetch_array($user);
// Si el campo contraseña antigua está en blanco, quiere decir que no quiere cambiar la contraseña.
if ($an_passwd == "" ) {
$query=mysql_query("UPDATE usuarios_perfil SET email='$email', avatar='$avatar' WHERE id='".$_SESSION['id']."'");
// generamos los mensajes.
$this->titulo="Correcto";
$this->mensaje="Perfil actualizado con éxito";
} elseif (md5($an_passwd) != $u["passwd"]) {
$this->titulo="Error";
$this->mensaje="La contraseña antigua no es correcta. Si no quieres cambiarla, déjala en blanco.";
} else {
$query=mysql_query("UPDATE usuarios_perfil SET email='$email', avatar='$avatar', passwd='$npasswd' WHERE id='".$_SESSION['id']."'");
// generamos los mensajes.
$this->titulo="Correcto";
$this->mensaje="Perfil actualizado con éxito";
}
// Liberamos memoria y cerramos conexiones.
$c->l($query);
$c->close();
}
Por supuesto todos los objetos están definidos y llamados correctamente dentro de cada archivo. Luego, dentro de cperfil.php, está header.php,menu.php y footer.php. Lo mas importante de cada uno es:
header.php
Código PHP:
<?
include_once("class/cargador.class.php");
$datos = new cargador();
?>
Y dentro de cargador un método de la clase cargador que carga determinados datos y los almacena en diferentes atributos de esa clase.
menu.php tiene un simple if:
Código PHP:
<?
if ($_SESSION['id']) {
?>
Con su else debajo y tal...
Y footer.php no dispone de código php, es todo html.
Espero haber aclarado un poco mi problema, pido disculpas.
Saludos y muchas gracias!!