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.