Ejercicio Básico 33 PHP: Lectura de datos de un fichero
Ejercicio Básico 33 PHP: Lectura de datos de un fichero

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

Como lo prometido es deuda, aquí estoy otra vez para colgar un ejercicio que se me había quedado por el camino. Se trata del ejercicio básico 33 de php. Como este ejercicio tiene mucho que ver con el anterior (el 32), voy a dejar el código de ambos ejercicios en este post, para poder jugar al mismo tiempo con los dos. Además de realizar el ejercicio de turno, he tocado un poco del ejercicio anterior. Ahora el DNI que el usuario mete por teclado tiene que tener el formato español de toda la vida (ocho números y una letra). Esto hace que no se pueda meter cualquier cosa en ese campo.

Y ahora veamos que el ejercicio 33 que traigo hoy se trata de el alumno que ha realizado el examen, curso o lo que sea que ha realizado, quiere consultar on-line el resultado de su examen (la nota que un supuesto docente ha puesto (injusta o justamente). Por lo tanto hay que crear un formulario donde dado el DNI del alumno este devuelva la nota que el profesor ha puesto al alumno. En este enlace se puede ver como he planteado los dos ejercicios. Los he dejado para poder interactuar entre el formulario del ejercicio 32 y el del ejercicio 33. Como ya he dicho, el ejercicio 32 sería el formulario que utilizaría el profesor. El formulario del ejercicio 33 sería el que utilizaría el alumno para consultar su nota. Se puede mover entre ellos mediante los enlaces en la parte inferior del formulario.

Ejercicio PHP: Lectura de datos en un fichero.

Y bueno, explicado el ejercicio, es hora de irse al turrón del asunto …

index.html

<html>
<head>
<title>Ejercicio 33</title>
<meta charset="utf-8">
<script type="text/javascript">
    //Función para limpiar el formulario cuando se carge la página
	function formReset()
	{
		document.getElementById("formulario").reset();
	}
</script>
</head>
<body onload="formReset();"> 
<center><h1>Introductor de Notas</h1>
    <h6>Antes de abrir el registro de datos hay que introducir algún dato mediante el formulario</h6>
	<form action="index.php" method="post" id="formulario">
            DNI:
            <input type="text" name="DNI" maxlength="9" size="9">
            <br>
            Nota:
            <select name="nota">
                <option value="10">10</option>
                <option value="9">9</option>
                <option value="8">8</option>
                <option value="7">7</option>
                <option value="6">6</option>
                <option value="5">5</option>
                <option value="4">4</option>
                <option value="3">3</option>
                <option value="2">2</option>
                <option value="1">1</option>
                <option value="0">0</option>
            </select>

            <br>
            <input type="submit" value="Registrar">
	</form>
	<br>
        <a href="datos.txt" title="Abrir archivo de registro" target="_blank">Abrir Registro de datos</a><br>
        <a href="BuscarNota.html" title="Buscar Nota">Buscar Nota por DNI</a></center>
</body>
</html>

index.php
<!DOCTYPE HTML>
<html>
<head>
    <title>Buscar nota ejercicio 33</title>
<meta charset="UTF-8">
</head>
<body>
<center>
<?php
  if (empty($_POST['DNI'])||empty($_POST['nota'])){
      echo "Ninguno de los campos puede estar vacío";
      echo "<br><a href='index.html' title='volver atr&aacute;s'>Volver</a>";
  }else{

   @$lineas = file("datos.txt");//guardamos el archivo donde vamos a escribir en $lineas
   $dni=strtoupper($_POST["DNI"]);     //el valor a buscar, transformamos la letra a mayúscula
   $encuentra=0; //el número de veces que se ha encontrado
   $patron='/[0-9]{8}[A-Z]$/'; //patrón para el DNI
   //Comprobamos la validez del dni mediante pregmatch y una expresión regular
    if (preg_match($patron, $dni))
    {
     if ($_POST['nota']<0 || $_POST['nota']>10){
       echo "ERROR. La nota tiene que estar entre 0 y 10";
       echo "<br><a href='index.html' title='volver atr&aacute;s'>Volver</a>";
     }else{  
          if (file_exists("datos.txt")){
              foreach(@$lineas as $linea){ //recorremos el archivo dónde buscarmos
                 if (strstr($linea,$dni)){ //si en el archivo aparece el string que pasamos como dni
                    $encuentra+=1; //añadimos uno al macador
                    }
              }
              if ($encuentra==0){ //si no se ha encontrado ninguna coincidencia de DNI en el archivo
                $ar=fopen("datos.txt","a+") or die("Problemas en la creación!!");
                fputs($ar,"DNI: ");
                fputs($ar,strtoupper($_REQUEST['DNI']));
                fputs($ar," - ");
                fputs($ar,"Nota: ");
                fputs($ar,$_REQUEST['nota']);
                fputs($ar,"\n");
                fputs($ar,"--------------------------------------------------------");
                fputs($ar,"\n");
                fclose($ar);
                echo "Los datos se guardaron correctamente.";
                echo "<br><a href='index.html' title='volver atr&aacute;s'>Volver</a>";
              }else{  //en caso de que se produzca alguna coincidencia
                    echo "El DNI ". $dni." ya está agregado. Introduzca un DNI diferente. <a href='index.html'>Volver</a>";
                }
          }else{
              echo "El archivo datos.txt no existe y se creará.<br>";
              $ar=fopen("datos.txt","a") or die("Problemas en la creación!!");
              fputs($ar,"DNI: ");
              fputs($ar,strtoupper($_REQUEST['DNI']));
              fputs($ar," - ");
              fputs($ar,"Nota: ");
              fputs($ar,$_REQUEST['nota']);
              fputs($ar,"\n");
              fputs($ar,"--------------------------------------------------------");
              fputs($ar,"\n");
              fclose($ar);

              echo "Los datos se guardaron correctamente.";
              echo "<br><a href='index.html' title='volver atr&aacute;s'>Volver</a>";
          }
  
   } 
   
   }else{
        echo 'Escribe correctamente el DNI. El formato aceptado es de 8 números (<b>D</b>) y una letra (<b>L</b>) (sin espacios).<br>';
        echo "<b>DDDDDDDDL</b>";
        echo "<br><a href='index.html' title='volver atr&aacute;s'>Volver</a>";
    }  
  }
?>
</center>
</body>
</html>

BuscarNota.html
<html>
<head>
<title>Ejercicio 33</title>
<script type="text/javascript">
	function formReset()
	{
		document.getElementById("formulario").reset();
	}
</script>
</head>
<body onload="formReset();"> 
<center>
    <h1>Busca una nota asociada a un DNI</h1>
	<form action="busqueda.php" method="post" id="formulario">

	DNI:
	<input type="text" name="DNI" maxlength="9" size="9">
	<br>
	<input type="submit" value="Buscar Nota">
	</form>
	<br>
<a href="index.html" title="Ingresar las notas">Ingresar Nota</a>
</center>
</body>
</html>

busqueda.php
<meta charset="UTF-8"> <!--el meta para los acentos y esas cosas -->
<?php
if (empty($_POST['DNI'])){
      echo "El campo DNI no puede estar vacío.";
      echo "<br><a href='BuscarNota.html' title='Volver atr&aacute;s'>Volver</a>";
}else{
    //primero comprobamos que exista el archivo dónde vamos a buscar
    if (file_exists("datos.txt")){
        $lineas = file("datos.txt"); //abrimos el archivo dónde vamos a buscar
        $dni=strtoupper($_POST["DNI"]);//pasamos a mayúsculas la letra del DNI    
        $pos = 0;
        $encontrado=0; //contador por si no se encuentra el dni
        $patron='/[0-9]{8}[A-Z]$/'; //patrón para el DNI
        //Comprobamos la validez del dni mediante pregmatch y una expresión regular
        if (preg_match($patron, $dni))
        {
        // Podemos mostrar / trabajar con todas las líneas:
        foreach($lineas as $linea){
           if (strstr($linea,$dni)){ //buscamos el dni dentro de cada una de las líneas del archivo
                  echo "El <b>$linea</b> es el registro número ".(($pos/2)+1)." de los datos guardados";
                  echo "<br><a href='BuscarNota.html' title='Volver atr&aacute;s'>Volver</a>";
                  $encontrado++;
           }
          $pos++;
        }
        //Si encontrado es igual a 0 quiere decir que no se ha encontrado ningún DNI igual al introducido
        if($encontrado==0){
            echo "El DNI ".$dni." todavía no tiene una nota asignada.<br>";
            echo "<br><a href='BuscarNota.html' title='volver atr&aacute;s'>Volver</a>";
        }
        }else{
             echo 'Escribe correctamente el DNI. El formato aceptado es de 8 números (<b>D</b>) y una letra (<b>L</b>)<br>';
             echo "<b>DDDDDDDDL</b>";
             echo "<br><a href='BuscarNota.html' title='volver atr&aacute;s'>Volver</a>";
        }
    }else{
        echo "El archivo al que intentas acceder todavía no ha sido creado.";
        echo "<br><a href='BuscarNota.html' title='Volver atr&aacute;s'>Volver</a>";
    }
      
}
?>

Con esto doy por finalizado el ejercicio de lectura de datos. Quién quiera ver el ejercicio funcionando, puede verlo en este enlace.







¿Qué te ha parecido este post?

¡Haz clic en una estrella para calificarla!

Puntuación media 5 / 5. Recuento de votos: 1

¡No hay votos hasta ahora! Sé el primero en calificar esta publicación.

No te pierdas otros artículos ...

¡Síguenos en las redes sociales!

¡Lamentamos que esta publicación no te haya sido útil!

¡Permítanos mejorar esta publicación!

¿Cuéntanos cómo podemos mejorar esta publicación?

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.