Mis Funciones en PHP, by Diabliyo

Iniciado por Diabliyo, 19 Julio 2008, 03:01 AM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

Que tal, pues dedicare este post para platicarles y mostrarles el codigo que utilizo en la mayoria de mis aplicaciones web en php, estas aplicaciones podran ser utilizadas en cual quier aplicacion personal ya que estan pensadas con la finalidad de ahorrar codigo y hacer un software mas rapido.

En este primer post mencionare unicamente el indice, he ire agregandole los sub-temas (segun el nombre de la funcion) al indice, para evitar hacer todo en un mismo POST.

Por otra parte, sientanse libres de criticar, aportar, modificar mis funciones en este mismo hilo, ya que mediante el indice podran dirigirse a cada uno de los temas (segun el nombre de la funcion) y poder enriquecer este posting con sus comentarios.




INDICE


  • Funciones para Bases de Datos

    • Introduccion
    • Conexion a la Base de Datos.
    • Inserciones
    • Actualizaciones
    • Eliminacion
    • Consultas



Continuara....

Diabliyo

#1
FUNCIONES PARA BASES DE DATOS.

Una Base de Datos es una herramienta que permite almacenar informacion y gestionar dicha informacion mediante algun gestor de base de datos, alguna aplicacion o directamente mediante funciones especificas de algun lenguaje de programacion.

Las bases de datos estan conformadas por tablas, estas a su vez contienen campos los cuales guardan informacion en cada campo segun el tipo de campo, existen diversion tipos de campos, algunos podrian se: Cierto numero de caracteres (varchar), texto (text), numeros cortos (int), numeros grandes (bigint), etc, etc.. Estos valores pueden ser insertados, actualizados o eliminados, de igual forma se pueden realizar busquedas extensas o cortas mediante algun campoa que coincida con una muestra o una determinada palabra.

INTRODUCCION.

Las funciones que se mostraran a continuacion presentan principalmente varios valores establecidos por defecto, los cuales son Variables Definidas, estas variables podran ser utilizadas en cualquier parte del codigo fuente que realizemos y pueden ser utilizadas con toda confianza, ya que estas variables estaran solo a disposicion de nuestro interprete PHP y jamas para el usuario que esta realizando consultas, busquedas o bien navegando en nuestro sitio web.

Tambien es importante saber cual es la configuracion que posee nuestro servicio php (php.ini), ya que estas funciones trabajan en la siguiente configuracion de php:

register_globals= off

Las Variables Definidas que utilizaremos son: variable_username, variable_password, variable_base y variable_hosting, estas variables sirven para conectarse (username, password) a una base de datos del host (hosting) y utilizar una Base de Datos (base) en especifico.

Conexion a la Base de Datos.

Esta funcion nos permite conectarnos a una base de datos (ya establecida) utilizando 4 variables definidas que son:


  • SERVER
    Variable definida que posee la direccion del hosting.
  • BASE_USR
    Variable definida que posee el nombre de usuario para conectarse a la base de datos.
  • BASE_PASS
    Variable definida que posee el password para conectarse a la base de datos.
  • BASE
    Variable definida que posee el nombre de la base de datos a utilizar.

Una vez realizada la llamada a esta funcion, realizara la conexion al hosting, seleccionara la base de datos y retornara el enlace de conexion ($link) para manipular nuestra base de datos.

Por lo general muchos programadores optan por hacer la llamada directamente cada vez antes que quieran manipular la base de datos, pero en este caso (en mis funciones), no se realizaran llamadas a conectar() directamente por nosotros, sino que nos dedicaremos unicamente a realizar la llamada a la funcion de manipulacion a la base de datos (insertar, actualizar, eliminar, listar, etc...) y que esta misma funcion realize la llamada a conectar() para ahorrar codigo ;).

Código (php) [Seleccionar]
//realiza conexion a la Base de Datos
function conectar()
{
if( !($link= mysql_connect( "". SERVER. "", "". BASE_USR. "", "". BASE_PASS. "" )) )
{
echo "<span id=\"letras_error\">Error 01: Error para Conectarse a MySQL.<br>";
echo "Error en Usuario y/o Contrase&ntilde;a.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
else if( !mysql_select_db( "". BASE. "", $link ) )
{
echo "<span id=\"letras_error\">Error 02: Problemas para Tomar la Base de Datos.<br>";
echo "No se Encuentra la Base de Datos.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
return $link;
}


Inserciones.

Ya que conocimos la funcion de conectar(), nos centraremos en la funcion de insertar.

Esta funcion nos servira para insertar datos a una tabla de la base de datos, utiliza dos argumentos los cuales son:


  • $base
    Es del tipo caracteres (char) y posee el nombre de la tabla que vamos a manipular.
  • $valores
    Es un arreglo (array), el cual recorre para divir su contenido en dos variables mas: $vars (variables o campos) y $datos (contenido que se les insertara a los campos)

Para llamar eficasmente a esta funcion, es necesario primero generar un arreglo con los campos y valores que contendra cada campo, despues realizar la llamada pasandole como argumento el nombre de la base de datos y el arreglo, en caso de error retorna un 0 .

Código (php) [Seleccionar]
//insercion de valores a una tabla
function insertar_bdd( $base_t, $valores )
{
$link= conectar();

if( count($valores)>0 ) //entonces existen valores en el array
{
$vars="";
$datos="";
$i=0;

while( list($a, $b)=each($valores) )
{
$i++;

$vars .= $a;
$datos .= $b;

if( $i!=count($valores) )
{
$datos .= ", ";
$vars .= ", ";
}
}

if( !($resp= mysql_query( "insert into ". $base_t. " ( ". $vars. " ) values( ". $datos. " );", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
unset( $valores );
unset($a);
unset($b);
unset($i);
unset( $var );
unset( $datos );
@mysql_close($link);
return $resp;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";

@mysql_close($link);
return "ERROR";
}


Este es un ejemplo de implementacion en codigo:

Código (php) [Seleccionar]
$trama= array(
          "nombre"=>"juan",
          "edad"=>"20",
          "sexo"="desconocido" );

if( !insertar_bdd( "AGENDA", $trama )
          echo "<br>Error al Insertar";
else          echo "<br>Datos insertados con exito.";


Actualizaciones.

Esta funcion nos permitira actualizar datos de una tabla de la base de datos, utiliza dos argumentos los cuales son:


  • $base
    Es del tipo caracteres (char) y posee el nombre de la tabla que vamos a manipular.
  • $valores
    Es un arreglo (array), el cual recorre para divir su contenido en dos variables mas: $vars (variables o campos) y $datos (contenido que se les insertara a los campos)

Para llamar eficasmente a esta funcion, es necesario primero generar un arreglo con los campos y valores que contendra cada campo, despues realizar la llamada pasandole como argumento el nombre de la base de datos y el arreglo, en caso de error retorna un 0 .

Tambien es importante tomar muy en cuenta el primer valor del arreglo, ya que este valor no sera actualizado, sino que se utilizara como valor para identificar el campo de la tabla que se actualizara.

Código (php) [Seleccionar]
//actualizar valores existentes de un campos de la tabla
function actualizar_bdd( $base_t, $valores )
{
$link= conectar();

if( count($valores)>0 ) //existen valores en el array
{
$condicion= "";
$datos="";
$i=0;

while( list($a, $b)=each($valores) )
{
$i++;
if( $i==1 )
$condicion .= $a. "=". $b;
else
{
$datos .= $a. "=". $b;

if( $i!=count($valores) )
$datos .= ", ";
}
}

if( !($resp= mysql_query( "update ". $base_t. " set ". $datos. " where ". $condicion. ";", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
unset( $datos );
unset($i);
unset($a);
unset($b);
@mysql_close($link);
return $resp;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";

@mysql_close($link);
return "ERROR";
}


Este es un ejemplo de implementacion en codigo:

Código (php) [Seleccionar]
$trama= array(
          "ID"=>"'4'",
          "nombre"=>"juan",
          "edad"=>"20",
          "sexo"="desconocido" );

if( !actualizar_bdd( "AGENDA", $trama )
          echo "<br>Error al Actualizar";
else          echo "<br>Datos insertados con exito.";


Eliminacion.

Esta funcion nos permitira eliminar datos de una tabla de la base de datos, utiliza dos argumentos los cuales son:


  • $base
    Es del tipo caracteres (char) y posee el nombre de la tabla que vamos a manipular.
  • $valores
    Es un arreglo (array), el cual recorre para divir su contenido en dos variables mas: $vars (variables o campos) y $datos (contenido que se les insertara a los campos)

Para llamar eficasmente a esta funcion, es necesario primero generar un arreglo con los campos y valores que contendra cada campo, despues realizar la llamada pasandole como argumento el nombre de la base de datos y el arreglo, en caso de error retorna un 0 .

Tambien es importante tomar muy en cuenta que solo es necesario un valor para eliminar de la base de datos, y para tener una mayor eficacia, se recomienda siempre utilizar valores unicos que ningun usuario pueda repetir, esto son valores de identificacion (ID).

Código (php) [Seleccionar]
//elimina una celda de la tabla
function eliminar_bdd( $base_t, $valores )
{
$link= conectar();

if( strchr( $valores, "=" ) ) //si existe el  :  tons ahi mas de 1 valor
{
$resp= mysql_query( "select * from ". $base_t. " where ". $valores. ";", $link );
if( mysql_num_rows($resp) == 0 )
return 0;

if( !(mysql_query( "delete from ". $base_t. " where ". $valores. ";", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
unset( $resp );
@mysql_close($link);
return 1;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";

@mysql_close($link);
return 0;
}


Este es un ejemplo de implementacion en codigo:

Código (php) [Seleccionar]


if( !eliminar_bdd( "AGENDA", "ID=5" )
          echo "<br>Error al Eliminar";
else          echo "<br>Datos insertados con exito.";

Hans el Topo

antes que nada decir que existe un post con chincheta para estos "truquillos/funciones"

http://foro.elhacker.net/php/pequenos_trucos_en_php-t152467.0.html

para conectar deberías de dejar la opción de enviar parámetros


function conectar($server=SERVER, $user=BASE_USR, $pass=BASE_PASS,$bd=BASE)
{
if( !($link= mysql_connect( "". $server. "", "". $user. "", "". $pass. "" )) )
{
echo "<span id=\"letras_error\">Error 01: Error para Conectarse a MySQL.<br>";
echo "Error en Usuario y/o Contrase&ntilde;a.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
else if( !mysql_select_db( "". $bd. "", $link ) )
{
echo "<span id=\"letras_error\">Error 02: Problemas para Tomar la Base de Datos.<br>";
echo "No se Encuentra la Base de Datos.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
return $link;
}


y para la insert ya que haces una función insert al menos valida los datos ...


por cierto existe un post
 

Diabliyo

#3
Cita de: Hans el Topo en 19 Julio 2008, 11:25 AM
antes que nada decir que existe un post con chincheta para estos "truquillos/funciones"

http://foro.elhacker.net/php/pequenos_trucos_en_php-t152467.0.html

para conectar deberías de dejar la opción de enviar parámetros


function conectar($server=SERVER, $user=BASE_USR, $pass=BASE_PASS,$bd=BASE)
{
if( !($link= mysql_connect( "". $server. "", "". $user. "", "". $pass. "" )) )
{
echo "<span id=\"letras_error\">Error 01: Error para Conectarse a MySQL.<br>";
echo "Error en Usuario y/o Contrase&ntilde;a.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
else if( !mysql_select_db( "". $bd. "", $link ) )
{
echo "<span id=\"letras_error\">Error 02: Problemas para Tomar la Base de Datos.<br>";
echo "No se Encuentra la Base de Datos.<br>";
echo mysql_error($link). "</span>";
$link= "INSTALL";
}
return $link;
}


y para la insert ya que haces una función insert al menos valida los datos ...


por cierto existe un post

En aplicaciones extensas es incomodo ese tipo de funcion con argumentos, ya que en el ejemplo que yo pongo, utilizo variables definidas ya que todas las variables definidas las tendremos en un archivo aparte (ej: config.php), de este modo es mas facil redefinir los datos.

Por otro lado, si lo utilizamos asi como variables normales, en muchos servidores existira problemas para transportar las variables ($user, $pass, $base, etc..) debido a la configuracion que tienen todos los servidores actualmente (register_globals=off)...

Es mas, no vayamos muy lejos, trata de investigar como maneja las variables principales este foro, y veras que las variables principales (username_base, pass_base, host, base) estan definidas como variables definidas....

Las Variables definidas pueden ser portadas a cualquier variable y traerkas contigo como si fuesen globales, solo que en este caso el usuario jamas las pincharia !!

Por ultimo, no es que ya exista tema "parecido", sino que siempre es bueno tener una forma distinta a las que comunmente sabemos.... Por ejemplo tu manera de realizar la conexion, para mi no es eficiente y es un desperdicion de generacion de variables !!... Por cierto, los trucos que se mencionan ahi no son muchos y si los comparamos, son muy pocos para los que mencionare aqui ;)




Diabliyo

#4
Consultas.

Bueno, he realizado un post a parte, porque esto de las consultas al principio se ve que con una sola o un par de funciones se puede hacer todo tipo de consultas, pero no es asi :D, es necesario minimo definir unas 4 funciones que conforme su experiencia y avance en algun proyecto de software veran la necesidad de crear mas funciones xD, aqui les hablare de varias funciones las cuales nos ayudaran a realizar cualquier cosa, vaya si emprendemos algun proyecto de software grande, estas funciones nos sacaran de muchos apuros.

Consultas Simple

Esta consulta sirve para realizar consultas comunes, simples y clasicas ;), utiiza dos argumentos que son:


  • $base_t
    Nombre de la tabla que vamos a manipular.
  • $valores
    Puede contener un '*' (para tomar todos los campos en la consulta) o bien las variables a consultas delimitadas por un ':' (ID:NOMBRE:DIRECCION:).

El parametro $valores es importante saberlo manipular, este puede ser manejado de dos formas: si solo se pasa un * (asterisco), entonces se asume que al consultarse en la tabla especificada, se tomaran todos los campos de la tabla. En cambio si solo y unicamente nos interesa saber los ID y NOMBRES de una tabla, entonces solo seteamos la variable $valores asi: ID:NOMBRE.

Código (php) [Seleccionar]
//consulta multiples valores a una Base de Datos. Donde los valores van delimitados
//por un ":" xD
function consultar( $base_t, $valores )
{
$link= conectar();

if( strchr( $valores, ":" ) ) //si existe el  :  tons ahi mas de 1 valor
{
$valores= str_replace( ":", ",", $valores ); //cambiamos el :  por  ,

if( !($resp= mysql_query( "select ". $valores. " from ". $base_t. ";", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
@mysql_close($link);
return $resp;
}
}
else if( !strcmp( $valores, "*" ) )
{
if( !($resp= mysql_query( "select * from ". $base_t. ";", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
@mysql_close($link);
return $resp;
}
}
else if( $valores ) //entonces solo se desea consulta 1 valor
{
if( !($resp= mysql_query( "select ". $valores. " from ". $base_t. ";", $link )) )
{
echo "<span id=\"letras_error\">Error 03: Problema para Realizar Movimiento/Consulta.";
echo mysql_error(). "</span>";
}
else
{
@mysql_close($link);
return $resp;
}
}
else
echo "<span id=\"letras_error\">Error 04: Problema para descifrar Datos para Realizar Consulta.</span>";

@mysql_close($link);
return "ERROR";
}


Este es un ejemplo de implementacion en codigo:

Código (php) [Seleccionar]
//vamos a mostrar todos los usuarios de nuestra tabla USUARIOS, pero solo mostraremos NOMBRE y DIRECCION.
$cons_user= consultar( "USUARIOS", "NOMBE:DIRECCION" );

while( $buf= mysql_fetch_array($cons_user) )
{
echo "<p>Nombre: ". $buf["NOMBRE"];
echo "<br>Direccion: ". $buf["DIRECCION"]. "</p>";
}

unset($buf);
unset($cons_user);

Hans el Topo

Cita de: Diabliyo en 19 Julio 2008, 19:02 PM
En aplicaciones extensas es incomodo ese tipo de funcion con argumentos, ya que en el ejemplo que yo pongo, utilizo variables definidas ya que todas las variables definidas las tendremos en un archivo aparte (ej: config.php), de este modo es mas facil redefinir los datos.

es incómodo para ti, para el resto de mortales no ya que otorga mayor usabilidad

Citar
Por otro lado, si lo utilizamos asi como variables normales, en muchos servidores existira problemas para transportar las variables ($user, $pass, $base, etc..) debido a la configuracion que tienen todos los servidores actualmente (register_globals=off)...

si te fijas bien y conoces lo que son parámetros opcionales, verás que el código da la opción (opcional) de utilizar otros parámetros de conexión, si no pones parámetros toma los valores por defecto que justamente son las variables globales del archivo conf... y como estamos hablando de funciones genéricas tu manera de hacerlo es menos eficiente


Citar
Es mas, no vayamos muy lejos, trata de investigar como maneja las variables principales este foro, y veras que las variables principales (username_base, pass_base, host, base) estan definidas como variables definidas....

Las Variables definidas pueden ser portadas a cualquier variable y traerkas contigo como si fuesen globales, solo que en este caso el usuario jamas las pincharia !!

yo las llamo variables globales ... el segundo párrafo que has puesto soy incapaz de comprenderlo

Citar
Por ultimo, no es que ya exista tema "parecido", sino que siempre es bueno tener una forma distinta a las que comunmente sabemos.... Por ejemplo tu manera de realizar la conexion, para mi no es eficiente y es un desperdicion de generacion de variables !!... Por cierto, los trucos que se mencionan ahi no son muchos y si los comparamos, son muy pocos para los que mencionare aqui ;)

de hecho yo tampoco comparto la manera en la que realizas la conexión :X
para gustos los colores
y si existe un post para estas cosas, digo yo que por mucho que tengas estará mejor ahí  :¬¬