Foros del Web » Programando para Internet » PHP »

Problema con sesiones en linux

Estas en el tema de Problema con sesiones en linux en el foro de PHP en Foros del Web. Hola, veris tengo un scrip que funciona perfectamente en windows, mientras que en linux me falla en las sesiones y no se el motivo, aunque ...
  #1 (permalink)  
Antiguo 14/09/2011, 20:31
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Problema con sesiones en linux

Hola, veris tengo un scrip que funciona perfectamente en windows, mientras que en linux me falla en las sesiones y no se el motivo, aunque probablemente sea quizas la configuración de apache o php.

Por ejemplo esto funcionaria

Código PHP:
if (isset($_POST["Enviar"]))
    {
    
$contador=$_POST["contador"];
        echo 
$maxpreg//No muestra nada por pantalla a pesar de que le asigne la session
        
echo "<br>";
        echo 
$_SESSION["maxpreg"]; //muestra el resultado
    
    //echo $datos[$contador];
    
echo "<br>";
    echo 
$contador;
    
//echo "<br>";
    //echo $maxpreg;
    
        //SE SIGUE EJCUTANDO EL TES SIEMPRE QUE EL CONTADOR VALGA MENOS O LO MISMO QUE EL NUMERO DE PREGUNTAS MAXIMAS QUE HALLA EN LA BASE DE DATOS DEL TEST
        
        
if ($contador $_SESSION["maxpreg"])
        {
                 echo 
"Hola";
        
$pregunta=mysql_query("select * from preguntas where IdPreg='$datos[$contador]'");        //Seleccionamos la pregunta que marque el contador
        
$respuestas=mysql_query("select * from respuestas where IdPreg='$datos[$contador]'");    //Seleccionamos las respuestas para la pregunta correspondiente al contador
,
,                            


pero esto otro no:

Código PHP:
if (isset($_POST["Enviar"]))
    {
    
$contador=$_POST["contador"];
        echo 
$maxpreg//No muestra nada por pantalla a pesar de que le asigne la session
        
echo "<br>";
        echo 
$_SESSION["maxpreg"]; //muestra el resultado
    
    //echo $datos[$contador];
    
echo "<br>";
    echo 
$contador;
    
//echo "<br>";
    //echo $maxpreg;
    
        //SE SIGUE EJCUTANDO EL TES SIEMPRE QUE EL CONTADOR VALGA MENOS O LO MISMO QUE EL NUMERO DE PREGUNTAS MAXIMAS QUE HALLA EN LA BASE DE DATOS DEL TEST
        
        
if ($contador $maxpreg//A PARTIR DE AQUI YA NO MUESTRA NADA!! 
        
{
                 echo 
"Hola";
        
$pregunta=mysql_query("select * from preguntas where IdPreg='$datos[$contador]'");        //Seleccionamos la pregunta que marque el contador
        
$respuestas=mysql_query("select * from respuestas where IdPreg='$datos[$contador]'");    //Seleccionamos las respuestas para la pregunta correspondiente al contador
.                            
.

Y eso a pesar de que asigne variable a la sesión previamente:

Código PHP:
if (empty($_POST["Enviar"]))
    {
    
$_SESSION["titulo"]=$_GET["titulo"]; //La variable t�tulo es la que le hemos pasado a trav�s de la p�gina princiap, la cual procedemos a guardarla en una sesi�n para    
    
$_SESSION["respcorrecta"]=0;
    
$datos=array();
    
$sql=mysql_query("select * from preguntas where IdTema='$_GET[id]'");
    
    
        while(
$result mysql_fetch_array($sql))
        {
        
$datos[]=$result['IdPreg']; //Aqu� lo que hacemos es guardar en una variable de tipo array el resultado de la consulta, es decir el indice de las preguntas 
        
}
    
    
    
$_SESSION["datos"]=$datos//Necesitamos crear una sesi�n con los datos ya que usaremos esa variable varias veces
    
$datos=$_SESSION["datos"];
//A PARTIR DE AQUI SE ASIGNA VARIABLE DESPUES DE CREAR SESION PERO NO LA COGE !!

    
$_SESSION["maxpreg"] = count($datos); //Aqu� contamos el n�mero de preguntas que temeos en la base de datos por el tema elegido por el usuarios
    
$maxpreg=$_SESSION["maxpreg"];    //A continuaci�n lo guardamos en una variable que usaremos luego        
    
shuffle($datos);
.
.

Es extraño que funcione en windows pero no en linux.
  #2 (permalink)  
Antiguo 14/09/2011, 20:49
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones en linux

puede ser que la directiva register globals la tienes ON en windows y en linux la tienes OFF. Verifica eso en tu php.ini o phpinfo y te recomiendo que si está OFF la dejes así ya que es obsoleta.

Tampoco veo la necesidad de asignarlo a una variable.

Prueba y nos cuentas mil disculpas si me equivoco, pero pienso que es eso. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 14/09/2011 a las 20:55
  #3 (permalink)  
Antiguo 14/09/2011, 21:29
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: Problema con sesiones en linux

Los tengo en off y lo he cambiado a on, pero sigue estando igual. He reiniciado apache, ¿hay que hacer algo más?

De todas formas lo asignar una variable lo necesito por la consulta, ya que sino no se como ponerla:

$pregunta=mysql_query("select * from preguntas where IdPreg='$datos[$contador]'"); //Seleccionamos la pregunta que marque el contador
$respuestas=mysql_query("select * from respuestas where IdPreg='$datos[$contador]'");

Que viene de aqui:

while($result = mysql_fetch_array($sql))
{
$datos[]=$result['IdPreg']; //Aqu� lo que hacemos es guardar en una variable de tipo array el resultado de la consulta, es decir el indice de las preguntas
}


$_SESSION["datos"]=$datos; //Necesitamos crear una sesi�n con los datos ya que usaremos esa variable varias veces
$datos=$_SESSION["datos"];
  #4 (permalink)  
Antiguo 14/09/2011, 23:22
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Problema con sesiones en linux

mmm pensaba en register globals, pero quien sabe como es tu código completo, pero el cuento va por ahi. Asigna la sesión a la variable cuando la necesites no cuando la crees, a ver como te va. si puedes colocar tu código completo estaría mejor para no estar adivinando. Deberías asignar la sesión a la variable en el momento que la necesites no cuando la crees. La sesión es la que funciona como superglobal.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 14/09/2011 a las 23:29
  #5 (permalink)  
Antiguo 15/09/2011, 05:16
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: Problema con sesiones en linux

Pues tenias razón, es register_globals. Lo cambie en Linux a on y me lo sigue poniendo a off (aunque lo edite con nano y se graba bien). Pero lo que he hecho es poner la variable off (que previamente estaba en on) en Windows y ahora no funciona tampoco el script en el windows.

Te pongo el código:

Código PHP:
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $_SESSION["titulo"];?></title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="container">
  <div id="menu">
   <ul>
      <li><a href="index.php" class="current">Inicio</a></li>
      <li><a href="subpage.html">Product</a></li>
      <li><a href="test.php">Ver Test</a></li>
      <li><a href="creartest.php">Crear Test</a></li>
      <li><a href="login.php">Login</a></li>
      <li><a href="contacto.php">Contacto</a></li>
    </ul>
  </div>

<?php
    
require_once("conexion.php"); //Necesario para trabajar con la base de datos

    //EN CASO DE QUE SE HALLA ENVIADO EL FORMULARIO DE MAS ABAJO SIGNIFICA QUE EL USUARIOYA HA EMPEZADO A INTERACTUAR CON LOS TES
    //POR LO QUE PASAREMOS A MOSTRAR LAS PREGUNTAS SIGUIENTES

    
?>
    <form action="lanzartest.php" method="post">
    <?php


    
if (isset($_POST["Enviar"]))
    {
    
$contador=$_POST["contador"];
        echo 
$maxpreg//No muestra nada por pantalla a pesar de que le asigne la session
        
echo "<br>";
        echo 
$_SESSION["maxpreg"]; //muestra el resultado
    
    //echo $datos[$contador];
    
echo "<br>";
    echo 
$contador;
    
//echo "<br>";
    //echo $maxpreg;
    
        //SE SIGUE EJCUTANDO EL TES SIEMPRE QUE EL CONTADOR VALGA MENOS O LO MISMO QUE EL NUMERO DE PREGUNTAS MAXIMAS QUE HALLA EN LA BASE DE DATOS DEL TEST
        
        
if ($contador $_SESSION["maxpreg"]) //PILLA LA SESION, PERO NO SI HUBIESEMOS USADO $maxpreg
        
{
                 echo 
"Hola";
        
$pregunta=mysql_query("select * from preguntas where IdPreg='$datos[$contador]'");        //Seleccionamos la pregunta que marque el contador ¡AQUI FALLA PORQUE NO PILLA LA VARIABLE $datos QUE ESTA ASIGNADA A UNA SESION!
        
$respuestas=mysql_query("select * from respuestas where IdPreg='$datos[$contador]'");    //Seleccionamos las respuestas para la pregunta correspondiente al contador //¡FALLA POR LO MISMO!!
                            
                                
            
if($row=mysql_fetch_assoc($pregunta))
            {
            echo 
"<h3>".$row['Pregunta']."</h3>";        //Mostramos por pantalla la pregunta
            
echo "que pasa";
                    
                while(
$row=mysql_fetch_assoc($respuestas))
                {
                
$idresp=$row['IdResp'];
                
$resp=$row['IdResp'];
                
$respuestasval=mysql_query("select * from respvalidas where IdResp='$resp'");
                
?><div id="prueba"><p><?php echo $row['Respuesta'];                            //Monstramos por pantalla las posibles respuestas
                
?>
                <input type="radio" name="resp" value="<?php echo $idresp;?>" style="width:15px; height:5px;"/></p></div>
                <?php
                    
                    
                    
if($row=mysql_fetch_assoc($respuestasval))
                    {
                    
$respval=$row['IdResp'];    //Aqu� guardamos las respuestas validas que luego compararemos con las que ha seleccionado el usuario
                    
?>                                                                            
                    <input type="hidden" name="respval"  value="<?php echo $respval;?>" />
                    <?php
                    
}
                                
                }
            
            }
        
        
?>
        <input type="hidden" name="contador" value="<?php echo $_POST["contador"]+1;?>" />
        <?php
        
            
            
//AQUI COMPROBAMOS LAS RESPUESTAS CORRECTA Y CREAMOS UNA VARIABLE PARA IR SUMANDO LAS QUE ACIERTE EL USUARIO QUE EJECUTA EL TEST
            
            
if ($_POST["resp"] == $_POST["respval"])
            {
            
$_SESSION["respcorrecta"]++;
            }
        
            echo 
"<br>";
            echo 
"Respuestas correctas:";
            echo 
$_SESSION["respcorrecta"]."/".$contador;
            echo 
"<br>";
        
        }
    }
    
    
//SI NO SE HA ENVIADO TODAV�A EL FORMULARIO DEL TEST DE PREGUNTAS MOSTRAMOS POR PRIMERA VEZ UNA PREGUNTA Y CUATRO RESPUESTAS
    //PARA ELLO PRIMERO TENDREMOS QUE SELECIONAR LAS PREGUNTAS EN FUNCION DEL TEMA QUE HALLA ELEGIDO EL USUARIO Y GUARDARLAS
    //EN UN ARRAY ALEATORIO Y DESORDENADO EN EL QUE NO SE REPITAN LAS PREGUNTAS
    
    
if (empty($_POST["Enviar"]))
    {
    
$_SESSION["titulo"]=$_GET["titulo"]; //La variable t�tulo es la que le hemos pasado a trav�s de la p�gina princiap, la cual procedemos a guardarla en una sesi�n para    
    
$_SESSION["respcorrecta"]=0;
    
$datos=array();
    
$sql=mysql_query("select * from preguntas where IdTema='$_GET[id]'");
    
    
        while(
$result mysql_fetch_array($sql))
        {
        
$datos[]=$result['IdPreg']; //Aqu� lo que hacemos es guardar en una variable de tipo array el resultado de la consulta, es decir el indice de las preguntas 
        
}
    
    
//¡AQUI ES DONDE EMPIEZAN LOS PROBLEMAS!

    
$_SESSION["datos"]=$datos//Necesitamos crear una sesi�n con los datos ya que usaremos esa variable varias veces
    
$datos=$_SESSION["datos"];
    
$_SESSION["maxpreg"] = count($datos); //Aqu� contamos el n�mero de preguntas que temeos en la base de datos por el tema elegido por el usuarios
    
$maxpreg=$_SESSION["maxpreg"];    //A continuaci�n lo guardamos en una variable que usaremos luego        
    
shuffle($datos);                    //Se desordenan los datos de forma aleatoria
    
    
    //SI HAY MAS DE VEINTE PREGUNTAS ESTABLECEMOS UN M�XIMO PARA CADA TEST
    
        
if ($maxpreg 20)
        {
        
$_SESSION["maxpreg"]=20;    
        
$maxpreg=$_SESSION["maxpreg"];
        }
    
    
//$datos=array_rand($datos,$maxpreg/2);
    //echo $datos[0];
    
echo $maxpreg;
    echo 
"<br>";
        for (
$i=0$i<$maxpreg$i++)
        {
        echo 
$datos[$i]."-";
        }
    
//Y AQUI PILLA $datos sin problema puesto que no necesita hacer uso de la sesión

    
$pregunta=mysql_query("select * from preguntas where IdPreg='$datos[0]'");     //Seleccionamos la primera pregunta que vamos a mostrar
    
$respuestas=mysql_query("select * from respuestas where IdPreg='$datos[0]'");  //Seleccionamos las respuestas pertenecientes a la primera pregunta                                                
        
        
if($row=mysql_fetch_assoc($pregunta))
        {
        echo 
$row['Pregunta']; //Mostramos por pantalla la pregunta
        
echo "<br>";
                    
            while(
$row=mysql_fetch_assoc($respuestas))
            {
            
$idresp=$row['IdResp'];
            
$resp=$row['IdResp'];
            
$respuestasval=mysql_query("select * from respvalidas where IdResp='$resp'");
            echo 
$row['Respuesta'];  //Mostramos por pantalla las respuestas posibles
            
?>
            <input type="radio" name="resp" value="<?php echo $idresp;?>" style="width:15px; height:5px;"/>
            <?php
            
echo "<br>";    
                
                if(
$row=mysql_fetch_assoc($respuestasval))
                {
                
$respval=$row['IdResp']; 
                
?>
                <input type="hidden" name="respval"  value="<?php echo $respval;?>" /> 
                <?php
                
}        
                
            }
        echo 
"<br>";
        
        }
        
    
?>
    <input type="hidden" name="contador" value="1" />
  
    <?php
    
echo "<br>";
    }
    

    if (
$contador $maxpreg)
    {
     
?>
       
    <button type="submit" name="Enviar" value="Enviar" style="margin:10px; background-color: #1C1C1C; border:2px double #1C1C1C"><img src="images/next.png" width="52" height="35"/></button>        
    <?php
    
}
    
?>
    </form>
    <?php
    
    
    
    
//EN CASO DE QUE EL CONTADOR VALGA LO MISMO QUE LAS PREGUNTAS M�XIMAS SIGNIFICA QUE YA HEMOS TERMINADO TODAS LAS PREGUNTAS DEL TES
    //POR LO QUE PASAMOS A MOSTRAR EL PORCENTAJE DE ACIERTOS
    
    
if (isset($_POST["Enviar"]) && ($contador == $maxpreg))
    {
        if (
$_POST["resp"] == $_POST["respval"])
            {
            
$_SESSION["respcorrecta"]++;
            }    
    echo 
"Ha obtenido un: ";    
    echo 
number_format($_SESSION["respcorrecta"]/$contador*100,2,",",".") . "% de aciertos";
    
$contador=0;
    }
     
// *****************************************************
?>
</BODY>
</HTML>
He omitido parte de códiho html que no era necesario. El problema esta en la variable $datos y $maxpreg. La segunda se puede sustituir por $_SESSON["maxpreg"] pero la otra no se porque tiene que ir dentro de una consulta.
  #6 (permalink)  
Antiguo 15/09/2011, 05:41
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 13 años, 10 meses
Puntos: 13
Respuesta: Problema con sesiones en linux

Gracias andresdzphp, tenías razón en todo. Hay que asignar la variable cuando se necesita no cuando se crea. El caso es que me estaba volviendo un poco loco viendo que un sitio funcionaba el mismo código y en otro no.

Un saludo.

Etiquetas: linux, mysql, sesiones, sql, variables, usuarios
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 14:14.