CODIGO LIMPIO CON FUNCIONES PHP - MODULO I

Codigo limpio con funciones PHP - Modulo I

En este tutorial podras ver algunos consejos para que la programacion de algunas tareas cotidianas y bastante utilizada en PHP te sean mas leibles y comodas.


La estructura que seguire en este tutorial es:
1-9.- Tarea -> Tarea a realizar
a-z) Caso que puede surgir en dicha tarea, se explicara igualmente con la misma estructura los pasos a seguir...
CODIGO NORMALMENTE QUE UTILIZARIAMOS: "Codigo que normalmente o una variacion del mismo tendriamos que realizar para hacer dicha tarea"
PROBLEMA: "Explicacion breve de que problemas o inconvenientes podriamos encontrarnos con dicho codigo"
SOLUCION: "Que podemos hacer para evitar dichos problemas/inconvenientes"
CODIGO SIMPLIFICADO Y LIMPIO: "Codigo resultante para intentar evitar esos problemas"
// Aqui podras ver algunos comentarios y aclaraciones sobre el codigo

Ejemplo: "Codigo de ejemplo para que veas como se puede utilizar todo esto"

---------------------------------------------------------------------------------------------------------

1. - Tarea -> Conexion a nuestra BD MySQL con PHP

CODIGO NORMALMENTE QUE UTILIZARIAMOS:

<?
if (!($link=mysql_connect("localhost","usuario","password"))){
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("nombre_bd",$link)){
echo "Error seleccionando la base de datos.";
exit();
}

// En $link tendremos nuestra variable de conexion
?>

PROBLEMA: Tener este codigo en cada fichero que vaya a utilizar una conexion con la BD (totalmente inviable)
SOLUCION: Escribir una funcion que podamos incluirla cada fichero que vayamos a utilizar una conexion con la BD

CODIGO SIMPLIFICADO Y LIMPIO:

<?
function conectar_bd()
{
$servidor="localhost";
$bd="nombre_bd";
$usu="usuario";
$pass="password";

if (!($link=mysql_connect($servidor,$usu,$pass))){
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($bd,$link)){
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}

/* Para llamar a esta funcion desde cualquier archivo tendremos que incluir dicha funcion mediante un include() "recomendado" o tenerla declarada en el mismo fichero donde la llamamos "no recomendado"*/
// Llamaremos a la funcion de este modo: $link=conectar_bd();
// En $link tendremos nuestra variable de conexion
?>

---------------------------------------------------------------------------------------------------------
2.- Tarea -> Consultas MySQL con funciones PHP
En un proyecto web complejo y grande tendremos que realizar multitud de consultas a tu BD.

a) Para consultas SQL que devuelva una tupla o registro

CODIGO NORMALMENTE QUE UTILIZARIAMOS:

<?
if (!($link=mysql_connect("localhost","usuario","password"))){
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("nombre_bd",$link)){
echo "Error seleccionando la base de datos.";
exit();
}

$res=mysql_query("SELECT * FROM tabla WHERE id=1",$link) or die (mysql_error());
$var=mysql_fetch_array($res);
echo "Nombre: ".$var["nombre"];
/* * Podremos Acceder a los campos de la tupla mediante $var["nombre"], $var["id_ficha"], etc...*/
mysql_close ($link);
?>


PROBLEMA: Una web normalmente puede tener 5 o mas consultas de Base de Datos... ¿Te imaginas la cantidad de codigo repetido?
SOLUCION: Simplificar al minimo numero de lineas la tarea de conectarse a la BD, y hacer una consulta

CODIGO SIMPLIFICADO Y LIMPIO:

<?
function select($sql){
$link=conectar_bd(); // Funcion creada anteriormente
$res=mysql_query($sql,$link) or die (mysql_error());
$var=mysql_fetch_array($res);
mysql_close ($link);
return $var;
}

// Por ejemplo, la misma tarea de antes* podriamos conseguirla con una sola linea
$var=select("SELECT * FROM tabla WHERE id=1");
// Ya podremos manejar los datos tales como $var["nombre"], $var["id_ficha"], etc...
?>


b) Consultas SQL que devuelve mas de un registro (devuelven varias filas de una tabla en nuestra BD)

CODIGO NORMALMENTE QUE UTILIZARIAMOS:

<?
if (!($link=mysql_connect("localhost","usuario","password"))){
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db("nombre_bd",$link)){
echo "Error seleccionando la base de datos.";
exit();
}

$res=mysql_query("SELECT * FROM tabla",$link) or die (mysql_error());
while ($r=mysql_fetch_array($res)){
echo $r["id"]."-".$r["nombre"]; //Aqui podremos manipular los datos de cada tupla **
}
mysql_close ($link);
?>


PROBLEMA: Sigue siendo demasiado largo, despues tenemos que manipular los datos, mostrarlo por pantalla....
SOLUCION: Nuevamente simplificar al maximo el codigo resultante para realizar dicha tarea

CODIGO SIMPLIFICADO Y LIMPIO:

<?
// Crearemos otra funcion para que nos devuelva una variable que sea la que iremos avanzando
function selectmultiple($sql){
$link=conectar_bd();
$res=mysql_query($sql,$link) or die (mysql_error());
mysql_close ($link);
return $res;
}

// La misma tarea de antes** la conseguiremos reducir a una sola linea...
$var=selectmultiple("SELECT * FROM tabla");
while ($r=mysql_fetch_array($var)){
echo $r["id"]."-".$r["nombre"]; //Aqui manejamos los datos de cada fila/tupla
?>


Ejemplo:
Ahora podres ver un ejemplo real... de como utilizar de una forma correcta el codigo del tutorial.


<?
//Crearemos un fichero llamado "libreria.php" donde tendremos las funciones creadas anteriormente
function conectar_bd(){
$servidor="localhost";
$bd="nombre_bd";
$usu="usuario";
$pass="password";

if (!($link=mysql_connect($servidor,$usu,$pass))){
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($bd,$link)){
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}

// Consulta que devuelve una sola tupla
function select($sql){
$link=conectar_bd();
$res=mysql_query($sql,$link) or die (mysql_error());
$var=mysql_fetch_array($res);
mysql_close ($link);
return $var;
}

// Consulta que devuelve mas de una fila/tupla
function selectmultiple($sql){
$link=conectar_bd();
$res=mysql_query($sql,$link) or die (mysql_error());
mysql_close ($link);
return $res;
}
?>


<?
// En otro fichero donde tengamos que realizar alguna consulta haremos lo siguiente
include("libreria.php");
//Codigo,codigo,codigo,codigo,codigo,codigo,codigo,codigo,codigo,codigo, .........
// Queremos ver los nombres y apellidos de una persona que pasamos el id por la cabecera mediante GET

$r=select("SELECT nombre,apellido FROM tabla WHERE id=".$_GET["id"]."");
echo "El nombre es: ".$r["nombre"]." y los apellidos ".$r["apellido"];

// Codigo,codigo,codigo,codigo,codigo,codigo,codigo,codigo,codigo,codigo, .........
// Queremos ver los nombres y apellidos de todos los empleados da empresa

$res=selectmultiple("SELECT * FROM tabla");
echo "Los nombres de los empleados son: ";
while ($r=mysql_fetch_array($res)){
echo "Nombre: ".$r["nombre"]." Apellido ".$r["apellido"]; //Aqui manejamos los datos de cada fila/tupla
}
?>


Creo que puedes comprobar tu mismo el alcance de estos "truquitos" para programar de una forma mas rapida y comoda.
Te aconsejo que te aconstumbres a programar de este modo ya que habra un momento que tu proyecto sea totalmente inabarcable, complicado y pesado...

Un saludo, cualquier duda respecto al tutorial no dudeis en hacerla en el foro de Rentabilizar-Web.

Rentabilitech - "Programando Ideas"


Si este tutorial le ha ayudado ¡Devuelvanos la ayuda!

 Opina sobre este tutorial
Mas tutoriales...


Comentarios: (2)
Frank dice: Uno de los métodos que utilizo yo para conectar todos mis archivos a la base de datos, es creando un archivo llamado conectar.php. Dentro de él conecto a la base de datos, utilizando mysql_query y luego en cada archivo que quiera conectar a la db utilizo la funcion include. Ejemplo: include("conectar.php"); (19/10/2009)
BIODIGITZMAN dice: no entiendo porque si es limpio porque hay que dejar linea en blanco entre funcion y funcion.. yo leí una vez que a los navegadores no les gusta los espacios en blanco ( internet explorer es un bicho raro pero tambien) por eso cuando programo algo en php,, uso NotePad C++ y no dejo una linea en blanco.. dejo cada sentencia en una linea y la verdad esque mis blogs wordpress tiran mas rapido... he visto templates para WP que tienen muchisimo espacio entre las sentencias ... crees que es bueno eso? (31/08/2010)

¿ERES ANUNCIANTE?