PHP - Ciclo

 
Vista:
sin imagen de perfil

Ciclo

Publicado por Jose (36 intervenciones) el 21/11/2013 16:50:02
Buen dia !

Lo que pasa es que tengo el siguiente problema:

Me pusieron a hacer un ejercicio donde tengo que analizar todas las notas de los estudiantes actuales y si alguna de ella es menor a 70 tengo que sacar a ese estudiante de la lista y si el estudiante tiene todas las notas mayores a 70 me los tiene que ir listando.

Aqui les escribo el codigo que llevo si alguien me puede colaborar muchas Gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$id=mysql_query("select distinct formulario_id_usuario from notas where grupo_grupo='$gru'",$conexion) or die (mysql_error());
 
while ($ide=mysql_fetch_array($id)){
    $iden=$ide['formulario_id_usuario'];
 
    $a=0;
 
    $no_b=mysql_query("select nota_final,bloque,formulario_id_usuario from notas where grupo_grupo='$gru' and formulario_id_usuario='$iden'",$conexion) or die (mysql_error());
    while ($no_bl=mysql_fetch_array($no_b)){
        $nota_bloque=$no_bl['nota_final'];
        $bloque=$no_bl['bloque'];
        $id_usuario=$no_bl['formulario_id_usuario'];
 
        //echo "$nota_bloque ---> $iden"."<br>";
 
        if ($nota_bloque<70){
 
        }
 
        else{
            echo $iden;
        }
 
 
 
        $a++;
    }
    echo "<br><br>";
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ciclo

Publicado por Jesus Gabriel (12 intervenciones) el 21/11/2013 17:22:03
no entiendo cual es tu problema en si,

porque haces 2 consultas a tu base de datos?

porque 2 while?

puedes ser un poco mas espesifico con tu problema, porque solo nos dices lo que pidieron hacer, pero no donde tienes problemas con tu codigo.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ciclo

Publicado por Jose (36 intervenciones) el 21/11/2013 17:48:56
Mm ok !
Aquí te pongo el ejercicio con un solo while y el problema que tengo es que si un estudiante tiene una nota menor a 70 el sigue analizando sus notas pero no puede seguir analizando sus notas ya que tiene una menor a 70 pero si las tiene todas mayores a 70 me tiene que mostrar el id del estudiante

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$gru=@$_POST['gru'];
 
$a=0;
 
$id=mysql_query("select formulario_id_usuario,nota_final from notas where grupo_grupo='$gru'",$conexion) or die (mysql_error());
while ($ide=mysql_fetch_array($id)){
    $iden=$ide['formulario_id_usuario'];
    $nota=$ide['nota_final'];
 
    //echo "$nota ---> $iden"."<br>";
 
    if ($nota<70){
 
    }
 
    else{
        echo $iden;
    }
 
    $a++;
 
}
 
echo "<br><br>";
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Ciclo

Publicado por xve (6935 intervenciones) el 21/11/2013 21:02:27
Hola Jose, por lo que entiendo, te aparecen todos los usuarios con varias notas por cada usuario verdad?

Se me ocurre algo así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$gru=@$_POST['gru'];
 
$a=0;
 
$id=mysql_query("select formulario_id_usuario,nota_final from notas where grupo_grupo='$gru' ORDER BY formulario_id_usuario",$conexion) or die (mysql_error());
$superiorA70=true;
while ($ide=mysql_fetch_array($id))
{
    if($iden!=$ide['formulario_id_usuario'])
    {
        $iden=$ide['formulario_id_usuario'];
        $superiorA70=true;
    }
    if($superiorA70)
    {
        $nota=$ide['nota_final'];
 
        if ($nota<70)
        {
            $superiorA70=false;
        }else{
            echo $iden;
        }
    }
}

Utilizo una variable para saber si ese usuario ha tenido una nota inferior a 70.

No lo he probado pero creo que te puede funcionar...

Nos comentas, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ciclo

Publicado por Jose (36 intervenciones) el 21/11/2013 21:09:43
amigo la verdad es que me salen los mismos resultados que tenia antes no ha cambiado en nada
Que otra idea me puedes dar
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ciclo

Publicado por Mari Carmen (145 intervenciones) el 21/11/2013 21:11:00
Por que no seleccionas los usuarios de la BBDD que son superiores a 70?
1
SELECT formulario_id_usuario,nota_final FROM notas WHERE nota_final >70 AND grupo_grupo='$gru'

Después un while para recoger los valores en un array de del estilo
1
$array[]=array($ide['formulario_id_usuario'] => $ide['nota_final'])
O directamente sacarlo por pantalla por el while.


Lo de la variable incremental no se para que la pones.

Debes definir siempre gru y escaparlo para no tener Inyecciones de Código SQL. Eso de poner una @ es una chapuza de las grandes.
1
if(isset($_POST["gru"] && $_POST["gru"]!=""){$gru=$_POST["gru"];}else{$gru=false;}

Luego los errores que veo que tienes al programar son:
1 - Usas una librería obsoleta. mysql. En la versión siguiente de PHP la van a quitar. Usa mysqli en su defecto.
2 - No defines las variables de entrada cuando estas no existen ni determinas si es correcto lo que debe de entrar. Un ejemplo es que si esperas un numero compruebes que es un numero.
3 - No escapas las variables de entrada para luego introducirlas directamente en el query directamente a la BBDD.
4 - Es incorrecto utilizar un array de datos como si fuese una variable normal. Debes comprender que un array es un conjunto de datos. Por lo que expresiones como "echo $iden" es incorrecta. Para representar arrays usa var_dump() o print_r().
5 - Igual que al hacer el if sobre el array notas. NO SE PUEDE. En el caso de tu ultimo código debes ponerlo así:
1
2
3
4
5
foreach($nota as $not){
    if($not>70){
        echo $not.PHP_EOL;
    }
}
6 - Un IF que no va a hacer nada no ha de ponerse nunca. Más que nada por no tener comportamientos erroneos e inesperados. Para ello haz la condición negada. Un ejemplo
1
if($nota>70){}else{echo $nota;}
Debes ponerlo como
1
if($nota<=70) {echo $nota;}

Bueno quizá hayan más ahora no tengo mas tiempo. Y está escrito directamente sin probar nada, asi que es posible que haya errores como ; o cosas asi.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar