Recargar session [php]

shako

Buenas, aqui estoy devuelta con otra duda ^^

pos basicamente el problema que tengo es que en mi blog creado por mi en php desde 0

tengo 2 templates(uno oscuro y uno claro) y cuando el usuario selecciona una u otra se modifica un campo en la base de datos que al registrarse la sesion se coje de la base de datos y se guarda en la sesion, pero, y aqui esta mi problema, para que se carge esto el usuario tiene que cerrar sesion y volver a iniciar...

lo que busco es alguna funcion que me permita "actualizar" esa sesion

desde ya, muchas gracias

NeB1

lo único que puedes hacer es que nada más el usuario escoje un template haces:

if($_SESSION['template']!=$_POST['template_elegido']){
          $_SESSION['template']=$_POST['template_elegido'];
          $query=mysql_query("update from `usuario` SET `template` = '".$_POST['template_elegido']."' WHERE `user`='".$_SESSION['usuario']."'");
}

o eso, o un session_destroy -> session_start(); y volverle a meter las variables.

o un UNSET del campo que quieres eliminar, no sé.

Aunque es una solución muy sencilla que supongo que ya habrías encontrado tu si te valiese...

shako

pos rallandome un poco y complicandome por la cara por ahora me quedo con esto:

if (isset($_GET['style']))  {

if($_SESSION['estilo']!=$_GET['style']){
	  
	  if ( $conex = mysql_connect($db['host'] , $db['user'] , $db['pass']) ) {
	
			unset($_SESSION['estilo']);
			
			session_register("estilo");
			
			$_SESSION['estilo'] = $_GET['style'];
	
		$consulta =	
	  		
			"UPDATE `" .  $tabla['dbname'] ."`.`" .  $tabla['usuario'] ."` SET `estilo` = '" . $_GET['style'] . "' WHERE `" .  $tabla['usuario'] ."`.`id` ='$id' LIMIT 1;";
	  
	  mysql_query($consulta , $conex);	
		
		mysql_close($conex);
	}
}
Fr4nk0

Una vez hecho eso debes hacer una redirección a la misma página, para que cargue el nuevo template elegido (o hacer un formulario con un boton cuyo action sea la misma página) no?

Es que me interesa saber como lo has hecho al final, porque seguramente tenga que hacer algo de esto dentro de poco, y así puedo ahorrarme un poco de trabajo :P

NeB1

#4 pues sí, si no tiene nada de Ajax la web, simplemente añadir después de asignar el nuevo template a la sessión:

header('location:index.php');

Fr4nk0

Thanks #5.
Aunque depende de lo que hagas antes del header php, funcionará o no :P pero para lo que yo tengo pensado para hacerlo, funcionará :)

shako

lo q tengo son 2 estilos diferentes y como el script lo pongo arriba de todo, pos esto se ejecuta antes de elejir el estilo, asi no hay que recargar la pagina

el codigo que he puesto arriba y luego esto

<?php	
    if ($_SESSION['estilo'] == 1) {
		?>
		<link href="style.css" rel="stylesheet" type="text/css" />
		<?php
	}
	else if ($_SESSION['estilo'] == 2) {
		?>
		<link href="style2.css" rel="stylesheet" type="text/css" />
		<?php
	}
	else {
		?>
		<link href="style.css" rel="stylesheet" type="text/css" />
        <?php
		}
?>
Soltrac

no existen try catch y finally en PHP? En este ejemplo es una tontería y no pasa nada, pero para cosas más complejas e importantes, yo añadiría el UPDATE a un try y si fallara, revertiría los cambios en el catch.

Simplemente para que las variables en la sesión y lo q hay en la base de datos no sean diferentes.

NeB1

#6 -> puedes añadir un <meta refresh> en lugar del header:location, o como última opción, hacer

echo "<script language="text/javascript">window.location.href='index.php';</script>";

Por orden de compatibilidad: header:location > meta refresh >>> window.location. Aunque hoy en día cualquiera te vá a funcionar.

#8 no existe el try-> catch(E), pero puedes hacer:

   $query=mysql_query('update...');
   if(!$query){
       //Revierte los cambios y además:
       echo mysql_error();
   }
erdanblo

#9 Si existe.

NeB1

#10 no jodas xDD.

es verdad , lo toy leyendo a mismo.

La verdad es que nunca he hecho mucho uso de esto, aparte de los lenguages en los que te obliga a usarlo porque sus clases ya tienen definidas que lanzan excepciones.

La cuestión es, para que sirve esto? no es lo mismo hacer un echo con un mensaje de error y finalizar la ejecución del programa con un END o lo que sea?

shako

#11 pos creo que es mejor por que tardan menos en ejecutarse y tentran menos codigo...

SiCk

Si que existe try-catch, y es más, puedes lanzar una excepción en cualquier lugar (dentro de la ejecución del try) con throw New Exception( "mensaje" ) y prepararte una función genérica o más complicada en el catch.

Usuarios habituales

  • SiCk
  • shako
  • NeB1
  • erdanblo
  • Soltrac
  • Fr4nk0