PHP - ayuda estadistica

 
Vista:
sin imagen de perfil

ayuda estadistica

Publicado por mario (17 intervenciones) el 13/11/2016 16:43:53
holaa buenaas :)
estoy intentado hacer un reto de clase y estoy en la ultima parte del reto que hay que contar cuantas personas se han matriculado en secundaria,bachiller,ciclo medio y ciclo superior.Yo voy metiendo nombres apellidos y la enseñanza que van a estudiar y se guarda en el fichero info.txt y luego de hay intento sacar el recuento pero no me sale.No me da ningun error pero no suma nada cuando voy metiendo usuarios y intento solucionarlo y no puedo por eso pongo este post a ver si me podeis ayudar.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
<html>
 <form name="formulario" method="post" action="reto1.php">
 
 <p>DATOS DEL ALUMNO:</p>
Introduce un nombre: <input type="text" name="nombre" size="15"  maxlength=”15”>
 </br>
Introduce tu apellido: <input type="text" name="apellido" size="15"  maxlength=”15”>
</br>
Introduce tu telefono: <input type="text" name="telefono" size="15"  maxlength=”15”>
  </br>
Matriculado <input type="checkbox" name="matriculado" value="ON">
  </br>
Enseñanza
</br>
<input type="radio" name="opcion" value="secundaria"/>Secundaria
<input type="radio" name="opcion" value="bachillerato"/>Bachillerato
<input type="radio" name="opcion" value="ciclo medio"/>Ciclo Medio
<input type="radio" name="opcion" value="ciclo superior"/>Ciclo Superior
  </br>
  </br>
 
Activida extraescolares
<select name=actividades[]  multiple>
<option value=”Deporte”> Aitor </option>
<option value=”Idioma”> Idioma </option>
<option value=Musica”> Musica</option>
<option value=”Lectura”> Lectura </option>
</select>
 
</br>
</br>
 
<input type="submit" name="enviar" value="Enviar">
<input type="submit" name="regis" value="Alumnos Registrados">
<input type="submit" name="estadistica" value="Estadistica">
 
 
 
 
 
   </form>
</html>

y este es el codigo php
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
 
if(isset($_POST["enviar"])){
if(empty($_POST["nombre"])  or empty($_POST["apellido"]) or empty($_POST["telefono"])){
  echo "tienes que rellenar todos los campos";
}
else
{
  echo"el usuario ".$_POST["nombre"]." con apellido ".$_POST["apellido"]. " y telefono ".$_POST["telefono"];
 
  if(isset($_POST["matriculado"])){
    echo " esta matriculado en ";
 
    if(isset($_POST["opcion"])){
      echo ($_POST["opcion"]);
      echo " y las actividades extraescolares seleccionadas son: ";
    }
 
 
     $actividades=$_POST["actividades"];
           for ($i=0;$i<count($actividades);$i++)
        {
 
          echo  $actividades[$i]. " " ;
 
 
        }
 
    $abrir=fopen("info.txt","a");
    fputs($abrir,$_POST["nombre"]." ".$_POST["telefono"]." ".$_POST["opcion"]."</br>");
    fclose($abrir);
 
  }
  else
    echo" no esta matriculado";
}
 
}
if(isset($_POST["regis"])){
 
$abrir=fopen("info.txt","r");
while(!feof($abrir)){
  $linea=fgets($abrir);
  echo $linea." "."</br>";
}
fclose($abrir);
 
 
}
 
if(isset($_POST["estadistica"])){
 
$abrir=fopen("info.txt","r") or die("");
     $secundaria=0;
     $bachiller=0;
     $medio=0;
     $superior =0;
 
   while(!feof($abrir)) {
   $linea=fgets($abrir);
 
   if ($linea!="") {
   $array = explode (' ',$linea);
 
     if (count($array)==3){
 
          if (trim($array[2])=="Secundaria"){
            $secundaria++;
          }
           if (trim($array[2])=="Bachillerato"){
            $bachiller++;
          }
     }
 
 
     if (count($array)==4){
 
          if (trim($array[3])=="Medio"){
            $medio++;
          }
          if (trim($array[3])=="Superior"){
            $superior++;
          }
 
     }
 
}
 
}
 
        echo "
 Alumnos matriculados en Secundaria : .$secundaria. </br>
 Alumnos matriculados en Bachillerato : .$bachiller. </br>
 Alumnos matriculados en Grado Medio: .$medio.</br>
 Alumnos matriculados en Grado Superior: .$superior.";
 
 
 
 
}
 
?>
en el php la parte de la estadistica la que no me sale es apartir de if(isset($_POST["estadistica"] ,ahi es donde he hecho algo mal para que no me aparezca el resultado que tengo.Espero que me podais ayudar, graciaas :))
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
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

ayuda estadistica

Publicado por kip (877 intervenciones) el 13/11/2016 18:39:45
Hola, si deseas crear un salto de linea en el texto lo mejor es que lo hagas asi en lugar de usar <br> que es una etiqueta HTML:

1
fputs($abrir,$_POST["nombre"]." ".$_POST["telefono"]." ".$_POST["opcion"].chr(13).chr(10));

Ahora bien, una vez tengas ciertas lineas puedes usar la funcion file() de PHP que te trae un arreglo con todas las lineas del archivo ejemplo:

texto.txt
1
2
JUAN PEREZ 09999999 BACHILLERATO
CARLOS ZAPATA 08888888 MEDIO

1
2
3
4
5
6
7
$archivo = file('texto.txt');
print_r($archivo);
//RESULTADO DE print_r
array(
    [0] => 'JUAN PEREZ 09999999 BACHILLERATO'
    [1] => 'CARLOS ZAPATA 08888888 MEDIO'
)

Entonces si sabemos esto seria mas facil evaluar cada linea simplemente con un foreach, basandome en tu codigo seria algo asi, ten en cuenta que debes crear el txt como lo coloque arriba para poder tener los saltos de linea:

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
30
31
32
33
34
35
36
37
38
39
40
41
<?php
 
if (isset($_POST["estadistica"])) {
 
$secundaria = 0;
$bachiller = 0;
$medio = 0;
$superior = 0;
$archivo = file('info.txt');
 
foreach ($archivo as $linea) {
	$opciones = explode(' ', $linea);
	if (count($opciones) < 3) {
		$opcion = trim($opciones[2]);
	} else {
		$opcion = trim($opciones[3]);
	}
	switch (strtolower($opcion)) {
		case 'secundaria':
			$secundaria++
			break;
		case 'bachillerato':
			$bachiller++;
			break;
		case 'medio':
			$medio++;
			break;
		case 'superior':
			$superior++;
			break;
	}
}
 
echo "
 Alumnos matriculados en Secundaria : $secundaria. </br>
 Alumnos matriculados en Bachillerato : $bachiller. </br>
 Alumnos matriculados en Grado Medio: $medio.</br>
 Alumnos matriculados en Grado Superior: $superior.
";
 
}

Prueba el codigo y comentanos si te sirvio o si te salto algun error.

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

ayuda estadistica

Publicado por mario (17 intervenciones) el 14/11/2016 09:43:26
holaa kip :)

he ejecutado el codigo que me has dado y he puesto el salto de linea y el php como me has indicado pero cuando ejecuto el php me da este error:

Parse error: syntax error, unexpected 'break' (T_BREAK) in /home/cabox/workspace/RETO 1 G/reto1.php on line 69

no se porque da ese errorr
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

ayuda estadistica

Publicado por kip (877 intervenciones) el 14/11/2016 11:54:17
Me ha faltado un ; nada mas, por eso te da ese error.

1
$secundaria++;

Justo en aquella linea.

Pruebalo ahora y cuentanos.
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

ayuda estadistica

Publicado por mario (17 intervenciones) el 14/11/2016 12:39:43
no se como no me he dado cuenta del ; jajaj lo siento

ahora si me suma los de grado medio y grado superior pero secundaria y bachillerato no me suman y aparece este error

Notice: Undefined offset: 3 in /home/cabox/workspace/RETO 1 G/reto1.php on line 64
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

ayuda estadistica

Publicado por kip (877 intervenciones) el 14/11/2016 13:23:39
Puedes colocar el contenido de como tienes el archivo txt?
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

ayuda estadistica

Publicado por mari-o (17 intervenciones) el 14/11/2016 14:41:46
lo tengo asi:

1
2
3
4
mario etxezarreta 943452548 ciclo medio
aitor andreu 943256895 bachillerato
ane iribar 943625412 ciclo medio
mikel calo 98423254 secundaria
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

ayuda estadistica

Publicado por kip (877 intervenciones) el 14/11/2016 14:53:52
Cambia la estructura del foreach del codigo que te postee por esta de aca:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
foreach ($archivo as $linea) {
    $opciones = explode(' ', $linea);
    if (count($opciones) < 4) {
        $opcion = trim($opciones[3]);
    } else {
        $opcion = trim($opciones[4]);
    }
    switch (strtolower($opcion)) {
        case 'secundaria':
            $secundaria++;
            break;
        case 'bachillerato':
            $bachiller++;
            break;
        case 'medio':
            $medio++;
            break;
        case 'superior':
            $superior++;
            break;
    }
}

El problema estaba en que no contaba con una segunda palabra que en este caso es el apellido, ya que en tu codigo solo colocas $_POST['nombre'].

Prueba de nuevo y nos avisas!
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

ayuda estadistica

Publicado por mario (17 intervenciones) el 14/11/2016 18:24:27
ahora no me suma ni secundaria ni bachillerato y me sale estos dos errores:

Notice: Undefined offset: 3 in /home/cabox/workspace/Reto1 G/reto1.php on line 62

Notice: Undefined offset: 4 in /home/cabox/workspace/Reto1 G/reto1.php on line 64
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

ayuda estadistica

Publicado por kip (877 intervenciones) el 14/11/2016 20:26:53
Que raro, segun el contenido del txt que me enviaste deberia funcionar, ya que hago un explode usando como delimitador un espacio por ende:

1
2
3
4
5
6
7
aitor andreu 943256895 bachillerato
array (
    0 => 'aitor',
    1 => 'andreu',
    2 => '943256895',
    3 => 'bachillerato',
)

y

1
2
3
4
5
6
7
8
mario etxezarreta 943452548 ciclo medio
array (
    0 => 'mario',
    1 => 'etxezarreta',
    2 => '943452548',
    3 => 'ciclo',
    4 => 'medio'
)

Entonces en ambos casos hago una evaluacion para saber que indice tomare segun los elementos del array:

1
2
3
4
5
if (count($opciones) < 4) {
        $opcion = trim($opciones[3]);
    } else {
        $opcion = trim($opciones[4]);
    }

Deberia funcionarte segun lo que te comento, ahora bien antes te funcionaba pero te daba error en el indice 3, prueba haciendo un var_dump() de la variable que toma el retorno de la funcion explode(), asi:

1
var_dump($opciones);

Dentro del foreach coloca aquella linea, luego de definir la variable $opciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

ayuda estadistica

Publicado por mario (17 intervenciones) el 16/11/2016 00:10:40
buenas kiip

ahora si que me funciona y me cuenta las 4 opciones, muchisimas gracias por tu ayudaa :))
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