La tercera versión, mantenimiento completo y ajax.
Ejercicio detalle
Función en adb:
function creaSelect($tabla,$campo,$id="selRegistro"){ $filas=$this->seleccionar($tabla,0,-1); ?> <select id="<?=$id?>"> <option value="0">Seleccione...</option> <?php foreach($filas as $fila){ ?> <option value="<?=$fila["id$tabla"]?>"><?=$fila["$campo"]?></option> <?php } ?> </select> <?php }
Detalle:
require_once 'adb.php'; $adb=new adb(); $adb->creaSelect('test', 'nombre');
Detalle, script:
$(function() { $( "#selRegistro" ).change(function(){ console.log($(this).val()); $.get("ajax.php",{detalle:1,tabla:'test',id:$(this).val()}, function(data, status){ $("#resultado").html(data); }); }); });
ajax.php
if (isset($_GET['detalle']) && isset($_GET['id']) && isset($_GET['tabla'])){ $filas=$adb->seleccionarId($_GET['tabla'], $_GET['id']); echo json_encode($filas); }
Cambio en seleccionar:
$sql = "select * from $tabla " . (empty($cond) ? '' : " where $cond ") . (($numero!=-1)?" limit $inicio,$numero ":"");
Cambios en adb para introducir ajax
Función en adb:
function seleccionarAuto($tabla, $campo, $term="",$inicio = 0, $numero = 10) { try { $sql = "select * from $tabla where $campo like '%$term%' limit $inicio,$numero "; $sqlst = $this->con->prepare($sql); $sqlst->execute(); $this->filas = $sqlst->fetchAll(PDO::FETCH_ASSOC); $res=array(); foreach ($this->filas as $fila){ $res[]=$fila[$campo]; } return $res; } catch (Exception $ex) { $this->tratarError("seleccionar", $ex->getMessage(), $sql); die($ex->getMessage()); } }
La página ajax.php:
require_once "adb.php"; $adb=new adb(); if (isset($_GET['buscar']) && isset($_GET['tabla']) && isset($_GET['campo'])){ $filas=$adb->seleccionarAuto($_GET['tabla'],$_GET['campo'],$_GET['term'],0,10); echo json_encode($filas); }
La llamada:
$(function() { $( "#buscar" ).autocomplete({ source: "ajax.php?buscar=1&tabla=test&campo=nombre", minLength: 2, }); });
Busqueda con get (ajax 2)
$nombres="ana,juan,eva,luis,rosa,jose,marc"; $nombres=explode(",",$nombres); if (!empty($_GET['cadena'])) { $res=""; foreach($nombres as $nombre){ if (strpos($nombre,$_GET['cadena'])!==false){ $res.=$nombre." "; } } echo $res; } else{ echo "Faltan datos"; }
HTML:
$(document).ready(function(){ $("#nombre").keyup(function(){ var nom=$("#nombre").val(); $.get("busqueda.php",{cadena:nom}, function(data, status){ $("#resultado").html(data); console.log("Datos: " + data + "\nStatus: " + status); }); }); });
Ajax con jquery (1)
tabla.php
if (empty($_GET[‘numero’])) $num=1; else $num=$_GET[‘numero’];
for ($i=1;$i<=10;$i++){
echo «$i x $num=».($i*$num).»<br/>»;
}
test.html
$(document).ready(function(){ $.get(«tablas.php»,{numero:5}, function(data, status){ console.log(«Datos: » + data + «\nStatus: » + status); }); });
Nueva versión:
$(document).ready(function(){ $(«#ver»).click(function(){
var num=$(«#numero»).val();
$.get(«tablas.php»,{numero:num}, function(data, status){
$(«#resultado»).html(data);
console.log(«Datos: » + data + «\nStatus: » + status); }); }); });
Mini framework version 2
Segunda versión del miniframework, con funciones HTML incluídas:
Funciones HTML
Estas son las primeras funciones para crear HTML:
function creaCampos($tabla) {
$campos = $this->getColumnas($tabla);
foreach ($campos as $campo) {
if ($campo != «id» . $tabla) {
?>
<p><label><?= ucwords($campo) ?>:</label> <input class=»form-control» placeholder=»Introduzca el <?= ucwords($campo) ?>» type=»text» name=»<?= $campo ?>» /></p>
<?php
}
}
}
function creaCamposDatos($tabla, $fila) {
$campos = array_keys($fila);
foreach ($campos as $campo) {
?>
<p><label><?= ucwords($campo) ?>:</label> <input class=»form-control» value=»<?= $fila[$campo] ?>» type=»text» name=»<?= $campo ?>» <?= ($campo == «id» . $tabla) ? ‘readonly’ : » ?> /></p>
<?php
}
}
Mini framework version 1
Esta es la primera versión al completo del framework de clase:
Mini framework
Primera parte de la clase para conectar adb:
class adb {
private $server = «localhost»;
private $user = «root»;
private $pass = «intelisen»;
private $db = «tienda»;
private $log = «errores.log»;
private $con;
public $numFilas;
public $filas;
function __construct() {
$this->conectar();
}
/**
* Devuelve el número de filas de una tabla
*
* @param string $tabla Tabla a buscar
* @param string $cond Condición opcional para el where
* @return int Número de filas
*/
function numFilas($tabla, $cond = «») {
try {
$sql = «select count(*) as total from $tabla » . (empty($cond) ? » : » where $cond»);
$sqlst = $this->con->prepare($sql);
$sqlst->execute();
$fila = $sqlst->fetch(PDO::FETCH_ASSOC);
$this->numFilas = $fila[‘total’];
return $this->numFilas;
} catch (Exception $ex) {
$this->tratarError(«numFilas», $ex->getMessage(), $sql);
die($ex->getMessage());
}
}
/**
* Selecciona los registros de una tabla.
*
* Podemos añadir los datos del limit y una condición para el where
*
* @param string $tabla Tabla de la base de datos
* @param int $inicio Registro inicial
* @param int $numero Número de registros
* @param string $cond Condición para el where
* @return Array Registros de la base de datos
*/
function seleccionar($tabla,$inicio=0,$numero=10,$cond=»») {
try{
$sql = «select * from $tabla » . (empty($cond) ? » : » where $cond «). » limit $inicio,$numero «;
$sqlst = $this->con->prepare($sql);
$sqlst->execute();
$this->filas = $sqlst->fetchAll(PDO::FETCH_ASSOC);
return $this->filas;
} catch (Exception $ex) {
$this->tratarError(«seleccionar», $ex->getMessage(),$sql);
die($ex->getMessage());
}
}
function seleccionarId($tabla,$id){
try{
$condicion=»id$tabla=$id»;
$filas=$this->seleccionar($tabla,0,1,$condicion);
if (count($filas)>0) return $filas[0];
} catch (Exception $ex) {
$this->tratarError(«numFilas», $ex->getMessage());
die($ex->getMessage());
}
}
function conectar() {
try {
$this->con = new PDO(«mysql:host=$this->server;dbname=$this->db;charset=utf8», $this->user, $this->pass);
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $ex) {
$this->tratarError(«conectar», $ex->getMessage());
die($ex->getMessage());
}
}
private function tratarError($origen, $error, $sql = «») {
$f = fopen($this->log, «a»);
fwrite($f, $origen . «|» . $error . «\r\n»);
if (!empty($sql)) {
fwrite($f, $sql . «\r\n»);
}
fclose($f);
}
}