Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/09/2011, 05:16
mitrofan
 
Fecha de Ingreso: mayo-2010
Mensajes: 128
Antigüedad: 14 años
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.