Foros del Web » Programando para Internet » PHP »

Catchable Fatal Error [Ayuda]

Estas en el tema de Catchable Fatal Error [Ayuda] en el foro de PHP en Foros del Web. Hola, tengo un formulario en donde solicito usuario y contraseña, en este (si los datos son correctos): Código: $check_user = mysql_query("SELECT * FROM users WHERE ...
  #1 (permalink)  
Antiguo 28/10/2010, 15:44
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 13 años, 7 meses
Puntos: 3
Pregunta Catchable Fatal Error [Ayuda]

Hola, tengo un formulario en donde solicito usuario y contraseña, en este (si los datos son correctos):

Código:
$check_user = mysql_query("SELECT * FROM users WHERE user='".mysql_escape_string($user)."' AND pass='".mysql_escape_string($pass)."' ");
Me genera 3 sesiones:
Código:
session_register("rank");
session_register("logged");
session_register("user");
$_SESSION['rank'] = $user_exists['rank'];
$_SESSION['logged'] = "yes";
$_SESSION['user'] = $user;
$user_exists viene de una peticion con mysql_fetch_assoc (Ya intente con object y me sigue dando el mismo error), el problema es que se supone que solo me guarde el campo "rank" de la tabla en la session y me guarda solo "NULL", es lo que sale, lo raro es que:

Cuando ingreso los datos primero si me sale todo bien, una vez que le doy f5 o parecido tengo un switch en donde depende que rango sea el usuario es lo que mostrará (menu y enviar mensaje) y al darle f5 como mencione anteriormente la session al parecer pierde su valor y solo me muestra los mensajes pero no el menu ni el campo de enviar.

Espero me ayuden, saludos.

P.D. Cuando intento hacer un echo a $_SESSION['rank'] me aparece esto:
Cita:
Catchable fatal error: Object of class stdClass could not be converted to string in C:\AppServ\www\index.php on line 3
Editado:
-----------------------------

Cuando ingreso y los datos son correctos hago un "echo $_SESSION['rank']" y me tira "user" y me muestra todo correcto, pero como tengo un redirect para que tome el index.php el valor de la session y si esta logeado me muestre otra cosa, ahi es cuando me da problemas, les dejo parte del codigo:

Código:
<?
include("lib/classes.php");
include("lib/config.php");
$connect = new dbconnect();
$connect->connect("****","****","*****","****");
$encryption = new encryption();
//Sendin' msg
$mod = $_GET['act'];
	if(!empty($mod)){
		switch($mod){
			case "register":
			@include("lib/register.php");
			break;
			case "logout":
			if(!empty($_SESSION['logged'])){
			session_destroy();
			echo "<script>alert('Te has desconectado correctamente');</script>";
			echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=?">';
			}else{
			echo "<script>alert('No te puedes desconectar porque no estas logeado');</script>";
			echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=?">';
			}
			break;
			default;
			echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=?">';
		}
	}else{
if (isset($_POST['send'])){
$msg = strip_tags($_POST['msg']);
$ip = $_SERVER[REMOTE_ADDR];
	if ((strlen($msg) > $max_msg) or (strlen($msg) < $min_msg)){
	$error = "<div style='text-align:justify;;background:red;color:white;line-height:1em;'>
	El mensaje tiene que tener mínimo ".$min_msg." carácteres y máximo ".$max_msg." carácteres.
	</div>";
	}else{
	$user = $_SESSION['user'];
	$web = mysql_query("SELECT * FROM users WHERE user='".mysql_escape_string($user)."' ");
		if($web_exists = mysql_fetch_object($web)){
		$web = $web_exists->web;
		}else{
		$web = "#";
		}
	$insert = mysql_query("INSERT INTO comments (user,msg,web,ip,date) values (
	'".mysql_escape_string($_SESSION['user'])."',
	'".mysql_escape_string($msg)."',
	'".mysql_escape_string($web)."',
	'".mysql_escape_string($ip)."',
	'".mysql_escape_string($date)."'
	)");
	}
}
if(isset($_POST['login'])){
$user = strip_tags($_POST['user']);
$pass = strip_tags($_POST['pass']);
$pass = $encryption->encrypt($pass,$code);
$check_user = mysql_query("SELECT * FROM users WHERE user='".mysql_escape_string($user)."' AND pass='".mysql_escape_string($pass)."' ");
	if($user_exists = mysql_fetch_assoc($check_user)){
	session_register("rank");
	session_register("logged");
	session_register("user");
	$_SESSION['rank'] = "user";
	$_SESSION['logged'] = "yes";
	$_SESSION['user'] = $user;
	$error = "<div style='text-align:justify;;background:red;color:white;line-height:1em;'>Bienvenido, en unos momentos serás redirigído.</div>";
	echo $_SESSION['rank'];
	/*echo '<META HTTP-EQUIV=Refresh CONTENT="2; URL=?">';*/
	}else{
	$error = "<div style='text-align:justify;;background:red;color:white;line-height:1em;'>Los datos proporcionados son incorrectos</div>";
	}
}
	$rank = $_SESSION['rank'];
		switch($rank){
		case "":
		$menu = "Registrar cuenta<br /><a href='?act=register' target='_blank'><img src='img/register_account.png' border='0'></a>";
		$send = "<div style='font-size:12px;'>
		<form action='' method='POST'>".$error."
		<input type='text' size='30' onFocus=\"if (this.value == 'Usuario') {
		this.value=''}\" onBlur=\"if(this.value == ''){ this.value='Usuario'}\" value='Usuario' name='user' >
		<input type='password' size='30' onFocus=\"if (this.value == '********') {
		this.value=''}\" onBlur=\"if(this.value == ''){ this.value='********'}\" value='********' name='pass'><br />
		<input type='submit' name='login' value='Entrar'>
		</form>
		</div>";
		break;
		
		case "user":
		echo "Adada";
		$menu = "<div style='font-size:12px;'>Perfil | Editar | Ayuda | <a href='?act=logout'>Salir</a></div>";
		$send = "<div style='font-size:12px;'>
		<form action='' method='POST'>
		".$error."
		<textarea name='msg' cols='30' rows='3'onFocus=\"if (this.value == 'Mensaje') {
		this.value=''}\" onBlur=\"if(this.value == ''){ this.value='Mensaje'}\">Mensaje</textarea><br />
		<input type='submit' name='send' value='Enviar'>
		</form>
		</div>";
		break;
		
		case "admin":
		$menu = "<div style='font-size:12px;'>Perfil | Editar | Administrar | Ayuda | <a href='?act=logout'>Salir</a></div>";
		$send = "<div style='font-size:12px;'>
		<form action='' method='POST'>
		".$error."
		<textarea name='msg' cols='30' rows='3'onFocus=\"if (this.value == 'Mensaje') {
		this.value=''}\" onBlur=\"if(this.value == ''){ this.value='Mensaje'}\">Mensaje</textarea><br />
		<input type='submit' name='send' value='Enviar'>
		</form>
		</div>";
		break;
		
		default;
		echo "test";
		break;
	}

?>
<body>
<div id="container">
	<div id="header"><div style="margin-top:5px;">ZO Chat v1.0 Registered Version</div></div>
	<div id="panel"><? echo $menu; ?></div>
    <div id="show"><div style="margin-left:5px;margin-right:5px;">
	<div id="msg"><? include("lib/show_msg.php");	?></div>
    </div></div>
    <div id="send"><? echo $send; ?></div>
    <div id="footer"><div style="margin-top:5px;">*****</div></div>
</div>
</body>
</html>
<? } ?>
Al darle un var_dump() a $_SESSION me acabo de dar cuenta de que todos los valores de la base de datos me los almacena en sesiones :S!

Última edición por kh0d3x; 28/10/2010 a las 15:54
  #2 (permalink)  
Antiguo 28/10/2010, 16:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Catchable Fatal Error [Ayuda]

Al parecer es por las sesiones que las tengo mal, pero no se de donde toma todos los valores de la base de datos para guardarlo en $_SESSION['rank'] ;S!
  #3 (permalink)  
Antiguo 28/10/2010, 16:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Catchable Fatal Error [Ayuda]

¿Tienes el register_globals activado en tu php.ini?

Saludos.
  #4 (permalink)  
Antiguo 28/10/2010, 16:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Catchable Fatal Error [Ayuda]

Cita:
Iniciado por GatorV Ver Mensaje
¿Tienes el register_globals activado en tu php.ini?

Saludos.
register_globals On On

Si estan on, pero no se que puede suceder, ya cambie el object por assoc y array, ya movi de lugar los issets creyendo que me daban error, ya cambie el switch por if y elseif, pero es raro porque cuando ingreso los datos me sale TODO CORRECTAMENTE, pero como tengo un redirect para cuando ingresen los rediriga de nuevo al inicio y asi me tome ya el valor si es user o admin y muestre pues obviamente un menu para su respectivo rango, al hacer ese redirect solo me muestra "TITULO", "MENSAJES QUE SE HAN ENVIADO", "FOOTER"... y cuando ingreso por primera vez me muestra "TITULO", "MENU", "MENSAJES QUE SE HAN ENVIADO", "ENVIAR MENSAJE", "FOOTER", no se que suceda, un mal manejo de las sesiones, creeme que antes de atreverme a pregutnar aca lo revise ya muchas veces y no lo logre..
  #5 (permalink)  
Antiguo 28/10/2010, 16:48
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Catchable Fatal Error [Ayuda]

Perdon por el doble post pero creo que el error es este:

Ingresas y te muestra todo y al hacer la redireccion al parecer la sesion 'rank' pierde o se modifica su valor y es cuando no hace lo que quiero.

Código:
$rank = $_SESSION['rank'];
if($rank == "user"){
$menu = "<div style='font-size:12px;'>Perfil | Editar | Ayuda | <a href='?act=logout'>Salir</a></div>";
}elseif($rank == "admin"){		
$menu = "<div style='font-size:12px;'>Perfil | Editar | Administrar | Ayuda | <a href='?act=logout'>Salir</a></div>";
}
Al ingresar datos:


Al redirigir:


Como se dan cuenta, al ingresar datos si se guarda la sesion rank y como en este caso es user me muestra el valor de cuando la sesion rank equivale a user, pero al redirigir al parecer esa sesion pierde el valor (algo asi) y no me muestra el menu, cuando ingresan se crean 3 sesiones, user, logged y rank, y cuando las muestro:

Código:
echo $_SESSION['user']."<br />".$_SESSION['logged']."<br />".$_SESSION['rank'];
La sesion user y logger si me da los valores, pero el rank me tira:

Cita:
Catchable fatal error: Object of class stdClass could not be converted to string in C:\AppServ\www\projects\zafiroprojects\Web_2\relea ses\chat_registered\show.php on line 115
Ya intente ponerle $_SESSION['rank'] = "user" para no hacer uso de ninguna peticion de la base de datos y aun asi me tira el error, saludos.
  #6 (permalink)  
Antiguo 28/10/2010, 19:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Catchable Fatal Error [Ayuda]

El problema con el register_globals en On es que si tu defines una variable $rank en tu código esta va a ser un apuntador directo a $_SESSION['rank'] revisa que no estes usando la variable $rank en tu código, o mejor desactiva register_globals.

Saludos.
  #7 (permalink)  
Antiguo 28/10/2010, 19:54
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Catchable Fatal Error [Ayuda]

Hola
el error

Catchable fatal error: Object of class stdClass could not be converted to string in C:\AppServ\www\projects\zafiroprojects\Web_2\relea ses\chat_registered\show.php on line 115

es porque estas tratando de convertir un objeto a un string como tal,
pregunto entonces, como viene $_SESSION['rank']? es decir,
si haces un print_r de esa variable que te muestra??

por otro lado, tienes session_start(); en la página que recibe los datos?
prueba y comenta
saludos
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #8 (permalink)  
Antiguo 29/10/2010, 22:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 48
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Catchable Fatal Error [Ayuda]

Creo que el problema era que me metia todos los valores de la peticion de la DB (el objecto) a la session RANK, al final decidí "ingeniermelas" y crear el admin panel por separado, pero ambos tienen razón, por un lado el register_globals jodía y por otro queria pasar de objecto a string, gracias por la solución.

p.d: si tengo session_start() obviamente, inclusive intente con session_start("test");, saludos.

Etiquetas: fatal
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 04:40.