Haremos una serie de modificaciones a nuestra aplicación de reconocimiento de voz luego de haber visto la estructura fundamental en los conceptos anteriores, ésto nos servirá para identificar que partes de la aplicación se deben modificar.
Modificar el acceso a datos utilizando la librería PDO.
Hay que hacer cambios en todos los archivos que accedemos a datos de MySQL.
conexion.php<?php function retornarConexion() { $server="localhost"; $usuario="root"; $clave=""; $base="base1"; return new PDO("mysql:dbname=$base;host=$server", "$usuario","$clave", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } ?>consulta.php
<?php header('Content-Type: application/json'); require("conexion.php"); $_GET['oracion'] = eliminarAcentos($_GET['oracion']); $_GET['oracion'] = strtolower($_GET['oracion']); //Tablas que se pueden analizar $tablas = array("clientes", "productos", "facturas", "categorias"); $tablaconsulta = ""; $palabras = explode(" ", $_GET['oracion']); foreach ($palabras as $palabra) { if (in_array($palabra, $tablas)) { $tablaconsulta = $palabra; } } quePuedoPreguntar(); require("reconocimiento/facturas.php"); consultasSobreFacturas(); require("reconocimiento/clientes.php"); consultasSobreClientes(); require("reconocimiento/productos.php"); consultasSobreProductos(); switch ($tablaconsulta) { case 'clientes': clientes(); break; case 'productos': productos(); break; case 'categorias': categorias(); break; case 'facturas': facturas(); break; } //------------------ Fin del bloque principal del programa --------------------------------------// function quePuedoPreguntar() { if ($_GET['oracion'] == 'que puedo preguntar') { mostrarPreguntas(); } if ($_GET['oracion'] == 'que puedo preguntar de clientes') { mostrarPreguntasClientes(); } if ($_GET['oracion'] == 'que puedo preguntar de productos') { mostrarPreguntasProductos(); } } function clientes() { $pdo = retornarConexion(); $sql = $pdo->prepare("select codigo,nombre,telefono,mail,direccion from clientes"); $sql->execute(); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); } function productos() { $pdo = retornarConexion(); $sql = $pdo->prepare("select pro.codigo as `codigo de producto`, pro.descripcion as `descripcion de producto`, precio, ca.descripcion as categoria from productos as pro join categorias as ca on ca.codigo=pro.codigocategoria"); $sql->execute(); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); } function categorias() { $pdo = retornarConexion(); $sql = $pdo->prepare("select codigo,descripcion from categorias"); $sql->execute(); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); } function facturas() { $pdo = retornarConexion(); $sql = $pdo->prepare(" select fact.codigo as codigo, date_format(fecha,'%d/%m/%Y') as fecha, nombre, round(sum(deta.precio*deta.cantidad),2) as importefactura from facturas as fact join clientes as cli on cli.codigo=fact.codigocliente join detallefactura as deta on deta.codigofactura=fact.codigo group by deta.codigofactura order by codigo desc" ); $sql->execute(); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); } function mostrarPreguntas() { echo ' [{"pregunta":"\"que puedo preguntar\""}, {"pregunta":"listado de \"productos\""}, {"pregunta":"listado de \"clientes\""}, {"pregunta":"listado de \"facturas\""}, {"pregunta":"listado de \"categorias\""}, {"pregunta":"\"factura de\" (apellido y nombre)"}, {"pregunta":"\"facturas de\" (apellido y nombre)"}, {"pregunta":"\"factura con importe menor a\" (importe)"}, {"pregunta":"\"facturas con importe menor a\" (importe)"}, {"pregunta":"\"factura con importe mayor a\" (importe)"}, {"pregunta":"\"facturas con importe mayor a\" (importe)"}, {"pregunta":"\"factura numero \" (numero)"}, {"pregunta":"\"facturas numero \" (numero)"}, {"pregunta":"\"mail de\" (apellido y nombre)"}, {"pregunta":"\"telefono de\" (apellido y nombre)"}, {"pregunta":"\"direccion de\" (apellido y nombre)"}, {"pregunta":"\"todos los datos de\" (apellido y nombre)"}, {"pregunta":"\"producto numero\" (numero)"}, {"pregunta":"\"precios de\" (nombre de cateroría)"} ]'; exit(0); } function mostrarPreguntasClientes() { echo ' [ {"pregunta":"listado de \"clientes\""}, {"pregunta":"\"factura de\" (apellido y nombre)"}, {"pregunta":"\"facturas de\" (apellido y nombre)"}, {"pregunta":"\"mail de\" (apellido y nombre)"}, {"pregunta":"\"telefono de\" (apellido y nombre)"}, {"pregunta":"\"direccion de\" (apellido y nombre)"}, {"pregunta":"\"todos los datos de\" (apellido y nombre)"} ]'; exit(0); } function mostrarPreguntasProductos() { echo ' [ {"pregunta":"\"producto numero\" (numero)"}, {"pregunta":"\"precios de\" (nombre de cateroría)"} ]'; exit(0); } function eliminarAcentos($oracion) { $oracion = str_replace('á', 'a', $oracion); $oracion = str_replace('é', 'e', $oracion); $oracion = str_replace('í', 'i', $oracion); $oracion = str_replace('ó', 'o', $oracion); $oracion = str_replace('ú', 'u', $oracion); return $oracion; }clientes.php
<?php //******************************Consultas sobre clientes */ function consultasSobreClientes() { global $palabras; if (strpos($_GET['oracion'], "mail de") !== false ) { $nombres = ''; for ($inicio = 2; $inicio < count($palabras); $inicio++) { $nombres .= $palabras[$inicio] . " "; } mailDe(trim($nombres)); } if (strpos($_GET['oracion'], "telefono de") !== false ) { $nombres = ''; for ($inicio = 2; $inicio < count($palabras); $inicio++) { $nombres .= $palabras[$inicio] . " "; } telefonoDe(trim($nombres)); } if (strpos($_GET['oracion'], "direccion de") !== false ) { $nombres = ''; for ($inicio = 2; $inicio < count($palabras); $inicio++) { $nombres .= $palabras[$inicio] . " "; } direccionDe(trim($nombres)); } if (strpos($_GET['oracion'], "todos los datos de") !== false ) { $nombres = ''; for ($inicio = 4; $inicio < count($palabras); $inicio++) { $nombres .= $palabras[$inicio] . " "; } todosLosDatosDe(trim($nombres)); } } function mailDe($persona) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select nombre, mail from clientes where nombre=:persona " ); $sql->execute(array("persona" => $persona)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function telefonoDe($persona) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select nombre, telefono from clientes where nombre=:persona "); $sql->execute(array("persona" => $persona)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function direccionDe($persona) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select nombre, direccion from clientes where nombre=:persona " ); $sql->execute(array("persona" => $persona)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function todosLosDatosDe($persona) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select nombre, telefono, mail, direccion from clientes where nombre=:persona " ); $sql->execute(array("persona" => $persona)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } ?>facturas.php
<?php //******************************Consultas sobre facturacion **************************************/ function consultasSobreFacturas() { global $palabras; if (strpos($_GET['oracion'], "facturas de") !== false || strpos($_GET['oracion'], "factura de") !== false) { $nombres = ''; for ($inicio = 2; $inicio < count($palabras); $inicio++) { $nombres .= $palabras[$inicio] . " "; } facturasde(trim($nombres)); exit(); } if ( strpos($_GET['oracion'], "facturas con importe menor a") !== false || strpos($_GET['oracion'], "factura con importe menor a") !== false ) { $importe = $palabras[count($palabras) - 1]; facturasConImporteMenorA($importe); exit(); } if ( strpos($_GET['oracion'], "facturas con importe mayor a") !== false || strpos($_GET['oracion'], "factura con importe mayor a") !== false ) { $importe = $palabras[count($palabras) - 1]; facturasConImporteMayorA($importe); exit(); } if ( strpos($_GET['oracion'], "factura numero") !== false || strpos($_GET['oracion'], "facturas numero") !== false ) { $numero = $palabras[count($palabras) - 1]; facturaNumero($numero); exit(); } } function facturasde($persona) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select fact.codigo as codigo, date_format(fecha,'%d/%m/%Y') as fecha, nombre, round(sum(deta.precio*deta.cantidad),2) as importefactura from facturas as fact join clientes as cli on cli.codigo=fact.codigocliente join detallefactura as deta on deta.codigofactura=fact.codigo where nombre=:persona group by deta.codigofactura order by codigo desc" ); $sql->execute(array("persona" => $persona)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function facturasConImporteMenorA($importe) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select fact.codigo as codigo, date_format(fecha,'%d/%m/%Y') as fecha, nombre, round(sum(deta.precio*deta.cantidad),2) as importefactura from facturas as fact join clientes as cli on cli.codigo=fact.codigocliente join detallefactura as deta on deta.codigofactura=fact.codigo group by deta.codigofactura having importefactura<:importe order by codigo desc" ); $sql->execute(array("importe" => $importe)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function facturasConImporteMayorA($importe) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select fact.codigo as codigo, date_format(fecha,'%d/%m/%Y') as fecha, nombre, round(sum(deta.precio*deta.cantidad),2) as importefactura from facturas as fact join clientes as cli on cli.codigo=fact.codigocliente join detallefactura as deta on deta.codigofactura=fact.codigo group by deta.codigofactura having importefactura>:importe order by codigo desc" ); $sql->execute(array("importe" => $importe)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function facturaNumero($numero) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select pro.descripcion as descripcion, deta.precio as precio, cantidad, round(deta.precio*deta.cantidad,2) as importefactura from detallefactura as deta inner join productos as pro on pro.codigo=deta.codigoproducto where codigofactura=:numero union select '', '', 'Total a pagar:', round(sum(deta.precio*deta.cantidad),2) as importefactura from facturas as fact join clientes as cli on cli.codigo=fact.codigocliente join detallefactura as deta on deta.codigofactura=fact.codigo where fact.codigo=:numero group by deta.codigofactura " ); $sql->execute(array("numero" => $numero)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } ?>productos.php
<?php //******************************Consultas sobre productos */ function consultasSobreProductos() { global $palabras; if (strpos($_GET['oracion'], "producto numero") !== false ) { $numero = $palabras[count($palabras) - 1]; articuloNumero($numero); exit(); } if (strpos($_GET['oracion'], "precios de") !== false || strpos($_GET['oracion'], "precio de") !== false) { $categoria = ''; for ($inicio = 2; $inicio < count($palabras); $inicio++) { $categoria .= $palabras[$inicio] . " "; } preciosDe(trim($categoria)); exit(); } } function articuloNumero($numero) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select codigo,descripcion,precio from productos where codigo=:numero " ); $sql->execute(array("numero" => $numero)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); } function preciosDe($categoria) { $pdo = retornarConexion(); $sql = $pdo->prepare(" select pro.descripcion as nombre, precio from productos as pro inner join categorias as cate on cate.codigo=pro.codigocategoria where cate.descripcion=:categoria" ); $sql->execute(array("categoria" => $categoria)); $resultado = $sql->fetchAll(PDO::FETCH_ASSOC); echo json_encode($resultado); exit(0); }
Sólo no sufre cambios el archivo 'index.html'