El código que vamos a presentar a continuación viene a cubrir dos objetivos fundamentales. Por un lado, vamos a ver como podemos crear diferentes registros con los datos enviados a través de un campo textarea. Por otro lado, vamos a ver un caso que nos exigirá hacer lo antedicho, como es el caso de realizar cálculos estadísticos, y veremos el gran potencial de MySQL.
Como ya vimos en este artículo, podemos calcular la media aritmética de un conjunto de datos fácilmente, si los datos los pasamos por un array. No obstante esto tiene algunas limitaciones, siendo la fundamental, que los datos con los que operamos no los podemos guardar para utilizarlos en otro momento. Otras limitaciones podrían ser los tipos de cálculos que podemos realizar.
Antes de continuar, haré un inciso. Este código va a ser utilizado para un caso muy concreto y especifico, como es el cálculo estadístico, cosa que para algunos puede resultar poco útil. Pero en esencia, puedes utilizar este mismo código para guardar, por ejemplo, los títulos de tus películas favoritas, eso si, tendrías que cambiar el tipo de campo de la base de datos, de “double” a “varchar”, “text”, etc. Por supuesto, también eliminar la parte de cálculo estadístico, ya que si no hay valores numéricos, podría dar error, o sencillamente no habría respuesta.
Dicho esto, vamos a comentar un poco en que consiste el código.
1) Lo primero que necesitamos es un formulario, nos vale perfectamente el formulario del artículo antedicho.
2) Al igual que en el caso mencionado, enviaremos los valores numéricos separados por saltos de línea. Precisamente los saltos de línea, los usuaremos para separar los diferentes valores numéricos unos de otros.
3) Una vez tenemos los valores en un array, podemos ya guardar estos datos en nuestra base de datos.
4) Una vez los valores están en la base de datos, mediante MySQL vamos a calcular algunos datos estadísticos, como la media, desviación típica, tamaño de la muestra, etc.
5) Mostraremos la tabla de resultados estadísticos.
6) Mostramos el conjunto de datos que hemos analizado.
7) Último, y muy importante para el caso que nos ataña. Eliminar los datos guardados en la base de datos, para que los cálculos que realicemos sean únicamente de los datos que introducimos, y no se acumulen datos de otros cálculos en la base de datos.
Dicho esto, también quiero añadir, ya que hemos tratado el tema de la estadística, algunos operadores de MySQL que serán de gran interés para el desarrollo de cálculos estadísticos de tipo paramétrico, estos son:
AVG ---------- media aritmética.
SUM ---------- sumatorio o suma.
COUNT ---------- tamaño de la muestra.
MAX ---------- valor máximo.
MIN ---------- valor mínimo.
VAR_POP ---------- varianza población.
STDDEV_POP ---------- desviación típica o estándar de la población.
VAR_SAMP ---------- varianza muestra.
STDDEV_SAMP ---------- desviación típica o estándar de la muestra.
Por ultimo, podréis ver el código SQL de la tabla para importarla a vuestra base de datos.
El código es el siguiente:
----------- form.php
<html>
<head>
<title>Cálculos estadísticos con PHP y MySQL.</title>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<p>Introduce valores numéricos separándolos en diferentes líneas pulsando INTRO.</p>
<form method="POST" action="procesa_valores.php">
<p><textarea rows="20" name="valores" cols="40"></textarea></p>
<p><input type="reset" value="Restablecer" name="B2">
<input type="submit" value="Enviar" name="B1"></p>
</form>
</body>
</html>
----------- procesa_valores.php
<?php
error_reporting(-1);
ini_set("display_errors", 1);
$valor = $_POST["valores"]; // Recibimos valores de textarea
$valore = chop($valor); // Elimina saltos de linea y espacio, pero solo al final de la cadena
$valores = nl2br($valore); // Agregamos los saltos de linea <br />
// Creamos array con los datos recibidos usando como separador el salto de linea
$array_datos = explode("<br />", $valores);
foreach ($array_datos as $valor) // Creamos un bucle foreach
{
include("abre_conexion.php"); // Guardamos los datos en una base de datos
$_GRABAR_SQL = "INSERT INTO $tabla (valores) VALUES ('".$valor."')";
mysql_query($_GRABAR_SQL);
}
?>
<html>
<head>
<title>Cálculos estadísticos con PHP y MySQL.</title>
<meta name="robots" content="noindex, nofollow" />
</head>
<body>
<?php
// Realizamos algunos calculos estadisticos que pueden ser de interes
// ----------------------------------------------------------------
// Operacion con columna: SUMA
$suma_columna = mysql_query("SELECT SUM(valores) FROM $tabla" ,$conexion_db);
while ($registro_suma = mysql_fetch_row($suma_columna)){
foreach($registro_suma as $calcular_suma){
// echo "Suma = $calcular_suma<br>";
}
}
// ----------------------------------------------------------------
// Operacion con columna: MEDIA ARITMETICA
$media_columna = mysql_query("SELECT AVG(valores) FROM $tabla" ,$conexion_db);
while ($registro_media = mysql_fetch_row($media_columna)){
foreach($registro_media as $calcular_media){
// echo "Media = $calcular_media<br>";
}
}
// ----------------------------------------------------------------
// Operacion con columna: DESVIACIÓN TÍPICA MUESTRAL
$d_tipica_m = mysql_query("SELECT STDDEV_SAMP(valores) FROM $tabla" ,$conexion_db);
while ($registro_d_tipica_m = mysql_fetch_row($d_tipica_m)){
foreach($registro_d_tipica_m as $calcular_d_tipica_m){
// echo "D. típica = $calcular_d_tipica_m<br>";
}
}
// ----------------------------------------------------------------
// Operacion con columna: NUMERO DE CASOS
$casos_columna = mysql_query("SELECT COUNT(valores) FROM $tabla" ,$conexion_db);
while ($registro_casos = mysql_fetch_row($casos_columna)){
foreach($registro_casos as $calcular_casos){
// echo "N. de casos = $calcular_casos<br>";
}
}
// ----------------------------------------------------------------
// Calculamos la varianza muestral
$calcular_vari_m = pow($calcular_d_tipica_m, 2);
?>
</table>
<?php
// Mostramos los resultados estadisticos en una tabla
echo "
<table border=\"1\" width=\"600\" style=\"font-family: Verdana; font-size: 10pt\" id=\"table1\">
<tr>
<td colspan=\"2\">
<p align=\"center\"><b>CÁLCULOS ESTADÍSTICOS</b></td>
</tr>
<tr>
<td width=\"254\">Media: </td>
<td>$calcular_media</td>
</tr>
<tr>
<td width=\"254\">Varianza muestral: </td>
<td>$calcular_vari_m</td>
</tr>
<tr>
<td width=\"254\">Desviación típica muestral: </td>
<td>$calcular_d_tipica_m</td>
</tr>
<tr>
<td width=\"254\">Tamaño muestral: </td>
<td>$calcular_casos</td>
</tr>
<tr>
<td width=\"254\">Suma muestra: </td>
<td>$calcular_suma</td>
</tr>
</table>
";
?>
<!-- Mostramos los datos sobre los que vamos a realizar los cálculos estadísticos -->
<table border="1" width="600" id="table1">
<tr>
<td>ID</td>
<td>MUESTRA</td>
</tr>
<?php
// Mostramos los datos duardados en base de datos, es decir, los valores sobre los que realizamos los calculos
$_CONSULTA_SQL = "SELECT * FROM $tabla ORDER BY id ASC";
$_RESULT = mysql_query($_CONSULTA_SQL);
while ($registro = mysql_fetch_array($_RESULT)){
echo "
<tr>
<td>".$registro['id']."</td>
<td>".$registro['valores']."</td>
</tr>
";
}
echo "</table>";
// Vaciamos la tabla de la base de datos una vez realizados los calculos
$query = "TRUNCATE TABLE $tabla";
$result = mysql_query($query);
include("cierra_conexion.php");
?>
</body>
</html>
----------- Tabla base de datos
CREATE TABLE IF NOT EXISTS `nombre_tabla` (
`id` int(9) NOT NULL AUTO_INCREMENT,
`valores` double NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;