martes, 15 de septiembre de 2009

Clase Query Conexión III parte

He estado avanzando bastante en la clase query conexión, realmente me está ayudando bastante en la creación de un proyecto que estoy haciendo, ojala le sirva a alguien más por ahí.
Después coloco ejemplos de cómo funciona.
<?php
/**
*
* @Clase principal de conexion y query. "clases.php"
* @versión: 9.09.14 @modificado: 14 de septiembre de 2009
* @autor: RadicalEd
*
**/


class SQL
{
//Variables públicas
public $result;
public $numrows;
public $arrayRegistros;
public $ultimo;

//Constructor
function SQL($host='localhost', $db='dymb2b', $user='usdym', $password='clio1214')
{
$this->database = mysql_connect($host, $user, $password) or die("No se pudo conectar con el servidor".mysql_error());
@mysql_select_db($db) or die( "No se pudo conectar a la db: " . mysql_error());
}

//Este método mostrará datos de una consulta de varias tablas
public function query($query, $tipo=0, $error='Query ejecutado incorrectamente')
{
$this->result = mysql_query($query) or die(mysql_error($error));

//Dependiendo del tipo de consulta SQL escojida
//extraemos las variables
switch($tipo)
{
case 0: //SELECT
$this->numrows = mysql_num_rows($this->result);
$this->arrayRegistros = mysql_fetch_array($this->result);
$this->ultimo = '';
break;
case 1: //INSERT
$this->ultimo = mysql_insert_id();
$this->numrows = '';
$this->arrayRegistros = '';
break;
case 2: //UPDATE
case 3: //DELETE
case 4: //ALTER
$this->numrows = '';
$this->arrayRegistros = '';
$this->ultimo = '';
break;
}

//Estos son todos los datos que se pueden extraer de un query
//Aca lo que se hace es devolverlo todo en un array
$arrayRetorno = array($this->result, $this->numrows, $this->arrayRegistros, $this->ultimo);

return $arrayRetorno;
}

//Este nos imprimirá un tag <table> compuesto de varios campos de
//tablas diferentes en forma vertical, además se puede agregar un link
//para ir hacía un script diferente
public function tablaVertical($query, $camposTabla, $link='0', $pagina='')
{
$tabla = '<div align="center"><table border="1" cellpadding="1" cellspacing="1"><tbody><tr>';

//Para saber el porcentaje de tamaño de cada campo
/*$porc = 100/count($camposTabla);
$porc = floor($porc);*/


//Acá mostrará los encabezados de la tabla
foreach($camposTabla as $campo)
{
//Si el campo es PRECIO entonces al final añadimos una columna más para la suma
if ($campo=='PRECIO')
{
$tabla .= '<td align="center" class="letratd"><strong>'.$campo.'</strong></td>
<td align="center" class="letratd"><strong>TOTAL</strong></td>'
;
}
else
{
$tabla .= '<td align="center" class="letratd"><strong>'.$campo.'</strong></td>';
}
}

$tabla .= '</tr>';

//Ejecuto el query y obtengo un array con este
$array = $this->query($query);

$n = 0;
while($n<$array[1])
{
$tabla .= '<tr>';

$cmp = 0; //Esta variable nos sirve para saber cuando el primer campo es un link

//Se recorre el array de Datos
foreach($camposTabla as $campo)
{
$registro = mysql_result($array[0],$n,$campo);

//Confirmamos si es una imagen u otro tipo de dato
if (substr($registro, -3) == 'jpg' || substr($registro, -3) == 'bmp')
{
$tabla .= '<td align="center" class="letratd"><div id="pic">
<a class="p1" href="#" title="miniatura">
<img src="'
.$registro.'" width="50" height="50" title="miniatura">
<img src="'
.$registro.'" class="large">
</a>
</div></td>'
;
}
else
{
//Si el parámetro link esta a 1 y la variable cmp es igual a 0
//entonces se imprimira el enlace
if ($link=='1' && $cmp==0)
{
/*************NOTA*****************
* SE DEBERA TENER EN CUENTA QUE EL ID DEL LINK SIEMPRE DEBERA SER EL PRIMER
* CAMPO DEL QUERY, PARA QUE EL "mysql_result" PUEDA BUSCAR EL CAMPO 0
*/


//Si el dato está vacio, entonces imprimo el id
if ($registro=='')
{
$tabla .= '<td class="letratd" align="center"><a href="'.$pagina.mysql_result($array[0],$n, 0).'">'.mysql_result($array[0],$n, 0).'</a></td>';
$cmp = 1;
}
else
{
$tabla .= '<td class="letratd" align="center"><a href="'.$pagina.mysql_result($array[0],$n, 0).'">'.$registro.'</a></td>';
$cmp = 1;
}
}
else
{
//Si es un registro de tipo número, lo centramos en el campo de la tabla
if (is_numeric($registro))
{
//Una forma fea pero no tengo de otra para hacer la suma de campos
if ($campo=='CANTIDAD')
{
$cantidad = $registro;
}
//Si es un campo moneda; se diferenciará por que siempre el dato del
//array se deberá llamar PRECIO y calculamos el precio
if ($campo=='PRECIO')
{
$tabla .= '<td class="letratd" align="right">$ '.$registro.'</td>
<td class="letratd" align="right">$ '
.$registro*$cantidad.'</td>';
$total += $registro*$cantidad;
$precio = 1; //Nos servira para imprimir el total al final
}
else
{
$tabla .= '<td class="letratd" align="center">'.$registro.' </td>';
}
}
else
{
$tabla .= '<td class="letratd">'.$registro.' </td>';
}
}
}
}
$tabla .= '</tr>';

$n++;
}

//Lo mismo que la anterior si hay un campo precio, entonces al final
//se imprimirá un valor total
if ($precio==1)
{
$tabla .= '<tr><td colspan="'.count($camposTabla).'" align="right" class="letratd"><b>TOTAL</b></td><td class="letratd" align="right"><b>$ '.$total.'</b></td></tbody></table></div>';
}
else
{
$tabla .= '</tbody></table></div>';
}

//Devolvemos un array con todos los datos necesarios
$arrayRetorno = array($array, $tabla);
return $arrayRetorno;
}

//Este nos imprimirá un tag <table> compuesto de varios campos de
//tablas diferentes en forma horizontal
public function tablaHorizontal($query, $camposTabla)
{
$tabla = '<div align="center">
<table border="1" cellpadding="1" cellspacing="1">
<tbody>'
;

$n = 0;
//Ejecuto el query y obtengo un array con este
$array = $this->query($query);
if ($row=$array[2])
{
//Acá mostrará los encabezados de la tabla
foreach($camposTabla as $campo)
{
$tabla .= '<tr>
<td class="letratd"><strong>'
.$campo.'</strong></td>
<td class="letratd">'
.$row[$n].'</td>
</tr>'
;
$n++;
}
}

$tabla .= '</tbody></table></div>';

//Devolvemos un array con todos los datos necesarios
$arrayRetorno = array($array, $tabla);
return $arrayRetorno;
}

//Este nos imprimirá un tag <table> compuesto de varios campos de
//tablas diferentes y un campo de texto
public function campoTextoVertical($query, $camposTabla)
{
$tabla = '<div align="center"><table border="1" cellpadding="1" cellspacing="1"><tbody><tr>';

//Acá mostrará los encabezados de la tabla
foreach($camposTabla as $campo)
{
$tabla .= '<td align="center" class="letratd"><strong>'.$campo.'</strong></td>';
}

$tabla .= '<td align="center" class="letratd"><strong>CANTIDAD</strong></td></tr>';

//Ejecuto el query y obtengo un array con este
$array = $this->query($query);

$n = 0;
while($n<$array[1])
{
$tabla .= '<tr>';

//Se recorre el array de Datos
foreach($camposTabla as $campo)
{
$registro = mysql_result($array[0],$n,$campo);

//Confirmamos si es una imagen u otro tipo de dato
if (substr($registro, -3) == 'jpg' || substr($registro, -3) == 'bmp')
{
$tabla .= '<td align="center" class="letratd"><div id="pic">
<a class="p1" href="#" title="miniatura">
<img src="'
.$registro.'" width="50" height="50" title="miniatura">
<img src="'
.$registro.'" class="large">
</a>
</div></td>'
;
}
else
{
//Vamos a crear un campo array con el código de item
if ($campo=='CODIGO')
{
$tabla .= '<td class="letratd" align="center">'.$registro.'
<input type="hidden" name="item[]" size="10" style="text-align: center;" value="'
.$registro.'"></td>';
}
else
{
//Si es un registro de tipo número, lo centramos en el campo de la tabla
if (is_numeric($registro))
{
$tabla .= '<td class="letratd" align="center">'.$registro.' </td>';
}
else
{
$tabla .= '<td class="letratd">'.$registro.' </td>';
}
}
}
}
$tabla .= '<td class="letratd" align="center">
<input type="text" name="cantidad[]" size="5" style="text-align: center;">
</td></tr>'
;

$n++;
}

$tabla .= '</tbody></table></div>';

//Devolvemos un array con todos los datos necesarios
$arrayRetorno = array($array, $tabla);
return $arrayRetorno;
}

//Este nos imprimirá un tag <table> compuesto de varios campos de
//tablas diferentes y un campo de texto
public function tablaImagenTexto($query, $camposTabla)
{
$tabla = '<div align="center">
<table border="1" cellpadding="1" cellspacing="1">
<tbody><tr>'
;

//Ejecuto el query y obtengo un array con este
$array = $this->query($query);
$n = 0;
$z = 0;
//while ($row=mysql_fetch_array($array[0]))
while ($z<$array[1])
{
//Esto es propio del desarrollo, lo quitaré después
//de usar thumbnails
$img = str_replace('img/colecciones/', 'img/colecciones/g', mysql_result($array[0], $z, $camposTabla[0]));

//Cada 4 impresiones me voy a la siguiente línea
if ($n==4)
{
//el rel="lightbox" del vínculo es para que funcione el popup de imágenes
$tabla .= '</tr><tr>
<td align="center">
<a href="'
.$img.'" rel="lightbox" title="'.mysql_result($array[0], $z, $camposTabla[2]).'<br>'.mysql_result($array[0], $z, $camposTabla[1]).'">
<img src="'
.mysql_result($array[0], $z, $camposTabla[0]).'" width="100" height="100" border="0">
</a>
<br /><b>'
.mysql_result($array[0], $z, $camposTabla[2]).'</b>
<br />'
.mysql_result($array[0], $z, $camposTabla[1]).'
<input type="text" name="cantidad[]" size="5" maxlength="3" style="text-align: center;">
<input type="hidden" name="item[]" size="10" style="text-align: center;" readonly value="'
.mysql_result($array[0], $z, $camposTabla[3]).'">
</td>'
;
$n = 1;
}
else
{
//el rel="lightbox" del vínculo es para que funcione el popup de imágenes
$tabla .= '<td align="center">
<a href="'
.$img.'" rel="lightbox" title="'.mysql_result($array[0], $z, $camposTabla[2]).'<br>'.mysql_result($array[0], $z, $camposTabla[1]).'">
<img src="'
.mysql_result($array[0], $z, $camposTabla[0]).'" width="100" height="100" border="0">
</a>
<br /><b>'
.mysql_result($array[0], $z, $camposTabla[2]).'</b>
<br />'
.mysql_result($array[0], $z, $camposTabla[1]).'
<input type="text" name="cantidad[]" size="5" maxlength="3" style="text-align: center;">
<input type="hidden" name="item[]" size="10" style="text-align: center;" readonly value="'
.mysql_result($array[0], $z, $camposTabla[3]).'">
</td>'
;
$n++;
}
$z++;
}
$tabla .= '</tbody></table></div>';

//Devolvemos un array con todos los datos necesarios
$arrayRetorno = array($array, $tabla);
return $arrayRetorno;
}
}
?>