Consulta sobre código de web implementada con php con problemas en las variables de listas

Hola expertos, soy novatoen php y quisiera su ayuda por favor:
La cuestión es que realice un programilla sencillo de calcular el mayor y menor (a través de botones radio)valor de una lista de números en un control de selección múltiple, pues bien en si el programa me funciona pero con la salvedad que me muestra como respuesta es el indice de el valor encontrado como mayor o menor según escoja en los botones radio, y no se el porque si alguien me puede ayudar se lo agradecería por que llevo dándole pruebas y nada... Confío en tu orientación.
El programa que maneja el formulario de entrada es:
<html>
<head>
<title>OBTENER EL MAYOR O MENOR DE NUMEROS SELECCIONADOS</title>
</head>
<body>
<form action="calcular.php" method="post">
<td valign="top" align="center">
<td align="center">LISTA DE VALORES::<br />
<select name="lista[]" multiple="multiple">
<!--<select name="lista[]" multiple="multiple" size=3>-->
<option value=0>1</option>
<option value=1>4</option>
<option value=2>12</option>
<option value=3>7</option>
<option value=4>50</option>
</select><br><br>
</td>
<td align="right">
MAYOR:<input type="radio" name="opcion" value="mayor" /><br>
MENOR:<input type="radio" name="opcion" value="menor" /><br>
</td>
<br>
<input type="submit" name="enviar">
<input type= reset value="limpiar">
</form>
</body>
</html>
************************************
el codigo que hace el calculo en php es:
<?php
error _reporting(E_ALL);
&radio=tiny_mce_markerPOST['opcion'];
$lista1=tiny_mce_markerPOST['lista'];
//echo count($lista1); //esta lines es de prueba para verificar cuantos elementos estan marcados en la lista de seleccion multiple y me da resultado correcto
if($radio == "mayor" && isset ($lista1))
{
$mayor=$lista1[0];
//echo " el numero mayor aqui es:",$mayor;//esta linea es de prueba y ya desde aqui me esta mostrando es el valor que tiene el value de la opcion select
for($i=1;$i<count($lista1);$i++)
{
if($lista1[$i] > $mayor)
{
$mayor=$lista1[$i];
}
}
Echo "el numero mayor es:". $Mayor ; //aquí me muestra el valor del value que tiene el select para el numero mayor de la lista seleccionada
}
else
{
if($radio == "menor")
{
for($i=0;$i<count($lista1);$i++)
{
for($j=1;$j<=count($lista1);$j++)
{
if($lista1[$i] <= $lista1[$j]) //linea 37
{
$menor=$lista1[$i];
}
}
}
echo "<B>$menor</B>";
}
}
?>
*** otra cosa porfa,porque cuando se ejecuta el else del codigo php es decir cuando el usuario pulsa el boton radio menor , si lo notan hago otra forma de calculo que en mi concepto de logica es valido sin embargo el servidor php me envia el siguiente error:
Notice: Undefined offset :3 in C:\wamp\www\calcular.php on line 37
este error segun he investigado tiene que ver con que no me reconoce la variable lista1 como un vector pero porque si en el codigo de formulario html el select multiple en su name lo he definido como un vector es decir como lista[] y en el codigo php hago:
$lista1=$POST['lista'];
Por su ayuda mil gracias.

1 respuesta

Respuesta
1
En primer lugar te diré que el comportamiento que describes es el "Normal": el elemento de formulario select devuelve el índice de la opción especificada si es que se ha definido.
En tu caso no te interesa definirlo. Por lo tanto, puedes escribir:
<option>1</option>
<option>4</option>
<option>12</option>
<option>7</option>
<option>50</option>
Y obtendrás el valor correcto.
En segundo lugar te diré que el algoritmo del mayor es correcto y eficiente, pero el algoritmo del menor es incorrecto y por eso obtienes un error.
En el caso que nos ocupa, en que tienes 5 valores, el bucle $i se ejecuta desde el valor 0 al valor 4 (mientras sea menor que 5), pero el bucle $j se ejecuta desde 1 hasta 5. Como los valores de $lista1 van del 0 al 4, tendrás un evidente error al intentar comparar el valor $lista1[5].
Además este método es muy ineficiente, puesto que para cada elemento comparas con todos los restantes, y además ineficaz puesto que devolverá sólo el menor de la última 'serie'. Es decir en el caso de los valores 2, 10, 14, 20, 22 devolverá 20 como el menor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas