Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   que cero "0" no sea un valor vacio (http://www.forosdelweb.com/f18/que-cero-0-no-sea-valor-vacio-600722/)

rogertm 27/06/2008 10:56

que cero "0" no sea un valor vacio
 
Hola a todos, no tenia na que hacer y me puse a disparar algo de código :neurotico, pero me tropecé con un pequeño obstáculo que no se resolver.
El caso es que me puse a hacer una especie de examen, un formulario con varias preguntas y posibles respuestas, de ellas una es la correcta las demás no, para cuando se envíe el form, evaluar al examinado y darle el promedio de su nota, en base a 5 puntos como máximo:
Código PHP:

<?php
if(isset($_POST['examinar']) && $_POST['examinar'] == 'Examinar'){

    if(!empty(
$_POST['respuesta_1']) && !empty($_POST['respuesta_2']) && !empty($_POST['respuesta_3'])){

        
$respuesta_1 $_POST['respuesta_1'];
        
$respuesta_2 $_POST['respuesta_2'];
        
$respuesta_3 $_POST['respuesta_3'];

        
$promedio = ($respuesta_1 $respuesta_2 $respuesta_3) / 3;
        
// este tres es la cantidad de preguntas del form, 
        // debe variar dependiendo de las mismas

    
}else{
        echo 
"debe responder todas las preguntas";
    }
}
?>
<form name="examen" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
    <p>Pregunta 1</p>
    <input type="radio" value="0" name="respuesta_1" /> mal<br />
    <input type="radio" value="5" name="respuesta_1" /> bien<br />
    <input type="radio" value="0" name="respuesta_1" /> mal<br />
    <!-- así hasta 3 preguntas -->
    <p><input type="submit" name="examinar" value="Examinar" /></p>
</form>

el punto es, que si se envia una de las respuestas mal (value="0"), entonces me enviara el aviso de responder todas las preguntas...
Que puedo hacer???

Gracias mil de antemano :si:

pateketrueke 27/06/2008 11:15

Respuesta: que cero "0" no sea un valor vacio
 
digamos que tienes 5 preguntas...

Código PHP:

$err=array()

for (
$i=0$i<=5; ++$i)
{
  if (!isset(
$_POST['pregunta_'.$i]))
  {
    
$err[] = 'Falta la numero '.$i;
  }
  else
  {
    
// aca vas sumando los resultados
  
}
}

if (!empty(
$err))
{
  echo 
'Errores: <br /><br />';
  echo 
join('<br />'$err);


es la forma en que se me ocurrió... suerte!

rogertm 27/06/2008 13:37

Respuesta: que cero "0" no sea un valor vacio
 
creo que no me entendiste o no me supe explicar bien, el problema es que cuando se envia una respuesta errada (value="0"), el procesamiento del script me devuelve el aviso que tengo que contestar todas las preguntas, pues el valor en el campo que esta mal es CERO y lo entiende como vacio, me entiendes ahora???

david_M_G 27/06/2008 13:57

Respuesta: que cero "0" no sea un valor vacio
 
Entonces te sugiero una función (la estaba pensando mientras entraba al post, habiendo leído el título que lo explica muy bien :-) )

Me la acabo de inventar..
Código PHP:

function vacio($string)
   {
      if (
is_numeric($string) && $string == 0)
      {
         return 
FALSE;
      }
      else if (
$string == "")
        {
         return 
TRUE;
        } else {
         return 
FALSE;
        }


Y en vez de empty() usas vacio(). Así:
Código PHP:

<?php

function vacio($string)
   {
      if (
is_numeric($string) && $string == 0)
      {
         return 
FALSE;
      }
      else if (
$string == "")
        {
         return 
TRUE;
        } else {
         return 
FALSE;
        }
}

if(isset(
$_POST['examinar']) && $_POST['examinar'] == 'Examinar'){

    if(
vacio($_POST['respuesta_1']) == FALSE && vacio($_POST['respuesta_2'])==FALSE && vacio($_POST['respuesta_3'])==FALSE){

        
$respuesta_1 $_POST['respuesta_1'];
        
$respuesta_2 $_POST['respuesta_2'];
        
$respuesta_3 $_POST['respuesta_3'];

        
$promedio = ($respuesta_1 $respuesta_2 $respuesta_3) / 3;
        
// este tres es la cantidad de preguntas del form, 
        // debe variar dependiendo de las mismas

    
}else{
        echo 
"debe responder todas las preguntas";
    }
}
?>

Espero que te sirva! Suerte :adios:

AlvaroG 28/06/2008 11:44

Respuesta: que cero "0" no sea un valor vacio
 
rogertm, entiendo que lo hicieras medio rápido y sin una necesidad real, pero la forma más recomendable no es poner las notas en el código html :borracho:

es mejor que los "option" tengan valores del 1 al 3, y luego al procesar tengas una tabla de respuestas correctas para cada opción.

ejemplo:
Código:

<input type="radio" value="1" name="respuesta_1" /> mal<br />
<input type="radio" value="2" name="respuesta_1" /> bien<br />
<input type="radio" value="3" name="respuesta_1" /> mal<br />

Entonces en tu programa podés tener un vector de esta forma:

Código PHP:

$correctas = array(=> 2...); 

y luego preguntar

Código PHP:

if ( ${'respuesta_'.$correctas[0]} == 2) {
    
$puntaje += 5;



Espero haberme explicado bien.
Saludos.

rogertm 28/06/2008 12:53

Respuesta: que cero "0" no sea un valor vacio
 
OK @alvlin, capte la idea, pero como tengo mas de una pregunta, tal vez tenga que inventarme un buclito foreach ahi :pensando:

thnx eniwei

saludos y suerte

rogertm 01/07/2008 11:24

Respuesta: que cero "0" no sea un valor vacio
 
BUAGJ...! a veces las cosas son tan claras y sencillas que no las vemos :borracho:. Lo resolvi haciendolo como al inicio, pero en lugar de dar valor cero "0" a las respuestas incorrectas, les puse uno "1", ya despues con str_replace lo arregle, asi no llegarian nuca vacias las respuestas erradas:
Código PHP:

<?php
if(isset($_POST['examinar']) && $_POST['examinar'] == 'Examinar') {
    if(!empty(
$_POST['respuesta_1']) && !empty($_POST['respuesta_2']) && !empty($_POST['respuesta_3'])){

        
$respuesta_1 str_replace(10$_POST['respuesta_1']);
        
$respuesta_2 str_replace(10$_POST['respuesta_2']);
        
$respuesta_3 str_replace(10$_POST['respuesta_3']);

        
$promedio round(($respuesta_1 $respuesta_2 $respuesta_3) / 3);

        switch (
$promedio){
            case 
5:
                
$nota "Usted tiene $promedio puntos, Excelente...!";
                break;
            case 
4:
                
$nota "Usted tiene $promedio puntos, Bien...!";
                break;
            case 
3:
                
$nota "Usted tiene $promedio puntos, Por los pelos...!";
                break;
            case 
2:
                
$nota "Usted tiene $promedio puntos, Suspenso, lo esperamos el proximo curso...!";
                break;
            case 
1:
            case 
0:
                
$nota "Definitvamente, este curso no es para usted...!";
                break;
        }

        echo 
$nota;

    }else{
        echo 
"Debe responder todas las preguntas";
    }
}
?>
<form name="examen" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
    <p>Pregunta 1</p>
    <input type="radio" value="1" name="respuesta_1" /> mal<br />
    <input type="radio" value="5" name="respuesta_1" /> bien<br />
    <input type="radio" value="1" name="respuesta_1" /> mal<br />
    <p>Pregunta 2</p>
    <input type="radio" value="1" name="respuesta_2" /> mal<br />
    <input type="radio" value="5" name="respuesta_2" /> bien<br />
    <input type="radio" value="1" name="respuesta_2" /> mal<br />
    <p>Pregunta 3</p>
    <input type="radio" value="1" name="respuesta_3" /> mal<br />
    <input type="radio" value="5" name="respuesta_3" /> bien<br />
    <input type="radio" value="1" name="respuesta_3" /> mal<br />
    <p><input type="submit" name="examinar" value="Examinar" /></p>
</form>

Puse todo el codigo, incluido el brillito que le di al final :neurotico, pa que el que este aburrido y no tenga na que hacer, se entretenga con alguillo

saludos y suerte


La zona horaria es GMT -6. Ahora son las 09:21.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.