Foros del Web » Programando para Internet » PHP »

que cero "0" no sea un valor vacio

Estas en el tema de que cero "0" no sea un valor vacio en el foro de PHP en Foros del Web. Hola a todos, no tenia na que hacer y me puse a disparar algo de código , pero me tropecé con un pequeño obstáculo que ...
  #1 (permalink)  
Antiguo 27/06/2008, 10:56
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
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 , 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
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 27/06/2008, 11:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
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!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 27/06/2008, 13:37
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
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???
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #4 (permalink)  
Antiguo 27/06/2008, 13:57
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 2 meses
Puntos: 20
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
  #5 (permalink)  
Antiguo 28/06/2008, 11:44
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
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

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.
  #6 (permalink)  
Antiguo 28/06/2008, 12:53
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
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

thnx eniwei

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 01/07/2008, 11:24
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Respuesta: que cero "0" no sea un valor vacio

BUAGJ...! a veces las cosas son tan claras y sencillas que no las vemos . 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 , pa que el que este aburrido y no tenga na que hacer, se entretenga con alguillo

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
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 10:10.