Anuncios

Hola, bienvoenidos a este nuevo post, hoy hablaremos sobre como manipular informacion de Mysql a traves de PHP (o mejor dicho su API), veremos como a traves de PHP y Mysql se pueden realizar paginas dinamicas permitiendo una mejor interacción con el usuario y un poco de programación básica de PHP.

Anuncios

PHP es un lenguaje del tipo script del lado del servidor, en lineas generales es similar a ASP pero seria como comparar Javascript con VBscript respectivamente, el lenguaje y la ejecucion lo procesa el servidor pero el resultado se imprime en el cliente, para el cliente solamente se vera el texto y no el codigo de PHP, aunque inspeccionara el elemento, el metodo para invocar a PHP es utilizar los siguientes tags <?php [funciones] ?> dentro del codigo HTML, veamos el siguiente ejemplo:

<html>
<body>
<?php echo "Hola, Mundo!"; ?>
</body>
</html>
Anuncios

Observen como se mezcla el codigo de PHP, el resultado es obviamente una gran pagina en blanco donde aparecera Hola, Mundo! y si vieran el codigo de la pagina solo aparecera lo escrito y no el codigo. Tambien se pueden hacer codigos de script PHP para el shell de Linux, les doy un ejemplo:

#! /usr/bin/php -q
<?php echo "Hola, Mundo!\n"; ?>
Anuncios

Esto se guarda en un archivo de texto y se le da permisos de ejecucion con el siguiente comando desde el shell:

chmod u=rwx,g=rx,o=r prueba.php 
Anuncios

Y cuando lo ejecuten aparecera en pantalla el mensaje pero esto es muy raro de hacer o verlo como metodo de implementacion, por esto todos los ejemplos siguientes seran orientados a paginas webs pero como dije en otros posts queda completamente al criterio del programador como hacerlo, un ultimo detalle el path utilizado para llamar al programa PHP puede variar en otras distribuciones para este caso se uso Debian.

Anuncios

Antes de continuar les recomiendo visitar este post donde explico como instalar en un Linux (Debian) el servidor Apache, mysql y PHP, obviamente pueden omitir la parte de mysql pero el resto funciona perfectamente.

Anuncios

Despues de la instalacion y de una leve (muy leve) introduccion en el lenguaje procedamos a verlo junto con Mysql, vamos a utilizar la tabla de los alumnos, creada en este post, para crear algunas paginas en donde los alumnos podran tener una pagina de inicio y ver algunos datos de ellos, pasemos a ver algunos ejemplos:

<html>
<body>
	<title>Universidad de la Sarassa</title>
	Sean bienvenidos a la Universidad de la Sarasa.<br><br>
	<?php 
		$link = @mysqli_connect("< servidor de conexion >","< usuario de conexion a la base >","< la contraseña>","< nombre de la base >") or exit;
		$queryTotal="select count(*) from alumnos";
		$result = mysqli_query($link,$queryTotal) or exit();
		if ($row = mysqli_fetch_array($result)) 
			echo "Total de alumnos actualmente: " . $row[0] . "<br>"; 
		mysqli_free_result($result);
	?>
</body>
</html>
Anuncios

Aca pueden ver un pequeño ejemplo de portada de nuestra universidad, en donde solamente mostrara la cantidad de alumnos actuales, como ven primero nos conectamos con @mysqli_connect a nuestro servidor, en el primer campo ingresamos la direccion de conexion, por ejemplo puede ser localhost si el servidor web y mysql estan en el mismo equipo, despues ingresamos el usuario, la contraseña y por ultimo la base de datos, en mi caso utilizo como buena practica guardar la consulta en una variable, en este caso $queryTotal, para en caso de falla poder vincularlo al comando echo y poder ver si el query quedo mal armado o falto algun dato en el caso de falla de la consulta, para luego ejecutarlo con mysqli_query, despues utilizamos un condicional donde si obtenemos un resultado imprime el mensaje, en caso contrario no hace nada y por ultimo liberamos la memoria con mysqli_free_result como ven esta pagina es verdaderamente simple, veamos algunos detalles: el arroba (@) es utilizado para en caso de error no sea mostrado en el navegador, la variable $link no es obligatoria se podria escribir directamente:

@mysqli_connect("< servidor de conexion >","< usuario de conexion a la base >","< la contraseña>","< nombre de la base >") or exit;
Anuncios

En todos los casos donde tenemos exit es para tener una salida silenciosa sin ningun tipo de error para el usuario.

Anuncios

Finalmente si nosotros quisieramos utilizarlo deberiamos grabarlo en algun directorio del server y el nombre del archivo con extension .php, por ejemplo alumnos.php, para nuestro primer caso vamos a ver archivos de conexion y funciones en PHP para utilizarlos con mysql, para poder utilizarlo deberian modificar el archivo php.ini, en el caso de Debian el path es:

/etc/php/7.3/apache2/php.ini

Nota: En caso de otras distros de Linux puede variar el path de la ubicacion del archivo.
Anuncios

Deben buscar la linea include_path y remover el numeral (#), esto es para descomentarlo, en esa linea pueden modificar el path mencionado ahi o usar el existente, en cualquiera de los dos casos debemos crear un archivo nuevo con la extension .inc en el path mencionado en include_path, en este caso usaremos el nombre tutorial para identificarlo a cual base conectarse, en el archivo debemos utilizar el siguiente codigo:

<?php
function tutorial_connect()
{
	$link=@mysql_pconnect("< servidor de conexion >","< usuario de conexion a la base >","< la contraseña>","< base >") or exit;
  	if ($link)
  		return($link);
  	return (FALSE);
}
?>
Anuncios

En este caso creamos una funcion, llamada tutorial_connect, donde chequearemos si la conexion al server y a la base se efectua correctamente retornando la conexion declarada en $link y luego retorna un estado false, en la pagina deberiamos incluir el archivo con el comando include:

include("tutorial.inc") 
Anuncios

Para luego llamar a la funcion para conectarnos. En el archivo .inc se incluyeron los tags de PHP para ser interpretado como codigo PHP pero se puede incluir codigo HTML para ser invocado desde este archivo, vamos a modificar el codigo anterior para incluir dos funciones donde crearan el encabezado y la cola de alumnos.php, esto es solamente a los efectos para ver como funciona el .inc con respecto a PHP:

tutorial.inc

<?php

function tutorial_connect()
{
	$link=@mysql_pconnect("localhost","admin","password","tutorial") or exit;
  	if ($link)
  		return($link);
  	return (FALSE);
}

function html_begin($title,$header)
{
  	print("<html>\n");
  	print("<head>\n");
  	if ($title)
  		print("<title>$title</title>\n");
  	print("</head>\n");
  	print("<body>\n");
  	if ($header)
  		print("<h2>$header</h2>\n");
}

function html_end()
{
  	print("</body></html>\n");
}

?>
Anuncios

alumnos.php

<?php 

  include ("tutorial.inc"); 

  $title="Universidad de la Sarasa"; 
  html_begin($title,$title);

?>

Sean bienvenidos a la Universidad de la Sarasa.<br><br>

<?php
  
  $con=tutorial_connect(); 
  $queryTotal="select count(*) from alumnos"; 
  $result = mysqli_query($con,$queryTotal) or exit();
  if ($row = mysqli_fetch_array($result)) 
 	echo "Total de alumnos actualmente: " . $row[0] . "<br>"; 
  mysql_free_result($result);

  html_end();

?>
Anuncios

En el archivo tutorial.inc, incluimos tres funciones: una para conectarnos (tutorial_connect), otra para el encabezado del HTML (html_begin) y finalmente otra para cerrra el HTML (html_end), hemos declarado tres simples funciones para luego ser llamadas desde el alumnos.php, estos simplemente escriben los encabezados y tags de apertura y cierre del codigo HTML, pasemos a ver a alumnos.php, como se nota ha sufrido algunas modificaciones con respecto al primer codigo, primero no tenemos mas los encabezados HTML, tampoco tenemos el comando de conexion (mysqli_connect) ahora sido reemplazado por la siguiente linea:

include("tutorial.inc") 
Anuncios

En donde incluira todas las funciones previamente mencionadas dentro del archivos alumnos.php, lo primero en hacer despues es invocar el include, luego creamos una variable llamada $title, llamamos a la funcion html_begin y enviamos la variable a esa funcion, luego escribimos un texto en HTML, para luego volver a insertar un codigo PHP y en este caso hacemos la conexion al server (tutorial_connect), luego utilizamos los queries ya existente para una vez finalizado utilizar la funcion html_end y asi cerrar los tags HTML. Hasta aqui hicimos una simple pagina de presentacion casi completamente con PHP, ahora haremos una modificacion en la pagina de alumnos.php para poder ver los datos de alumnos invocando otra pagina, veamos el ejemplo:

alumnos.php

<?php

  include ("tutorial.inc"); 
  $title="Universidad de la Sarasa";
  html_begin($title,$title);

?>
Sean bienvenidos a la Universidad de la Sarasa.<br><br>
<?php

  $con=tutorial_connect(); 
  $queryTotal="select count(*) from alumnos"; 
  $result = mysqli_query($con,$queryTotal) or exit(); 
  if ($row = mysqli_fetch_array($result))
  	echo "Total de alumnos actualmente: " . $row[0] . "<br><br>";
  mysqli_free_result($result);

?>
Para ver el listado de alumnos, haz click <a href="listado.php">aqui</a>.
<?php html_end(); ?>
Anuncios

listado.php

<?php
  
  include("tutorial.inc"); 
  $con=tutorial_connect();
  $queryLista = "select concat(apellido,', ',nombre) as nombre, ciudad, edad from alumnos order by id asc"; 
  $qLista = mysqli_query($con,$queryLista);
  $l=0;
  while($linea=mysqli_fetch_array($qLista)) 
  {
  	$nombre[$l]=$linea['0'];
  	$ciudad[$l]=$linea['1']; 
 	$edad[$l]=$linea['2'];
  	$l++;
  }
  mysqli_free_result($qLista);

?>
<html>
  <head>
  	<title>Universidad de la Sarasa / Listado de Alumnos</title>
  </head>
  <body>
  <table width="500" border="1" cellpadding="0" cellspacing="0"> 
  	<tr>
 		<td>&nbsp;Nombre Completo</td>
 		<td>&nbsp;Edad</td>    
 		<td>&nbsp;Ciudad de Origen</td>  
 	</tr> 
 	<?php for($m=0;$m<$l;$m++) {?>  
 	<tr>
  		<td>&nbsp;<?php echo $nombre[$m]; ?></td> 
 		<td>&nbsp;<?php echo $edad[$m]; ?></td> 
 		<td>&nbsp;<?php echo $ciudad[$m]; ?></td>  
 	</tr>
  	<?php } ?>
   </table><br>
   <button onClick="location.href='alumnos.php'">Volver</button>
   </body>
</html>
Anuncios
Anuncios

En este ejemplo, hicimos una sola modificacion en alumnos.php donde agregamos un link para la pagina del listado de los alumnos, en la otra pagina (listado.php), en el inicio volvemos a incluir a traves del include el archivo de conexion al server luego llamamos a la funcion de conexion para luego hacer el query del listado de los alumnos y ejecutarlo.

Para obtener los datos debemos utilizar la funcion mysqli_fetch_array junto con el while para almacenar las columnas en distintas variables, tambien observen la utilizacion de un Array para cada una de las variables para almacenar las columnas a traves del Array, un array o arreglo es una variable especial que permite almacenar valores en distintas posiciones pero para mas información les recomiendo este post, y a $l lo incrementamos a medida que se realiza el bucle del while. Una vez almacenada la información procederemos a crear una tabla donde mostraremos la información del servidor, primero hacen una fila donde va a ir la descripcion de cada columna y luego con PHP haremos un bucle con for para repetir las celdas de las filas e imprimir la información de cada variable para luego crear un boton donde podremos volver a la pagina de inicio, en el caso del boton utilizamos un evento de Javascript (onclick) para ir con el comando location.href  a la pagina alumnos.php.

Anuncios

Hasta aqui la explicacion de ambas paginas, vamos a ver algunos tips utilizados que he aprendido con el uso, primero porque no utilice el while directamente para generar las celdas de las filas? porque a veces no necesitamos representar todas juntas sino una parte y nosotros con el for podriamos delimitarlos, tambien se puede hacer con el limit pero no siempre es practico a nivel web, y tambien nosotros a veces necesitemos repetir los datos y es solamente volver a llamar un for y no volver a crear la llamada al query, otra buena practica es guardar el query en una variable, primero porque es mas facil de editar sin borrar alguna parte del comando y generar un error, y ante alguna duda se puede imprimir la variable para ver si el error lo tenemos en el query o en otra parte del programa, especialmente cuando utilicemos información de un formulario, y por ultimo el codigo alternativo podria haber sido asi:

<?php
  
  include("tutorial.inc"); 
  $con=tutorial_connect();
  $queryLista = "select concat(apellido,', ',nombre) as nombre, ciudad, edad from alumnos order by id asc"; 
  $qLista = mysqli_query($con,$queryLista);

?>

<html>
  <head>
 	<title>Universidad de la Sarasa / Listado de Alumnos</title>
  </head>
  <body>
  <table width="500" border="1" cellpadding="0" cellspacing="0"> 
  	<tr>
 		<td>&nbsp;Nombre Completo</td>
 		<td>&nbsp;Edad</td>    
 		<td>&nbsp;Ciudad de Origen</td>  
 	</tr>
  	<?php while($linea=mysqli_fetch_array($qLista)) { ?>  
 	<tr>
 		<td>&nbsp;<?php echo $linea['0']; ?></td> 
 		<td>&nbsp;<?php echo $linea['1']; ?></td> 
 		<td>&nbsp;<?php echo $linea['2']; ?></td>  
 	</tr>
 	<?php  }  mysql_free_result($qLista); ?>
  </table><br>
  <button onClick="location.href='alumnos.php'">Volver</button>
  </body>
</html>
Anuncios

Como se ve el codigo es bastante mas simple y directo pero en caso de necesitar repetirlo deberiamos volver a llamar el query y procesarlo pero en casos como este no esta mal utilizarlo asi porque es una consulta simple, para nuestro siguiente paso veremos algunas de las funciones disponibles:

  • mysqli_connect: Sirve para conectarse al servidor por medio de la direccion, usuario y contraseña, la base a conectarse es opcional: @mysql_pconnect(‘localhost’.’user’,’secret’,’base’);
  • mysqli_select_db: Sirve para seleccionar la base de datos; mysqli_select_db(«tutorial»);
  • mysqli_query: Se utiliza para ejecutar un query en el servidor, este solamente devolvera el estado TRUE o FALSE si funciono o no; mysqli_query(«select * from alumnos»);
  • mysqli_fetch_array: Sirve para recuperar las filas ejecutadas por la funcion anterior, en este caso es un Array donde se puede acceder por orden numerico o asociativa.
  • mysqli_fetch_row: Idem al anterior pero solamente por orden numerico.
  • mysqli_fetch_object: Es un objeto y solo puede ser accedido como propiedades.
  • mysqli_free_result: Sirve para liberar el resultado de la variable asociada.
  • mysqli_num_rows: Devuelve la cantidad de filas en el conjunto resultante.
  • mysqli_num_fields: Devuelve la cantidad de columnas en el conjunto resultante.
  • mysqli_affected_rows: Devuelve la cantidad de filas afectadas por un query.
  • error_reporting: Activa o deactiva el informe de errores: 1 – Errores normales, 2 – Avisos normales, 4 – Errores de analisis, 8 – Advertencias. Ej: error_reporting(4 + 8);
  • mysqli_error: Nos devuelve el error en forma de cadena.
  • mysqli_errno: Nos devuelve el codigo de error.
Anuncios

Estos son algunas funciones propias de la API de PHP para mysql, obviamente existen mas funciones para sacar provecho pero algunas los veremos dentro de los ejemplos y otros los aclarare despues, pasemos a los ejemplos, les dare el codigo fuente utilizado y una breve reseña y explicacion:

alumnos.php

<?php

  include("tutorial.inc");
  $title="Universidad de la Sarasa";
  html_begin($title,$title);

?>
Sean bienvenidos a la Universidad de la Sarasa.<br><br>
<?php

  $con=tutorial_connect();
  $queryTotal="select count(*) from alumnos";
  $result = mysqli_query($con,$queryTotal) or exit();
  if ($row = mysqli_fetch_array($result))
        echo "Total de alumnos actualmente: " . $row[0] . "<br><br>";
  mysqli_free_result($result);

?>

Para ver el listado de alumnos, haz click <a href="listado.php">aqui</a>.<br><br>
Nuevos alumnos, ingresalos por <a href="nuevo.php">aca</a>.<br><br>
Ingresa las notas de los examenes por <a href="ingreso.php">aqui</a>.

<?php html_end(); ?>
Anuncios

Las unicas modificaciones realizadas son los links para llamar a las nuevas paginas que veremos a continuacion:

nuevo.php

<?php

  if (isset($_REQUEST["nombre"])) { $nombre=$_REQUEST["nombre"]; } else { $nombre=""; }
  if (isset($_REQUEST["apellido"])) { $apellido=$_REQUEST["apellido"]; } else { $apellido=""; }
  if (isset($_REQUEST["sexo"])) { $sexo=$_REQUEST["sexo"]; } else { $sexo=""; }
  if (isset($_REQUEST["edad"])) { $edad=$_REQUEST["edad"]; } else { $edad=""; }
  if (isset($_REQUEST["ciudad"])) { $ciudad=$_REQUEST["ciudad"]; } else { $ciudad=""; }
  if (isset($_REQUEST["pcia"])) { $pcia=$_REQUEST["pcia"]; } else { $pcia=""; }

  include("tutorial.inc");
  $con=tutorial_connect();
  if ($nombre!="" && $apellido!="")
  {
        $queryAlumno="insert into alumnos (id,nombre,apellido,sexo,edad,ciudad,pcia) values (NULL,'$nombre','$apellido','$sexo',$edad,'$ciudad','$pcia')";
        $qAlumno=mysqli_query($con,$queryAlumno);
  }

?>

<form name="form1" method="post" action="">
<table width="400" border="1" cellpadding="0" cellspacing="0">
        <tr>
                <td>Nombre</td>
                <td width="252"><input name="nombre" type="text" id="nombre"></td>
        </tr>
        <tr>
                <td>Apellido</td>
                <td><input name="apellido" type="text" id="apellido"></td>
        </tr>
        <tr>
                <td>Sexo</td>
                <td><select name="sexo" id="sexo">
                        <option value="">--</option>
                        <option value="F">F</option>
                        <option value="M">M</option>
                </select></td>
        </tr>
        <tr>
                <td>Edad</td>
                <td><input name="edad" type="text" id="edad"></td>
        </tr>
        <tr>
                <td>Ciudad de Origen </td>
                <td><input name="ciudad" type="text" id="ciudad"></td>
        </tr>
        <tr>
                <td>Provincia</td>
                <td><input name="pcia" type="text" id="pcia"></td>
        </tr>
</table><br>
<button type="button" onClick="window.document.form1.submit()">Submitir</button>
&nbsp;&nbsp;&nbsp;
<button type="button" onClick="location.href='alumnos.php'">Cancelar</button>
</form>
Anuncios

Esta pagina la utilizaremos para efectuar la carga de nuevos alumnos en la base de la universidad, vamos a analizar el codigo HTML primero: tenemos un formulario donde lo utilizaremos para recolectar los datos (nombre,apellido,sexo,edad,ciudad,provincia), esto es tan simple como se ve, la unica magia la tenemos en los dos botones donde el primero nos servira para «submitir» los datos y todo a traves de javascript y el evento onClick. y con el otro boton volveremos a la pagina de inicio. Ahora pasemos al codigo PHP, aqui veremos la primera funcion de PHP como les comente anteriormente, $_REQUEST. Esta funcion nos permite recuperar informacion de datos provenientes de un formulario o de la URL, en este caso como nosotros submitimos el formulario, no lo recargamos ni volvimos a ir a la pagina, recolectara la informacion proveniente del mismo y la tendra disponible para el codigo de PHP. Analicemos la siguiente linea para ver como funciona:

if (isset($_REQUEST["sexo"])) { $sexo=$_REQUEST["sexo"]; } else { $sexo=""; }
Anuncios

Si $_REQUEST(«sexo») contiene informacion, esto es verificado a traves del isset y el if, en caso de ser TRUE procedera a almacenar el contenido proveniente del campo sexo a la variable $sexo de lo contrario deja vacia a $sexo, esto es basicamente lo realizado por esta linea y el resto de las lineas iguales, como habran deducido sirve para que la informacion sea correctamente cargada, luego agregamos un simple if donde verifica si $nombre y $apellido tienen algun valor asignado y en caso de ser verdad procede a ejecutar el query de carga de los datos del nuevo alumno, este es un caso como dijimos anteriormente donde al ejecutarlo no obtendremos ninguna devolucion, y como saber si se ejecuto correctamente o no?, se puede utilizar algun manipulador de error de los citados anteriormente o hacer una conexion con el servidor para chequearlo, tambien veremos mas adelante varias formas por medio de las paginas. Este formulario de carga es bastante simple y solamente carga datos en la tabla alumnos. Pasemos a la siguiente pagina donde se cargan las notas y es un poco mas compleja:

ingreso.php

<?php

  if (isset($_REQUEST["examen"])) { $examen=$_REQUEST["examen"]; } else { $examen=""; }
  if (isset($_REQUEST["fecha"])) { $fecha=$_REQUEST["fecha"]; } else { $fecha=""; }
  if (isset($_REQUEST["alumno"])) { $alumno=$_REQUEST["alumno"]; } else { $alumno=""; }
  if (isset($_REQUEST["tipo"])) { $tipo=$_REQUEST["tipo"]; } else { $tipo=""; }
  if (isset($_REQUEST["nota"])) { $nota=$_REQUEST["nota"]; } else { $nota=""; }

  include ("tutorial.inc");
  $con=tutorial_connect();

  if ($nota!="")
  {
        if ($examen=="nuevo")
        {
                $queryExamen="insert into examenes values (NULL,'$fecha','$tipo')";
                $qExamen=mysqli_query($con,$queryExamen);
                $queryId="select id from examenes order by id desc limit 1";
                $qId=mysqli_query($con,$queryId);
                while($linea=mysqli_fetch_array($qId))
                {
                        $examen=$linea[0];
                }
        }
        $queryNota="insert into notas values ($alumno, $examen, $nota)";
        $qNota=mysqli_query($con,$queryNota);
  }

  $queryExamenes="select * from examenes order by id asc";
  $qExamenes=mysqli_query($con,$queryExamenes);
  $queryAlumnos="select id,apellido,nombre from alumnos order by id asc";
  $qAlumnos=mysqli_query($con,$queryAlumnos);

?>
<form name="form1" method="post" action="">
  <table width="500" border="1" cellpadding="0" cellspacing="0">
  <?php if($examen!="nuevo") { ?>
        <tr>
        <td>Elige el examen:</td>
        <td>
        <select name="examen" id="examen" onChange="window.document.form1.submit();">
                <option value="">--</option>
                <option value="nuevo">Nuevo</option>
                <?php while($linea=mysqli_fetch_array($qExamenes)) { ?>
                <option value="<?php echo $linea[0]; ?>" <?php if ($linea[0]==$examen) { ?>selected<?php } ?>><?php echo $linea[1]; ?></option>
                <?php }  mysqli_free_result($linea); ?>
        </select>
        </td>
        </tr>
  <?php } ?>
  <?php if($examen=="nuevo") { ?>
        <tr>
        <td>Ingresa la fecha (AAAA-MM-DD):</td>
        <td><input name="fecha" type="text" id="fecha">
        <input id="examen" name="examen" type="hidden" value="<?php echo $examen; ?>"></td>
        </tr>
        <tr>
        <td>Elige el tipo de examen </td>
        <td>
        <select name="tipo">
                <option value="">--</option>
                <option value="P">Parcial</option>
                <option value="E">Examen</option>
        </select>
        </td>
        </tr>
  <?php } ?>
        <tr>
        <td>Elige al alumno: </td>
        <td>
                <select name="alumno" id="alumno">
                <option value="">--</option>
                <?php while($linea=mysqli_fetch_array($qAlumnos)) { ?>
                <option value="<?php echo $linea[0]; ?>"><?php echo $linea[1]. ", " . $linea[2]; ?></option>
                <?php }  mysqli_free_result($linea); ?>
                </select>
        </td>
        </tr>
        <tr>
        <td>Ingresa la nota </td>
        <td><input name="nota" type="text" id="nota"></td>
        </tr>
  </table><br>
  <button type="button" onClick="window.document.form1.submit()">Submitir</button>
 &nbsp;&nbsp;&nbsp;
  <button type="button" onClick="location.href='alumnos.php'">Cancelar</button>
</form>
Anuncios

En este codigo, un poco mas complejo al anterior, vamos a ver una opcion interesante, primero tenemos la misma opcion de recoleccion de datos como en el ejemplo anterior, luego tenemos el codigo PHP y finalmente el formulario donde cargaremos la informacion, analicemos primero el codigo HTML.

Anuncios
Anuncios

Es un formulario donde vamos a tener dos opciones: una es cargar notas para los examenes ya existentes y otra para agregar nuevos examenes.

Obviamente en la primera opcion va a ser la mas sencilla donde utilizara el id del examen elegido, seleccionamos al alumno y finalmente ingresamos la nota. En el segundo caso, si elegimos Nuevo se submitira la pagina pero luego explicaremos porque no se sube informacion a las tablas, donde luego en la tabla ocultaremos la seleccion del examen para ingresar nosotros la fecha del nuevo, y tambien existe un campo oculto donde guarda el valor de $examen (en este caso, nuevo), despues es igual, seleccionamos al alumno e ingresamos la nota pasemos al codigo PHP, este como dijimos procesa la informacion proveniente del formulario pero nosotros agregamos un condicional if donde chequea si $nota tiene informacion, en caso de ser afirmativo procede a ejecutar dos queries, el primero esta hecho con un condicional donde verifica si $examen es igual a nuevo, en caso afirmativo este procede con la creacion del nuevo examen en la tabla examenes y asignarle un id, una vez ejecutado procedemos a obtener el nuevo valor id de examenes y lo asignamos a la variable $examen.

Anuncios

Despues salimos de este condicional y cargamos la nueva nota en la tabla notas, en caso de ser sobre un examen previamente cargado no pasa por el condicional anteriormente citado sino directamente ejecuta el ingreso en la tabla notas y como dijimos anteriormente esto solamente lo ejecutara si nosotros tenemos el valor de $nota de lo contrario lo omitira por esto al primer submit donde chequeamos la fecha del examen no se crea una entrada nueva en la tabla, despues estan los queries de busqueda de examenes y de alumnos para llenar las listas de los dos tags select en el formulario, y como explicamos anteriormente aqui usamos los while directamente en el tag select para generar las tags option y poder elegirlas tambien entre los tags option agregamos un codigo PHP donde ejecuta un condicional if y en caso de ser verdadero (donde el valor $examen es igual a $linea[0]) imprime el valor selected para ese valor de tag option. Es util para cuando submitimos nuestro formulario finalmente y cuando se recarga ya esta seleccionada la fecha. Hasta aqui todos los secretos de esta pagina ahora pasemos a la ultima, listado.php, donde la modificamos con respecto a la ultima vez porque ahora podremos ver las notas de los alumnos:

listado.php

<?php

  if (isset($_REQUEST["id"])) { $id=$_REQUEST["id"]; } else { $id=""; }
  include("tutorial.inc");

  $con=tutorial_connect();

  if ($id!="")
  {
  $queryNotas="select concat(alumnos.apellido,', ',alumnos.nombre) as nombre, examenes.fecha, notas.nota, examenes.tipo from notas,examenes,alumnos where notas.alumno_id=$id and examenes.id=notas.examen_id and alumnos.id=$id";
  $qNotas=mysqli_query($con,$queryNotas);
  $n=0;
  while($renglon=mysqli_fetch_array($qNotas))
  {
        $nombre=$renglon[0];
        $fecha[$n]=$renglon[1];
        $nota[$n]=$renglon[2];
        $tipo[$n]=$renglon[3];
        switch($tipo[$n])
        {
                case "P":
                        $tipo[$n]="Parcial";
                        break;
                default:
                        $tipo[$n]="Examen";
                        break;
        }
        $n++;
  }
  } else {
        $queryLista = "select concat(apellido,', ',nombre) as nombre, ciudad, edad, id from alumnos order by id asc";
        $qLista = mysqli_query($con,$queryLista);
        $l=0;
        while($linea=mysqli_fetch_array($qLista))
        {
                $nombre[$l]=$linea['0'];
                $ciudad[$l]=$linea['1'];
                $edad[$l]=$linea['2'];
                $codigo[$l]=$linea['3'];
                $l++;
        }
        mysqli_free_result($qLista);
  }

?>
<html>
<head>
  <title>Universidad de la Sarasa / Listado de Alumnos</title>
</head>
<body>
  <?php if ($id=="") { ?>
  <table width="500" border="1" cellpadding="0" cellspacing="0">
        <tr>
                <td>&nbsp;Nombre Completo</td>
                <td>&nbsp;Edad</td>
                <td>&nbsp;Ciudad de Origen</td>
        </tr>
        <?php for($m=0;$m<$l;$m++) {?>
        <tr>
                <td>&nbsp;<a href="listado.php?id=<?php echo $codigo[$m]; ?>"><?php echo $nombre[$m]; ?></a></td>
                <td>&nbsp;<?php echo $edad[$m]; ?></td>
                <td>&nbsp;<?php echo $ciudad[$m]; ?></td>
        </tr>
        <?php } ?>
  </table><br>
  <button onClick="location.href='alumnos.php'">Volver</button>
  <?php } else { ?>
  &nbsp;<?php echo $nombre; ?>
  <table width="300" border="0" cellpadding="0" cellspacing="0">
        <tr>
                <td>&nbsp;Fecha de examen</td>
                <td>&nbsp;Tipo de examen</td>
                <td>&nbsp;Nota</td>
        </tr>
        <?php for($m=0;$m<$n;$m++){ ?>
        <tr>
                <td>&nbsp;<?php echo $fecha[$m]; ?></td>
                <td>&nbsp;<?php echo $tipo[$m]; ?></td>
                <td>&nbsp;<?php echo $nota[$m]; ?></td>
        </tr>
        <?php } ?>
  </table><br>
  <button onClick="location.href='listado.php'">Volver</button>
  <?php } ?>
</body>
</html>
Anuncios

En esta ultima pagina, veremos el listado de alumnos, con algunos datos sobre ellos como son Nombre completo, edad, ciudad de origen y provincia. Todo esto lo hicimos en el principio del post pero en ahora le agregamos un link a cada nombre para al elegirlo y que nos devuelve los examenes rendidos, el tipo de examen y la nota de ese examen.

Anuncios
Anuncios

Analicemos el codigo HTML, es una tabla simple donde va a mostrar el resultado de nuestro listado de alumnos siempre y cuando no hayamos elegido alguno, en el caso de seleccionar alguno ocultara esta tabla y nos mostrara una tabla con las fechas, tipo de examen y notas dando como opcion el volver al listado de alumnos todo esto gracias al elegir el link este vuelve a llamar a si mismo pero informando el valor del id del alumno (P.E: listado.php?id=1). En el codigo PHP, observemos para conseguir el valor del id utilizamos $_REQUEST, como dije anteriormente no solamente recupera informacion de formularios sino tambien de la URL. como en este caso, despues de conectarnos tenemos un condicional if donde evaluara si $id es distinto de nada o no, en caso de tener un valor este procede a ejecutar un query para obtener el nombre y apellido (esto a traves de un concat para verlo como un solo campo), todos los examenes y notas, si observan para el nombre no utilizo ningun Array, en cambio para el resto de la informacion es implementado. Esto nos ayudara a la hora de hacer la tabla porque nos permite tener el nombre aislado y ponerlo encima de la misma para luego a traves de un for generar la tabla correspondiente, esto es en el caso de que id tenga algun valor pero en caso contrario ejecutara el query del listado de alumnos, tambien con un Array para luego ser completado via un for. En la pagina tenemos las dos tablas pero en base a su id tiene un valor o no, mostrara una u otra, el listado de alumnos o las notas del alumno. Como ven es bien simple pero para el usuario resulta mucho mas practico que conectarse via terminal o putty para obtener esa informacion y como dijimos en el ingreso de nuevos alumnos aca se podria verificar si los mismos fueron cargados correctamente o en el total de alumnos cargados de la pagina inicial, antes de terminar veamos como trabajan nuestras paginas finales

Anuncios

Con esto, se termina la explicacion del API de PHP para mysql, algunas personas prefieren utilizar solamente PHP para generar los tags de HTML a traves de funciones  y crear las paginas completamente de esta forma, en lo personal prefiero utilizar 50 y 50, como les mostre en los ejemplos porque ustedes podrian generar la pagina con cualquier editor HTML y despues ir generando los contenidos insertando el codigo de PHP, es decir generar el «esqueleto» con HTML y los datos extraerlos desde el servidor de mysql pero como digo siempre queda al criterio del programador.

Anuncios

En resumen, hemos aprendido algunas cosas muy basicas de PHP, como manipular informacion, como mostrarla, como interactuar y permitir el envio de informacion ya sea desde un formulario o via URL, como tenemos ciertos dinamismos en la pagina porque el contenido variara en base a nuestras bases y tambien podemos mezclarlo con Javascript, por ejemplo, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.50

Anuncio publicitario