miércoles, 31 de diciembre de 2014

Feliz año nuevo

Antes de nada me gustaría dar las gracias a todos aquellos que habéis estado visitando el blog durante este año, quienes habéis seguido mis tutoriales, manuales, mis chistes...

Este año ha sido intenso, mi viaje a Polonia, las practicas, el proyecto de Apache Cordova, terminar el ciclo, la búsqueda de trabajo, y el desarrollo de todo un manual de PHP, diseños, ayudas, algunas entradas de MAGENTO... toda una odisea que concluye esta noche y da la bienvenida a otra nueva aventura, ya que no dejo de programar, ya sea por el trabajo o por motus propio, de modo que este año espero poder contaros muchas cosas, según parece de Wordpress y Magento...

Es una lastima pero la dirección que pretendía tomar en mi desarrollo, enfocándolo a Laravel y otros frameworks se ha visto truncada, en esta caso felizmente por el trabajo, que me dirige más hacia los CMS y su programación, lugar por donde seguiremos avanzando en NETRUNNING.

De modo que prepararse para un nuevo año de ayudas, ideas y soluciones para vuestros desarrollos, seguro que empiezo a encontrar tiempo ahora que empiezo a estabilizarme en mi nueva faceta laboral.

Un abrazo a todos y os deseo que le mejor del 2014 sea lo peor del 2015....

miércoles, 17 de diciembre de 2014

Acceso a la base de datos de Wordpress

En ocasiones puede ser necesario identificar el nombre de la base de datos, el usuario, la clave... para nuestros trabajos con wordpress, puede incluso que tengamos algún tipo de error y no sepamos como solucionarlo.

Pues bien, para ello es tan sencillo como acceder vía ftp a nuestro servidor y una vez dentro localizar el archivo wp-config.php, donde encontraremos la siguiente información:

// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
define('DB_NAME', 'nombre de la base de datos');

/** Tu nombre de usuario de MySQL */
define('DB_USER', 'nombre del usuario de la base de datos');

/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'password en la base de datos');

/** Host de MySQL (es muy probable que no necesites cambiarlo) */
define('DB_HOST', 'hosting de nuestra base de datos');

/** Codificación de caracteres para la base de datos. */
define('DB_CHARSET', 'utf8');

/** Cotejamiento de la base de datos. No lo modifiques si tienes dudas. */
define('DB_COLLATE', '');


Los textos en azul son los que nos dan la información sobre la conexión a nuestra base de datos y desde donde podemos solucionar muchos de los errores de conexión.

martes, 9 de diciembre de 2014

Traduciendo Magento

En muchas ocasiones nos veremos obligados a traducir, o cambiar algunos de los textos que trae Magento, desde el carrito, al mensaje de bienvenida o cualquier otra cosa.

Para ello tenemos dos opciones, la primera es hacerlo manualmente que aunque es mucho más tediosa, puede resultar mejor si se hacen muchos cambios, ya que no ralentiza el sistema. La segunda por su parte se realiza haciendo traducciones "en caliente", es decir sobre la propia página web, aunque puede llegar el caso de que si abusamos de este método la web se ralentice un poco.

Traduciendo manualmente

Para hacer esto debemos de dirigirnos por medio de ftp a la ubicación de los archivos de idioma que se encuentran en: app >> locale >> es_ES

En esta carpeta se encuentran los archivos .csv en los que se encuentran los valores en inglés y en español, tan solo hace falta añadir el valor en español o modificar el que ya tiene para que su traducción aparezca en línea.

Este sistema es muy sencillo aunque muy laborioso ya que hay muchos archivos que varían en su extensión y puede ser realmente tedioso.

Traduciendo en caliente

La otra forma de traducir, menos tediosa, aunque puede sobrecargar el sistema si se traduce todo de este modo es hacerlo en caliente, es decir sobre la propia web, que puede o no estar en proceso de producción.

Para llevarla a cabo debemos irnos a la parte de administración de la tienda, y entrar en Sistema >> Configuración una vez dentro, buscamos avanzado en la parte izquierda y clicamos en desarrollador. Esto nos abrirá un menú y debemos abrir, Línea interna de traducción, y poner las opciones que nos interesen en sí.
  • Activado para el frontend: nos permitirá hacer la traducción en el frontend
  • Activado para el administrador: nos permitirá hacer los cambios en la parte de administración.
Hacemos click en guardar configiración y nos vamos al frontend de nuestra tienda, y vemos que hay muchas partes rodeadas de puntitos rojos y al pasar el ratón por encima aparece un librito azul. (como señala la flecha verde)
Al hacer click sobre el librito, se abre un cuadro de dialogo donde se nos permite cambiar el texto.
En este dialogo también tenemos que marcar la casilla  Store View Specific, para que el cambio se haga solo en el idioma que tiene la web actualmente.


Una vez que hemos puesto el nuevo texto, le damos a submit y podemos repetir el proceso tantas veces como queramos.

Una vez terminemos es necesario volver a a desactivar las traducciones online.

Reseteamos la cache, de la cual habrá un aviso en la administración de Magento y los cambios se quedan realizados.

Páginas visibles en Magento segun el grupo de usuarios

Una petición que muy común entre los clientes que solicitan una web en Magento es que ciertas páginas solo estén visibles para los usuarios registrados o incluso solo para ciertos grupos de usuarios.

Yo me he encontrado con este problema y estuve buscando como solucionarlo por toda la red, encontrando soluciones de pago, bastante caras por cierto, hasta que finalmente logré dar con la piedra filosofal, que no es más que unos pequeños scripts, claro que hay que hacer algo de código.

Lo primero que debemos de hacer es crear nuestro archivo .phtml, en el cual introduciremos el código que necesitamos para que podamos poner nuestras condiciones...

Página solo visible a usuarios registrados

Comenzaremos por una página que solo puede ser vista por usuarios registrados; para ello en nuestro archivo .phtml debemos de poner el siguiente código base:
<?php if(Mage::getSingleton('customer/session')->isLoggedIn()): ?>
<!-- Aquí se mostrará el código html si el cliente está logueado -->
<?php else: ?>
<!-- Aquí se mostrará el código html  si no se está logueado -->
<?php endif; ?>

Tan solo nos queda introducir el código en cada una de las dos opciones y ya esta.

Página solo visible para ciertos grupos de usuarios

Puede ocurrir que queramos que una página sea visible solo para un grupo de usuarios (si es para varios grupos, el desarrollador con un poco de conocimiento en PHP verá que tan solo hace falta modificar la condición del if y poner nuevas variables).

Lo primero que debemos de hacer es irnos a nuestro panel de control de Magento y en Clientes >> Grupos de clientes, apuntamos la id del grupo que queremos.

A continuación lo único que debemos de hacer es irnos a nuestro archivo .phtml y poner el siguiente código:
<?php $idgrupo = 4; //reemplazar por la id del grupo que queramos
if(Mage::getSingleton('customer/session')->getCustomerGroupId() == $idgrupo): ?>
<!-- Código htlml que se mostrará si el cliente pertenece al grupo -->
<?php else: ?>
<!-- Código que se mostrará en caso de que no pertenezca al grupo -->
<?php endif; ?>

De esta forma ya tenemos una página que se mostrará solo si los miembros pertenecen a un grupo determinado.

miércoles, 3 de diciembre de 2014

XAMPP no interpreta el código PHP

Seguramente a muchos os ha sucedido, eso de coger un proyecto en PHP, instalarlo en vuestro localhost y cuando parece que todo va a funcionar, aparece el código PHP en el navegador.

La razón más probable de esto, es que nuestro archivo php.ini no tiene activa la variable short_open_tag. Esto significa que nuestro servidor no reconoce la apertura corta de php <? tan solo reconoce la larga <?php y muchos desarrolladores utilizan la corta. (Personalmente prefiero la larga que tampoco es que sea algo para morirse y evita este tipo de problemas)

La solución a este problema es muy sencilla, tan solo debemos de ir a nuestro archivo php.ini ubicado en:
c://xampp/php/php.ini

Y una vez abierto tenemos que buscar la directiva short_open_tag, la cual seguramente tenga este aspecto:
short_open_tag=Off

Y nosotros tendremos que cambiarla por:

short_open_tag=On

Una vez hecho este cambio, tan solo hay que reiniciar nuestro servidor y el navegador debe de poder interpretar nuestro proyecto.

Poniendo una imagen en una página de Magento

Este es otro problema que tienen, bueno tenemos, los desarrolladores que tocamos Magento por primera vez, ¿como pongo una imagen en una de las páginas como por ejemplo el home?
La respuesta no es que sea muy difícil, de hecho el procedimiento es bastante sencillo, lo primero que tenemos que hacer es colocar nuestra imagenes dentro de la siguiente carpeta:

skin >> frontend >> interface que estemos usando >> plantilla que estemos usando >> images

Una vez que hemos hecho esto, tan solo tenemos que irnos a nuestro backend, escoger CMS y página (también sirve en bloques estáticos) y una vez que estamos allí escribir lo siguiente:

<img src="{{skin url='nombre de la imagen'}}"> 

De esta forma la imagen recibe como ubicación, la directiva que le indica a Magento donde se encuentra dicha imagen, introduciendo esta dirección url en el src.

Además de que esta imagen puede estar dentro de un div, tener su propia clase o id, y cualquier argumento de forma normal.

domingo, 30 de noviembre de 2014

Introduciendo PHP y JS en Magento

Otra cosa que trae de cabeza a aquellos que queremos desarrollar en Magento es la imposibilidad inicial de poder poner en nuestras páginas del CMS tano PHP como JS, y la verdad que es un problema enfrentarte a esto sobre todo cuando empiezas a ver que el formato de los archivos es de la extensión .phtml donde te quedas mirando con cara de pez y más aun cuando entre sus miles de archivos nos sabes cual tienes que tocar...

La verdad es que es algo que creo que hace que muchos desarrolladores abandonen la posibilidad de desarrollar en Magento, pero a pesar de todos estos impedimentos se puede lograr programar en PHP y en JS, para ellos debemos de situarnos en la siguiente carpeta desde la raiz de magento:

app - design - frontend - default - plantilla - template - page - html

Los dos directorios en morado indican la situación de la plantilla en nuestro árbol y el nombre de la misma. Naturalmente esta plantilla debe de ser la que estamos utilizando.

Una vez en este punto encontraremos que hay varios archivos .phtml, de modo que nos encontramos en el sitio donde debemos.

Aquí creamos otro archivo con la extensión .phtml en el cual podemos escribir como si se tratase de un html normal introduciendo nuestros scripts ya sean de javascript o código php y cuando lo tengamos listo lo salvamos.

Ahora nos vamos a la parte de administración de nuestro Magento, y en CMS >> Páginas abrimos nuestra web y copiamos la siguiente directiva:

 {{block type="core/template" template="page/html/nombreDelArchivo.phtml"}}



Guardamos y al ver la página ya se muestran los resultados.




sábado, 29 de noviembre de 2014

Creando una página en Magento desde el gestor de contenidos

Sigo con mi exploración de Magento, y hoy voy a explicaros como hacer una página desde el back-end sin necesidad de código y que esta aparezca en el menú.

Hay que tener en cuenta que puede parecer un tanto extraño el procedimiento, pero funciona y además nos permite realizar ciertos cambios una vez que esta terminado para que el cliente no note el trabajo que hay por detrás.
  • Para empezar lo primero que tenemos que hacer es crear una categoría, para ello nos vamos, dentro de nuestra aplicación de administración a  Catálogo >> Cetegorias y aquí creamos una categoría que sea una subcategoría de nuestro inicio, con un nombre simple, mi recomendanción es que sea una única palabra que defina la categoría, ya que nos puede evitar problemas y podremos cambiarlos más adelante. Además le indicamos que tiene que estar activa. Ya con solo esto nos debe de aparecer la sección en el menú.

  • Una vez que ya tenemos nuestra categoría nos dirigimos a Catalogo >> Redireccionamiento de URL y copiamos la ruta objetivo de nuestra categoría, la cual nos hara falta un poco más adelante, entramos en la edición y en la casilla de redirección seleccionamos Permanente.

viernes, 28 de noviembre de 2014

Modificando CSS en Magento

Me he encontrado con la tesitura de que en ocasiones hay que cambiar los estilos en magento, al cual cada día admiro y odio más a partes iguales, ya que para cualquier cosa hay que investigar muchísimo, hasta el punto en el que te quedas parado buscando información durante horas, sobre todo cuando quieres cambiar algo que no esta accesible desde lo menús.

En este caso mi intención es modificar el CSS de Magento, aunque debido a la forma de trabajo de Magento habrá que realizar una operación en nuestras páginas, no os preocupéis, lo único que hay que hacer es el equivalente a importar el css cuando hacemos una web normal.

Lo primero que tenemos que hacer es crear nuestro archivo CSS, pero hablando de este gestor de contenidos podemos perdernos por su laberíntico árbol de directorios, de modo que aquí os dejo las directrices y el mapa del tesoro para ubicar nuestro archivo custom.css donde debemos.

jueves, 27 de noviembre de 2014

Como enviar un mail con PHP (III) un mail con formato

Ya hemos aprendido como enviar mails simples y con cabeceras, pero ahora es el momento de aprender a enviar un mail con formato en PHP para que quede más atractivo.

En el siguiente script, no hemos usado ningún tipo de CSS, tan solo HTML5 a pelo para crear una tabla, pero una vez que tenemos esto hecho tan solo se trata de dar estilo de forma normal a nuestro código.

Pare empezar vamos a presentar un formulario HTML5 al cliente, en este caso he querido que todos los campos sean obligatorios, evitando de este modo el control de si han sido rellenados o no en el back-end, pero si quieres saber como se hace puedes verlo en como enviar un mail con cabeceras.
<html>
<head>
 <title>
  Envío de correo electrónico
 </title>
</head>
<body>
 <h1>Envío de correo electrónico</h1>
 <br>
 <form method="post" action="formato.php">
  Escriba sus comentarios y haga clic en Enviar:
  <p>Nombre: <input type="text" name="nombre" required></p>
  <p>email: <input type="email" name="email" required></p>
  <p>Asunto: <input type="text" name="asunto" required></p>
   
  <textarea name="message" cols="50" rows="5" required></textarea>
  <input type="submit" value="Enviar">
 </form>
<body>
</html>

En este formulario como ya he comentado, se utiliza el atributo required, de hecho se pueden utilizar validaciones si se desea, pero no tiene ningún misterio, la magia se da en nuestro script en php:
<?php
 $cabeceras = "MIME-Version: 1.0\r\n";
 $cabeceras .= "Content-Type: text/html; charset=UTF-8\r\n";
 $correo = '<table border="1px">
        <caption><h2>Nuevo email</h2></caption>
        <tr>
            <td><b>Nombre</b></td>
            <td>' . $_REQUEST["nombre"] . '</td>
        </tr>
        <tr>
            <td><b>Email</b></td>
            <td>' . $_REQUEST["email"] . '</td>
        </tr>
        <tr>
            <td><b>Asunto</b></td>
            <td>' . $_REQUEST["asunto"] . '</td>
        </tr>
        <tr>
            <td><b>Mensaje</b></td>
            <td>' . $_REQUEST["message"] . '</td>
        </tr>
    </table>';


 mail("direccionEmail", $_REQUEST["asunto"], $correo, $cabeceras);
?>

Lo primero que tenemos que hacer es crear las cabeceras, sin las cuales nuestro formato no aparecerá en el correo, ya que estas indican que interpreten el código HTML que hay dentro.

A continuación creamos el string $correo que es el cuerpo del correo en sí mismo, aquí hemos escogido una tabla, pero puede ser una lista o lo que queramos.

Hay que notar como recogemos los datos del formulario para que aparezcan en la tabla en la posición que queremos.
Debido a que es un script que solo envía el mail, no hace falta guardar estos datos introducidos por el usuario en variables, ya que solo van a enviarse al mail, aparte de que se están guardando en la tabla.

Finalmente terminamos utilizando la función mail() como de costumbre que tiene como primer parametro la dirección de mail donde va dirigido el correo, el asunto del mail, el mensaje (en nuestro caso la tabla), y las cabeceras.

Con todo esto obtenemos un resultado similar a este:

martes, 25 de noviembre de 2014

ERP

Llevo unos días liado con un trabajo que se debe a un ERP, tecnología que no conocía, de modo que me he puesto a investigar y a hacer una reseña sobre ella y de ese modo aclarar mis dudas y espero que las de otros que se encuentren frente a la necesidad, o posibilidad de trabajar con él.

¿Que es ERP?

ERP, sistemas de planificación de recursos empresariales (ERP, por sus siglas en inglés, enterprise resource planning), puede definirse como una herramienta que controla y gestiona toda las funciones administrativas y productivas de una empresa en un solo entorno de trabajo, adaptandose a la necesidades particulares de cada empresa. 

De esta forma los trabajadores pierden menos tiempo entre multitud de herramientas, teniendo todo centralizado, maxificando la efectividad del trabajo. 

Se caracterizan por estar compuestos por diferentes módulos. Estas partes son de diferente uso, por ejemplo: producción, ventas, compras, logística, contabilidad (de varios tipos), gestión de proyectos, GIS, inventarios y control de almacenes, pedidos, nóminas, etc. Lo contrario sería como considerar un simple programa de facturación como un ERP por el simple hecho de que una empresa integre únicamente esa parte.
Los objetivos principales de los sistemas ERP son:
  • Optimización de los procesos empresariales.
  • Acceso a la información.
  • Posibilidad de compartir información entre todos los componentes de la organización.
  • Eliminación de datos y operaciones innecesarias de reingeniería.
El propósito fundamental de un ERP es otorgar apoyo a los clientes del negocio, tiempos rápidos de respuesta a sus problemas, así como un eficiente manejo de información que permita la toma oportuna de decisiones y disminución de los costos totales de operación.

Los beneficios que puede aportar una herramienta de ERP se resumen en la resolución de los problemas contables, mercantil o fiscal de la empresa. Asimismo, puede permitir un mayor control del inmovilizado en el inventario permanente, conciliación bancaria, liquidación de impuestos, etc.

Las soluciones ERP en ocasiones son complejas y difíciles de implantar debido a que necesitan un desarrollo personalizado para cada empresa partiendo de la configuración inicial de la aplicación, que es común. Las personalizaciones y desarrollos particulares para cada empresa requieren de un gran esfuerzo en tiempo, y por consiguiente en dinero, para modelar todos los procesos de negocio de la vida real en la aplicación.

Se caracterizan por no tener recetas ni guiones explícitos para su implantación, por ello es conveniente tener siempre en consideración algunos puntos que se deben de ir atendiendo antes, durante y después de la implantación:
  • Definición de resultados que debe de obtener con la implantación de un ERP.
  • Definición del modelo de negocio.
  • Definición del modelo de gestión.
  • Definición de la estrategia de implantación.
  • Evaluación de oportunidades para software complementario al producto ERP.
  • Alineamiento de la estructura y plataformas tecnológicas.
  • Análisis del cambio organizativo.
  • Entrega de una visión completa de la solución que implantar.
  • Implantación del sistema.
  • Controles de calidad.
  • Auditoría del entorno técnico y del entorno de desarrollo.

Ventajas de un ERP

  • Una empresa que carezca de este sistema, puede encontrarse con multitud de aplicaciones software cerradas, que no se pueden personalizar o que no se optimizan para el tipo de negocio. Este defecto esta totalmente solventado con un sistema ERP.
  • La efectividad de datos puede usarse para el control cuando el cambio ocurra desde una versión anterior a la nueva.
  • La seguridad del software esta dentro del ERP, protegiéndolo tanto de asaltos externos, como internos como malversación.
  • Se le pueden incluir controles de calidad para los productos finales.

Desventajas de un ERP

Muchos de los problemas que tienen las compañías con el ERP se deben a la inversión inadecuada para la educación continua del personal relevante, incluyendo los cambios de implementación y de prueba, y una falta de políticas corporativas que afectan a cómo se obtienen los datos del ERP y como se mantienen actualizados.
  • No tener personal con el conocimiento necesario para el funcionamiento del ERP
  • Cambio del personal que debe trabajar con el sistema
  • Su instalación es cara
  • Los vendedores del ERP pueden cargar sumas de dinero para la renovación de sus licencias anuales, que no está relacionado con el tamaño del ERP de la compañía o sus ganancias.
  • Son vistos como sistemas muy rígidos, que no se adaptan al flujo especifico de los trabajadores ni al proceso de negocio de algunas compañias.
  • Los sistemas pueden ser de difícil utilización.
  • Se pueden producir cuellos de botella cuando algún usuario o departamento no hace buen uso de él.
  • Muchos de los eslabones integrados necesitan exactitud en otras aplicaciones para trabajar efectivamente. Una compañía puede lograr estándares mínimos, y luego de un tiempo los "datos sucios" (datos inexactos o no verificados) reducirán la confiabilidad de algunas aplicaciones.
  • Una vez establecido el sistema, sus modificaciones tienen un alto coste.
  • En alguna empresas no se comparten los datos entre departamentos, lo que puede dar lugar a una reducción en la eficiencia del software.
  • Y uno de los más importantes es que el sistema puede suponer demasiado para las necesidades reales del consumidor.

lunes, 24 de noviembre de 2014

Como enviar un mail con PHP (II) Un mail con cabeceras

En la entrada anterior de esta serie, aprendimos a enviar un mail simple, ahora vamos a aprender a enviar un mail con cabeceras cc y bcc.

Para este fin vamos a seguir utilizando nuestra función mail() añadiendo el parámetro de las cabeceras. Vamos primero a modificar nuestro código html para que podamos escribir las cabeceras:
<html>
<head>
 <title>
  Envío de correo electrónico
 </title>
</head>
<body>
 <h1>Envío de correo electrónico</h1>
 <br>
 <form method="post" action="cabecera.php">
  Escriba sus comentarios y haga clic en Enviar:
  <p>cc: <input type="text" name="cc">
  bcc: <input type="text" name="bcc"></p>
   
  <textarea name="message" cols="50" rows="5"></textarea>
  <input type="submit" value="Enviar">
 </form>
<body>
</html>

Hemos introducido dos inputs donde se piden los elementos cc y bcc.
A continuación vamos a recogerlos en nuestro código php.
Para tal tal fin lo que debemos de hacer es comprobar si han o no han sido enviados, y en caso de que así sea que se recojan en un array que llamaremos $headers, añadiendo un nuevo elemento.
<?php
  $headers = "";
  if(isset($_REQUEST["cc"])){
   $headers .= "cc:" . $_REQUEST["cc"] . "\r\n";
  }
  if(isset($_REQUEST["bcc"])){
   $headers .= "bcc:" . $_REQUEST["bcc"] . "\r\n";
  }

Una vez que ya tenemos esto hecho, tan solo hay que utilizar la función mail() para que se envíe de la siguiente forma:
mail("direccioEmail", "Web mail", $_REQUEST["message"], $headers);
?>

De esta forma se envía el mail con las cabeceras que se han incluido, fácil ¿verdad?
Para que no quede ningún tipo de duda aquí os dejo como quedaría al final:
<?php
  $headers = "";
  if(isset($_REQUEST["cc"])){
   $headers .= "cc:" . $_REQUEST["cc"] . "\r\n";
  }
  if(isset($_REQUEST["bcc"])){
   $headers .= "bcc:" . $_REQUEST["bcc"] . "\r\n";
  }

  mail("direccioEmail", "Web mail", $_REQUEST["message"], $headers);
 ?>



cc: enviar una copia a
bcc: enviar una copia oculta es decir que no se muestra.

sábado, 22 de noviembre de 2014

Como enviar un mail con PHP (I) Un mail simple

En esta serie de entradas vamos a aprender a enviar un mail desde nuestra web utilizando la función mail().

La idea es que podamos crear un script que nos funcione de forma sencilla en todas nuestras webs.

En principio vamos a utilizar tan solo esta función para que veamos como funciona, en las siguientes entradas iremos viendo como hacer que nuestro mail recibido tenga muchos más argumentos y sea más agradable a la vista.
La función mail() funciona de la siguiente forma:

mail(email_del_receptor, asunto, mensaje , cabeceras)

Los parámetros de esta función puede ser strings, como veremos en este ejemplo, variables o matrices, como iremos viendo en las siguientes entradas.

Nota: No voy a explicar como configurar un servidor local para que se envíen los correos electrónicos, y vamos a considerar que estos scripts están colgados ya en la red, desde servidores externos, desde donde se han probado.

Aunque los datos del mail se pueden poner desde el propio código, esto mantiene muy poca comunicación con el usuario, de modo que vamos a crear primero un código HTML con un formulario para que este envie nuestro mensaje a PHP y finalmente este lo recoja y lo envié a nuestro correo electrónico.
Código HTML:
<html>
<head>
 <title>
  Envío de correo electrónico
 </title>
</head>
<body>
 <h1>Envío de correo electrónico</h1>
 <form method="post" action="basico.php">
  Escriba sus comentarios y haga clic en Enviar:
  <textarea name="message" cols="50" rows="5"></textarea>
  <input type="submit" value="Enviar">
 </form>
<body>
</html>

Como vemos este formulario no deja de ser tan solo un formulario con un textarea y un botón de enviar, sin ningún adorno ni floritura, y que envía el mensaje al script basico.php, cuyo código es:
<html>
<head>
 <title>
  Se envió su correo electrónico
 </title>
</head>
<body>
 <h1>Se envió su correo electrónico</h1>
 Gracias por su mensaje.
 <?php
  mail("direcciónEmail", "Web mail", $_REQUEST["message"]);
 ?>
<body>
</html>

Donde pone direcciónEmail tiene que ir el correo electrónico donde queremos que se envíe el mail, de este modo cuando escribimos un mensaje y clickamos a enviar, nos llega el correo.
En asunto queda fijo el  string "Web mail" y en el mensaje se recoge el mensaje escrito en el formulario.

En este caso no hemos recogido cabeceras, ya que este parámetro es opcional.

De esta forma tan sencilla ya tenemos un formulario que envia mails, aunque lo iremos mejorando en las siguientes entradas de esta serie.

viernes, 21 de noviembre de 2014

Chiquito Ipsum

http://www.chiquitoipsum.com/
Desarrollar puede ser a veces tedioso, sobre todo cuando estamos haciendo todo el tiempo lo mismo, pero ¿quien dice que no puede ser divertido? ¿o que podamos echar unas risas mientras se trabaja? todos hemos tenido que utilizar texto de relleno, ya sabéis el famoso Lorem ipsum, texto al que muchos desarrolladores cogen coraje, de hecho utilizan otros, pero...¿qué pensaríais si hay una gente que se ha dedicado a hacer el texto a través de las expresiones de chiquito de la calzada?

Pues bien tan solo tienes que hacer click en la imagen para ir a esta divertida web donde poder generar el texto de relleno tan inusual como este:

Lorem fistrum ese hombree por la gloria de mi madre te voy a borrar el cerito benemeritaar caballo blanco caballo negroorl diodeno está la cosa muy malar benemeritaar papaar papaar. Va usté muy cargadoo hasta luego Lucas quietooor apetecan diodeno no puedor diodenoo pecador ahorarr. Va usté muy cargadoo a wan qué dise usteer te va a hasé pupitaa benemeritaar ese que llega benemeritaar. A wan llevame al sircoo fistro ese que llega. Ahorarr no puedor a peich llevame al sircoo mamaar. De la pradera no puedor va usté muy cargadoo de la pradera tiene musho peligro fistro qué dise usteer a wan ese hombree.

jueves, 20 de noviembre de 2014

El bushido, o las 5S, de la progrmación

Hay una extraña manía entre los programadores y las técnicas de entrenamiento y concentración de los artistas marciales orientales; ya sea por los Koans (pequeñas preguntas o acertijos que se hacen cuando un maestro pretende que su alumno indague en lo más profundo de su conocimiento para encontrar la solución), técnicas de meditación, e incluso como he llegado a encontrar de buenas formas y de bushido tal y como expongo en esta entrada.

Como artista marcial que soy, aparte de programador, no comparto muchos de estos pensamientos o filosofías, opino que muchas de las ideas no son nada más que la forma de hacer algo que resulte un tanto más interesante para los neófitos, como los Dojos de programación, o los ya mencionados Koans. De hecho estoy esperando que alguien comience a usar la palabra baishi para algo, lo cual ya sería la repanocha...

Pero aun entrando en estos juegos de palabras y aceptando algunos por correctos, e incluso, por hasta, validos,  ¿que es esto del bushido?
Bueno según la wikipedia, que da una descripción bastante clara y rápida del bushido, este es:
"Un código ético estricto y particular al que muchos samuráis (o bushi) entregaban sus vidas, que exigía lealtad y honor hasta la muerte. Si un samurái fallaba en mantener su honor, podía recobrarlo practicando el seppuku (suicidio ritual)"

De hecho se llega a afirmar que:
"El camino del samurai (y por ende el bushido) se encuentra en la muerte"
En la programación no hay que llegar a esos extremos, pero es cierto que el bushido mantiene una férrea  disciplina sobre aquellos que deciden escoger esta forma de vida y seguir las directrices de su filosofía. Es por ello que podríamos hablar del código ético del programador a la hora de ejercer sus funciones, imponiendo unas normativas tan férreas que podrían considerarse como un bushido para nuestra programación. (Aunque he de admitir que yo comparto mas ideales en la realidad con el Taoísmo Chino que con el Bushido Japones).

Segun algunos autores, como James O Coplien, en el prologo del libro Código Limpio, aparecen los TPM (Total Productive Maintenance o Mantenimiento Productivo Total) donde uno de sus pilares son las 5S, cinco reglas que comienzan por la letra S (en la trascripción fonética del japones) y que cada vez se introducen más y más en el mundo de la programación:
  • Seiri (Organización): Es fundamental saber donde están las cosas, mediante enfoques como el uso de nombres correctos, agrupar las variables en orden, poner la funciones juntas...
  • Seiton (Sistematización): Hay un sitio para cada cosa, y cada cosa tiene que estar en su sitio. un fragmento de código debe de estar donde deberíamos encontrarlo, y si no es así hay que refactorizar hasta conseguirlo
  • Seiso (Limpieza): Mantener el código limpio, dejando los comentarios esenciales, nada de deseos, ideas futuras... todos los comentarios que no sean útiles deben de ser eliminados, además de mantener una indexación clara.
  • Seiketsu (Estandarización): Existen unos estandares definidos por la comunidad de trabajo, hay que seguirlos en nuestros trabajos.
  • Shutsuke (Disciplina): Hay que tener disciplina en la realización de nuestro trabajo.

He elegido el nombre de bushido de la programación ya que he creído que son unas normas que debieran o debusiesen ser tan férreas para el programador de bien como lo eran las ancestrales leyes del bushido para los samuraís...

PHP (08) Archivos (12) Bloqueo de archivos

En una aplicación web es bastante normal que haya varios usuarios trabajando a la vez, de hecho no es raro pensar que puedan estar intentando atacar al mismo archivo a la vez varios de ellos, pudiendo crear conflictos.
Para evitar este tipo de problemas se puede utilizar la función flock:
flock (handle, operation [, &wouldblock] )

Aquí handle hace referencia al archivo que será bloqueado y operation puede tomar los siguientes valores:
  • LOCK_SH: Para adquirir un bloqueo compartido (lector)
  • LOCK_EX: Para adquirir un bloqueo exclusivo (escritor)
  • LOCK_UN: Para liberar un bloqueo, sea del tipo que sea
El tercer elemento es opcional se establece a TRUE si el bloqueo esta teniendo lugar y a FALSE si no es así.

La función flock normalmente bloquea (no retorna), hasta que se pueda asegurar un bloqueo. Si no deseamos esperar y dejar de este modo nuestro código bloqueado, estableceremos con OR las constante LOCK_NB a la condición como; LOCK_EX | LOCK_NB. Esto hará que la función retorne de inmediato, y si no consiguió un bloqueo, puede esperar un segundo (con la función sleep(1)) y reintentarlo de nuevo hasta en 15 ocasiones.
Hasta aquí todo es teoría pero podemos verlo en el siguiente script:
<?php
 $handle = fopen("archivo/file.txt", "w");
 $text = "Éste\nes\nel\ntexto del bloqueo.";
 //se comprueba que el archivo no este bloqueado
 if (flock($handle, LOCK_EX | LOCK_NB)) {
  echo "<p>Se bloqueó el archivo. </p>";
 //comprueba que se pueda escribir en el archivo
 if (fwrite($handle, $text) == FALSE) {
  echo "<p>No se puede escribir en file.txt. </p>";
 }
 else {
  echo "<p>Se escribió en data.txt.</p>";
 }
 //desbloquea el archivo para otro usuario
 flock($handle, LOCK_UN);
  echo "<p>Se desbloqueó el archivo. </p>";
 }
 //desde aquí solo lee el archivo para comprobarlo
 $handle = fopen("archivo/file.txt", "r");
 if($handle){
  echo '<p>El archivo se ha abierto correctamente</p><p>';
  while ($char = fgetc($handle)){
   if ($char == "\n"){
    $char='</p><p>';
   }
   echo $char;
  }
  fclose($handle);
 }else{
  echo '<p>ERROR AL ABRIR EL ARCHIVO</p>';
 }
?>

Lo cual nos da como resultado la entrada al archivo y su modificación mientras lo bloquea para que otro usuario no pueda modificarlo al mismo tiempo.
Se bloqueó el archivo.
Se escribió en file.txt.
Se desbloqueó el archivo.
El archivo se ha abierto correctamente
Éste
es
el
texto del bloqueo.



martes, 18 de noviembre de 2014

PHP (08) Archivos (11) Añadiendo información a un archivo

Vimos como escribir en un archivo con fwrite, pero de esta forma se borraban los datos dentro del archivo para que se escribieran los nuevos, ahora vamos a añadir datos; para ello lo primero que tenemos es que abrir nuestro archivo con el parametro "a" con el fin de anexarle información.
$handle = fopen("archivo/file.txt", "a");

A continuación se escribe el nuevo texto se guarda en una variable y se hace exactamente lo mismo que si quisíeramos escribir, es decir introducimos fwrite en el condicional de un if y si devuelve TRUE que escriba y de lo contrario q muestre un mensaje de error.
De forma adicional nosotros vamos a mostrar el nuevo resultado para que se vea que ha funcionado:
$texto = "Este\nes\nel\nnuevo\ntexto";
if (fwrite($handle, $texto)){
 echo "Se ha escrito correctamente en el archivo";
 fclose($handle);
} else {
 echo "No se ha podido escribir en el archivo";
}

$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while ($char = fgetc($handle)){
  if ($char == "\n"){
   $char='<br>';
  }
  echo $char;
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}

Y en el resultado de nuestro script podemos ver que efectivamente se ha añadido:
Se ha escrito correctamente en el archivo
El archivo se ha abierto correctamente
Este
es
el
nuevo
textoEste
es
el
texto
adicional

lunes, 17 de noviembre de 2014

PHP (08) Archivos (10) Escribiendo en un archivo fwrite

Ya sabemos como abrir, leer, copiar, borrar y cerrar un archivo, pero aun no sabemos como escribir en él, este proceso es un tanto más complicado pero no en demasía, ya que lo primero que tenemos que hacer es abrir nuestro archivo en modo ecritura "w".
Despues debemos de crear una variable con nuestra cadena de texto, que será el texto que entrará en nuestro archivo.
A continuación usaremos la funcion fwrite() en un if, ya que esta funcion devuelve TRUE si se logra escribir y FALSE si no se logra.
<?php
$handle = fopen("archivo/file.txt", "w");
$texto = "Este\nes\nel\nnuevo\ntexto";
if (fwrite($handle, $texto)){
 echo "Se ha esrito correctamente en el archivo";
 fclose($handle);
} else {
 echo "No se ha podido escribir en el archivo";
}

De esta forma ya estaría reescrito nuestro archivo file.txt, pero además luego se puede leer para mostrarlo!
<?php
$handle = fopen("archivo/file.txt", "w");
$texto = "Este\nes\nel\nnuevo\ntexto";
if (fwrite($handle, $texto)){
 echo "Se ha esrito correctamente en el archivo";
 fclose($handle);
} else {
 echo "No se ha podido escribir en el archivo";
}

$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while ($char = fgetc($handle)){
  if ($char == "\n"){
   $char='<br>';
  }
  echo $char;
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}
?>

Y obtenemos el siguiente resultado:
Se ha esrito correctamente en el archivo
El archivo se ha abierto correctamente
Este
es
el
nuevo
texto


domingo, 16 de noviembre de 2014

PHP (08) Archivos (09) Borrando archivos unlink

Anteriormente hicimos una copia de nuestro archivo file.txt, ahora vamos a proceder a eliminar esa copia de una forma realmente sencilla, tan solo a traves de una funcion llamada unlink y que recibe como argumento el path del archivo.
De hecho si la función se puede llevar a cabo devuelve TRUE y si no FALSE, por lo que podemos introducir la operación de borrado dentro de una instrucción ifelse:
<?php
if (unlink("archivo/copia.txt")){
 echo "El archivo ha sido borrado con exito";
} else {
 echo "No se ha podido eliminar el archivo";
}
?>

viernes, 14 de noviembre de 2014

PHP (08) Archivos (08) Copiar archivos

Vamos a proceder a copiar nuestro archivo, para ellos haremos uso de la función copy(original destino), para ello crearemos dos variables donde se encuentran los dos path de los archivos.
A continuación vamos a introducir la función copy dentro de la condición de un if, que devolverá TRUE si la copia ha tenido éxito y FALSE en el caso de que no se haya copiado correctamente, quedando nuestro script así:
<?php
$original = "archivo/file.txt";
$copia = "archivo/copia.txt";
if(copy($original, $copia)){
 echo "archivo copiado con éxito";
}else{
 echo "fallo al copiar el archivo";
}

?>

Al ejecutarlo, si todo ha ido correctamente nos dirá que el archivo se ha copiado, pero se puede comprobar mirando en la dirección y vemos como es cierto.

miércoles, 12 de noviembre de 2014

PHP (08) Archivos (07) Saber el tamaño de un fichero

Podemos saber tambien el tamaño de un fichero de forma simple y sencilla, para ellos es tan facil como utilizar la función filesize(), y ponerle como argumento la dirección de nuestro archivo.
Esta función nos devolverá el tamaño del archivo, en caso de que exista, y si no existe nos devolverá un FALSE, pero como hemos visto anteriormente podemos controlar el FALSE, tal y como vemos en el siguiente ejemplo:
<?php
$existe = "archivo/file.txt";
if (file_exists($existe)){
 echo "El tamaño del archivo " . $existe . " es de " . filesize("archivo/file.txt") . " bytes";
}else{
 echo "No se ha encontrado el archivo";
}


?>

Basicamente el uso de filesize es simplemente filesize("dirección") y ya esta.
El script nos devuelve lo siguiente:
El tamaño del archivo archivo/file.txt es de 33 bytes

Pero no solo mide archivos de texto, podemos ponerle imagenes, sonidos...

PHP (08) Archivos (06) Comprobar si existe un archivo file_exists

Si intentamos trabajar con archivos que no existen recibiremos como respuesta un error, pero podemos comprobar que el archivo exista antes de trabajar con él. Para ello disponemos de la función file_exists(). que devuelve TRUE si existe el archivo y FALSE si no existe, de modo que podemos controlar el archivo antes de trabajar con él...
<?php
$existe = "archivo/file.txt";
if (file_exists($existe)){
 ...
}else{
 ...
}

Ahora tan solo debemos de poner el código para si es correcto o es falso:
<?php
$existe = "archivo/file.txt";
if (file_exists($existe)){
 $archivo = file($existe);
 foreach ($archivo as $line) {
  echo $line;
 }
}else{
 echo "No se ha encontrado el archivo";
}

?>

Lo cual nos da como resultado:
Este es el archivo de prueba

Y si en lugar de file.txt, ponemos files.txt que no existe:
No se ha encontrado el archivo


PHP (08) Archivos (05) Lectura de un archivo en una matriz con file

Se puede guardar un archivo en una matriz con la función file y se puede leer y mostrar como un array, para ello, lo único que hay que hacer es declarar nuestro array con el archivo:
$archivo = file("archivo/file.txt");

Una vez que tenemos nuestro archivo cargado en nuestra matriz, tan solo es necesario hacerle un foreach para poder leerlo entero:
<?php
$archivo = file("archivo/file.txt");
foreach ($archivo as $line) {
 echo $line;
}

?>

Lo que nos da como resultado:
Este es el archivo de prueba

Pero llega incluso más lejos ya que si ponemos en lugar de un archivo, una dirección web, nos abrirá desde nuestra web esa web guardada integramente en un array.

martes, 11 de noviembre de 2014

PHP (08) Archivos (04) Lectura de un archivo usando file_get_contents

Podemos leer un archivo directamente por medio de la función file_get_contents() de forma muy rápida, como vamos a ver en el siguiente ejemplo:
<?php
//al llamar a la función desde una variable, le pasamos como
//argumento la dirección del archivo que queremos abrir.
$archivo = file_get_contents("archivo/file.txt");
//convierte los saltos de línea
$conSaltos = str_replace("\n", "<aqui va el br>", $archivo);

echo $conSaltos;

?>

El script guarda en la variable $archivo nuestro file.txt, a continuación lo guarda en la variable $conSaltos, que sustituye los saltos de línea por <br> (no los he puesto por que salta el pre), y finalmente nos muestra el archivo por pantalla:
Este
es
el
archivo
de
prueba

  
De esta forma vemos que abrir y leer un archivo es sumamente sencillo. 
 

lunes, 10 de noviembre de 2014

PHP (08) Archivos (03) Lectura de archivo caracter a caracter fgetc

La función fgetc() lee el archivo carácter a carácter, lo cual puede ser útil si se quiere tener un control muy preciso de la lectura.
Como en el ejemplo anterior, debemos de abrir el archivo que queremos leer y después colocar la función en un while, que estará leyendo el archivo hasta que devuelva un FALSE, que es cuando el archivo termina.
Para hacer que se pueda ver por pantalla, es tan fácil como introducir un echo.
Finalmente se cierra el archivo y ya esta.
Nuestro pequeño script quedaría así:
<?php
$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while ($char = fgetc($handle)){
  echo $char;
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}
?>

Lo cual nos daría un resultado como este:
El archivo se ha abierto correctamente
Este es el archivo de prueba

Así podemos ver el archivo, pero no nos hace los saltos de línea, para ello debemos de introducir una pequeña instrucción if que nos permita representar el fichero tal y como se encuentra en su estado normal:
<?php
$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while ($char = fgetc($handle)){
  if ($char == "\n"){
   $char='<br>';
  }
  echo $char;
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}
?>

Hay que tener en cuenta que $char == "\n" es necesario utilizar dobles comillas, ya que de lo contrario no funcionará.
El resultado final de nuestro script sería tal y como esta escrito el archivo:
El archivo se ha abierto correctamente
Este
es
el
archivo
de
prueba

sábado, 8 de noviembre de 2014

PHP (08) Archivos (02) Recorrido lectura y cierre de un archivo (feof, fgets, fclose)

Una vez que hemos abierto nuestro archivo, tenemos que recorrerlo línea a línea para que se pueda mostrar, para ello vamos a utilizar una función llamada feof() y un bucle while.
Cuando el archivo llega al final la función devuelve TRUE y es cuando termina el bucle de la siguiente forma:
<?php
$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo 'El archivo se ha abierto correctamente';
 while (!feof($handle)){
  ...//aqui va el código que queremos que realice.
 }
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}

?>

Si el bucle no tiene un archivo capturado el bucle será infinito, pero si tiene un archivo capturado terminará una vez termine de recorrerlo.
A pesar de esto, aun no estamos mostrando nada por pantalla, ahora necesitamos recorrer el archivo línea a línea e ir mostrándolo, para ello vamos a crear una variable llamada $texto, la cual va a guardar una función fgets() que tendrá como argumento nuestro archivo, y después mostraremos por pantalla línea a línea, con un simple echo nuestro texto:
<?php
$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while (!feof($handle)){
  $texto = fgets($handle);
  echo $texto . ' ';
 }
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}
?>

Esto nos da como resultado la lectura de nuestro archivo:
El archivo se ha abierto correctamente
Este es el archivo de prueba 

Pero aun queda cerrar el archivo con la función fclose() que recibe como argumento el archivo, de este modo se liberan recursos, se asegura de que no haya fallos o interferencias de código... de este modo podemos observar como justo después del bucle while aparece: fclose($handle);
<?php
$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while (!feof($handle)){
  $texto = fgets($handle);
  echo $texto . ' ';
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}
?>


De esta forma tan sencilla podemos abrir leer y cerrar archivos.

viernes, 7 de noviembre de 2014

PHP (08) Archivos (01) Abriendo archivos con fopen

Antes de trabajar con un archivo hay abrirlo, para ello se utiliza la siguiente instrucción:
$filehandle = fopen (filename, mode [, use_include_path [, zcontext]])

Donde podemos ver como se utiliza la función fopen() con una serie de argumentos:
  • filename: nombre del archivo que se va a abrir
  • mode: forma en la que se quiere abrir, para leerlo, escribir en el...
  • use_inclide_path: puede establecerse en 1 o en TRUE para especificar que desea buscar el archivo en la ruta de inclusión de PHP.
  • zcontext: aloja un contexto de archivo opcional:
    • 'r' Abrir sólo para lectura.
    •  'r+' Abrir para lectura y escritura.
    •  'w' Abrir sólo para escritura y truncar el archivo en longitud cero. Si el archivo no
      existe, intente crearlo.
    •  'w+' Abrir para lectura y escritura y truncar el archivo a longitud cero. Si el archivo
      no existe, intente crearlo.
    •  'a' Abrir sólo para anexar. Si el archivo no existe, intente crearlo.
    •  'a+' Abrir para lectura y escritura, comenzando al final del archivo. Si el archivo no
      existe, intente crearlo.
    •  'x' Crear y abrir sólo para escritura. Si el archivo ya existe, la llamada fopen fallará
      devolviendo FALSE.
    •  'x+' Crear y abrir para lectura y escritura. Si el archivo ya existe, la llamada fopen
      fallará devolviendo FALSE.

Observa que diferentes sistemas operativos tienen diferentes convenciones para finalizar
líneas. Cuando escribimos un archivo de texto y deseamos insertar un cambio de línea, necesitamos utilizar el o los caracteres de final de línea correctos para nuestro sistema operativo. Los sistemas basados en Unix usan \n como carácter de final de línea; los sistemas con Windows utilizan \r\n, mientras los sistemas Macintosh utilizan \r para el mismo efecto.

En Windows, se puede emplear una bandera de traducción en modo de texto (‘t’), que traducirá
\n a \r\n cuando trabaje con el archivo. En contraste, también se puede usar ‘b’ para forzar el
modo binario, que no traducirá sus datos. Para usar estas banderas, especifique ‘b’ o ‘t’ como
el último carácter del parámetro modo, como ‘wt’.

En este momento, el modo predeterminado está en binario para todas las plataformas
distinguiendo entre modo binario y de texto. Si tiene problemas con sus scripts, pruebe usar la
bandera ‘t’

A continuación vamos a abrir un archivo que hemos creado en archivo\file.txt
Para ello usaremos la instrucción
$handle = fopen("/home/file.txt", "r");

hemos puesto las barras invertidas ya que pueden leerse tanto en windows como en Linux.
en la dirección se pueden poner direcciones URL o los datos de acceso a ftp como vemos a continuacion:
$handle = fopen("direccion URL", "r");
$handle = fopen("ftp://usuario:contraseña@servidor/file.txt", "w");

Finalmente hemos de saber que si el archivo se abre correctamente nos devuelve TRUE y en caso contrario false, de este modo podemos saber si se ha cogido o no correctamente utilizando una simple instrucción if:
<?php
$handle = fopen("archivo/file.txt", "w");
if($handle){
 echo 'El archivo se ha abierto correctamente';
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}

?>

Lo cual al jecutarlo nos da como resultado:
El archivo se ha abierto correctamente

miércoles, 5 de noviembre de 2014

PHP (09) BBDD (06) Borrando un registro

Siguiendo con las modificaciones básicas de las bases de datos vamos ahora a borrar un registro de una tabla, de esta forma como de costumbre vamos a preparar nuestra consulta antes de lanzarla a la base de datos, en nuestro caso será:
$query = "DELETE FROM personas WHERE nombre = 'jose'";

Vamos a borrar el contacto Jose, siguiendo los pasos comentados anteriormente en otros artículos, creando la conexión, preparando la consulta, lanzándola y mostrando los resultados tanto antes como despues de tener lugar, quedando así nuestro plugin:
<?php

//funcion que muestra los datos en una tabla
function mostrar()
 {
  //conexion a la base de datos
  $conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
  $db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');
  //preparación y lanzamiento de la consulta a la base de datos
  $query = 'SELECT * FROM personas';
  $result = mysql_query($query) or die ('la consulta falló' . mysql_error());

  //presentación de los datos en una tabla
  echo '<table border=2>
              <tr>
                  <td>Nombre</td><td>telefono</td><td>Email</td></tr>';
      while ($row=mysql_fetch_array($result)) { //Bucle para ver todos los registros
            $nombre=$row['nombre']; //datos del campo nombre
            $telefono=$row['telefono']; //datos del campo teléfono
            $email=$row['email']; //datos del campo email
            $id=$row['id'];
            echo "<tr><td>$nombre</td> <td>$telefono</td> <td>$email</td><td>$id</td></tr>"; //visualizar datos
            }
      echo '</table>';
      mysql_close($conexion);//cierre de la conexion al servidor
    }

function borrar()
 {
  //conexion a la base de datos
  $conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
  $db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');
  //lanzando la consulta
  $query = "DELETE FROM personas WHERE nombre = 'jose'";
  $result = mysql_query($query) or die ('la consulta falló' . mysql_error());
  mysql_close($conexion);//cierre de la conexion al servidor
 }

echo '<h2>Antes de realizar el cambio</h2>';
mostrar();
echo '<h2>Despues de borrar el registro</h2>';
borrar();
mostrar();

?>

En este caso hemos introducido también las ids de los elementos, y el resultado ha sido:

Antes de realizar el cambio

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com44
Jose 333333333 jose@email.com74

Despues de borrar el registro

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com44

Lo único que estamos haciendo con respecto a los otros ejemplos es cambiar la consulta, ya que el proceso es siempre el mismo:
  • Conexión a la base de datos
  • Preparar y lanzar la consulta
  • Desconectar

martes, 4 de noviembre de 2014

PHP (09) BBDD (05) Modificando datos

Ya sabemos mostrar los datos por pantalla, de hecho sabemos incluso como introducirlos desde un formulario, pero ¿que ocurre si tenemos que modificar algún dato? nuestro contacto puede cambiar de mail, de teléfono... o puede que lo que se muestra es la cantidad de un producto que tenemos...
Para ello tenemos que modificar los datos, y es tan sencillo como lanzar la consulta pertinente y seguir los pasos de siempre.

Nota: Si necesitamos ayuda con nuestras consultas SQL se puede realizar la acción de manera gráfica en phpMyAdmin y este nos muestra la consulta realizada.

En nuestro caso vamos a suponer que nuestro contacto Jose ha cambiado de número de teléfono, y para cambiarlo vamos a utilizar la siguiente consulta:
$query = "UPDATE personas SET telefono = '333333333' WHERE nombre = 'jose'";

De modo que nuestro plugin quedaría de la siguiente forma, para mostrar el cambio:
<?php

//funcion que muestra los datos en una tabla
function mostrar()
 {
  //conexion a la base de datos
  $conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
  $db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');
  //preparación y lanzamiento de la consulta a la base de datos
  $query = 'SELECT * FROM personas';
  $result = mysql_query($query) or die ('la consulta falló' . mysql_error());

  //presentación de los datos en una tabla
  echo '<table border=2>
              <tr>
                  <td>Nombre</td><td>telefono</td><td>Email</td></tr>';
      while ($row=mysql_fetch_array($result)) { //Bucle para ver todos los registros
            $nombre=$row['nombre']; //datos del campo nombre
            $telefono=$row['telefono']; //datos del campo teléfono
            $email=$row['email']; //datos del campo email
            $id=$row['id'];
            echo "<tr><td>$nombre</td> <td>$telefono</td> <td>$email</td></tr>"; //visualizar datos
            }
      echo '</table>';
      mysql_close($conexion);//cierre de la conexion al servidor
    }

function modificar()
 {
  //conexion a la base de datos
  $conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
  $db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');
  //lanzando la consulta
  $query = "UPDATE personas SET telefono = '333333333' WHERE nombre = 'jose'";
  $result = mysql_query($query) or die ('la consulta falló' . mysql_error());
  mysql_close($conexion);//cierre de la conexion al servidor
 }

echo '<h2>Antes de realizar el cambio</h2>';
mostrar();
echo '<h2>Despues de realizar el cambio</h2>';
modificar();
mostrar();

?>

Lo cual nos da como resultado:

Antes de realizar el cambio

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com
Jose 222222222 jose@email.com

Despues de realizar el cambio

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com
Jose 333333333 jose@email.com

Podemos ver como ha cambiado el número de teléfono de Jose de forma muy sencilla, de hecho podríamos hacer que se pueda hacer por un formulario si quisiéramos, obteniendo el nuevo dato, como veremos en el próximo proyecto.

lunes, 3 de noviembre de 2014

PHP (09) BBDD (04) Introduciendo nuevos datos

Ahora que ya sabemos como se pueden mostrar los datos de nuestra base de datos por pantalla, podemos intuir como introducirlos,tan solo hay que cambiar nuestra consulta a lanzar por la siguiente:
$query = "insert into personas (nombre,telefono,email) values ('Antonio','5555555555','email@email.com')";
$result = mysql_query($query) or die ('la consulta falló' . mysql_error());

Vemos que lo único que hemos hecho ha sido cambiar la consulta de muestra por una consulta de insertar valores, aunque tenemos que introducir los valores a través del programa, algo realmente poco eficaz, ya que el usuario de nuestra aplicación no puede ni debe entrar en el código, de modo que se puede crear un formulario como el siguiente:
<html>
 <head>
  <title>Uso de una página para aceptar y procesar datos</title>
 </head>
 <body>
  <h1>Agenda</h1>
   <form method="post" action="conexion.php" >
    <p>Introduzca nombre
    <input name="nombre" type="text" required></p>
    <p>Introduzca telefono
    <input name="telefono" type="text" required></p>
    <p>Introduzca email
    <input name="email" type="email" required></p>
    <input type="submit" value=Enviar>
   </form>
 </body>
</html>

El cual envía los datos a un archivo llamado conexión y que puede ser similar al que podemos ver abajo, en el cual vemos que ya vamos introduciendo las acciones de interacción con la base de datos en funciones para que nos resulte más sencillo trabajar con ella.
<?php

//funcion que muestra los datos en una tabla
function mostrar()
 {
  //conexion a la base de datos
  $conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
  $db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');
  //preparación y lanzamiento de la consulta a la base de datos
  $query = 'SELECT * FROM personas';
  $result = mysql_query($query) or die ('la consulta falló' . mysql_error());

  //presentación de los datos en una tabla
  echo '<table border=2>
              <tr>
                  <td>Nombre</td><td>telefono</td><td>Email</td></tr>';
      while ($row=mysql_fetch_array($result)) { //Bucle para ver todos los registros
            $nombre=$row['nombre']; //datos del campo nombre
            $telefono=$row['telefono']; //datos del campo teléfono
            $email=$row['email']; //datos del campo email
            echo "<tr><td>$nombre</td> <td>$telefono</td> <td>$email</td></tr>"; //visualizar datos
            }
      echo '</table>';
      mysql_close($conexion);//cierre de la conexion al servidor
    }


//Funcion que introduce datos desde un formulario en la base de datos
function introducir()
 {
  //recogida de los datos desde un formulario 
  $nombre = $_POST['nombre'];
  $telefono = $_POST['telefono'];
  $email = $_POST['email'];
  //conexion a la base de datos
  $conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
  $db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');
  //lanzando la consulta
  $query = "insert into personas (nombre,telefono,email) values ('$nombre','$telefono','$email')";
  $result = mysql_query($query) or die ('la consulta falló' . mysql_error());
  mysql_close($conexion);//cierre de la conexion al servidor
 }

echo '<h2>Antes de introducir los datos</h2>';
mostrar();
echo '<h2>Despues de introducir los datos</h2>';
introducir();
mostrar();

?>

Como se observa, la función introducir(), recoge los datos desde el formulario en variables que son las que luego utilizaremos como los values de la consulta, funcionando de la siguiente forma, tras introducir los datos en el formulario:

Antes de introducir los datos

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com

Despues de introducir los datos

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com
Jose 222222222 jose@email.com

Como puede observarse todo muy sencillo, iremos viendo como se hacen cambios, como se muestran las ids, como se borran elementos... y haremos una aplicación sencilla que controle una agenda personal como proyecto de este tema.

domingo, 2 de noviembre de 2014

PHP (09) BBDD (03) Lectura y presentación de datos

Como ya hemos visto, podemos conectar con una base de datos desde PHP, de hecho este es uno de sus puntos fuertes, pero debemos de generar consultas y poder mostrarlas por pantalla para que estos datos tengan valor para nosotros.
Siguiendo con el ejemplo anterior, donde ya hemos creado nuestra base de datos desde phpMyAdmin con una base de datos llamada agenda y una tabla llamada personas que tiene como campos; nombre, teléfono y email, vamos a extraer los datos de la misma y presentarlos en forma de tabla.

Para comenzar hay que realizar la consulta a través de una variable de la siguiente forma:
$query = 'consulta';

Una vez que hemos hecho esto se lanza la consulta a por medio de la función mysql_query() a la cual se le pude indicar un mensaje de error.
Todo esto podemos verlo en el siguiente código:
<?php
//conexiones al servidor y la base de datos
$conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
$db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');

//preparación y lanzamiento de la consulta a la base de datos
$query = 'SELECT * FROM personas';
$result = mysql_query($query) or die ('la consulta falló' . mysql_error());
?>

Pero si ejecutamos este código nuestra aplicación aun no hace absolutamente nada visual, ha recogido nuestros datos pero no los muestra para ello vamos a crear una tabla donde se muestren los datos, y vamos a ir volcando nuestras tuplas en un array por medio de la función mysql_fetch_array() que devuelve la tupla actual, pudiéndose recorrer estas por ciclos a través de un while, de la siguiente forma:
<?php
//conexiones al servidor y la base de datos
$conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
$db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');

//preparación y lanzamiento de la consulta a la base de datos
$query = 'SELECT * FROM personas';
$result = mysql_query($query) or die ('la consulta falló' . mysql_error());

//presentación de los datos en una tabla
echo '<table border=2>
            <tr>
                <td>Nombre</td><td>telefono</td><td>Email</td></tr>';
    while ($row=mysql_fetch_array($result)) { //Bucle para ver todos los registros
          $nombre=$row['nombre']; //datos del campo nombre
          $telefono=$row['telefono']; //datos del campo teléfono
          $email=$row['email']; //datos del campo email
          echo "<tr><td>$nombre</td> <td>$telefono</td> <td>$email</td></tr>"; //visualizar datos
          }

    echo '</table>';
?>
Lo cual nos da como resultado la siguiente tabla, actualmente solo con una tupla:

NombretelefonoEmail
miguel 123456789 miguel.a.torralba@gmail.com


Cerrando la conexión

Después de realizar nuestras consultas es necesario cerrar nuestra conexión a la base de datos, para ello se utiliza la función mysql_close() que recibe como parámetro la conexión al servidor para que esta se cierre:
 }
    echo '</table>';
mysql_close($conexion);//cierre de la conexion al servidor
?>

De esta forma nuestra conexión se cierra y no se permite el acceso a la BBDD a menos que se abra de nuevo.

PHP (09) BBDD (02) Acceso a las bases de datos

Para trabajar con las bases de datos a través de PHP, existen una serie de funciones que nos facilitan la labor y nos permiten desde crear tablas a introducir datos, extraerlos, mostrarlos...

Algunas de esas funciones se pueden ver en la siguiente lista:
  • mysql_affected_rows Indica número de filas afectadas por la operación anterior de MySQL.
  • mysql_change_user Cambiar al usuario que inició sesión.
  • mysql_client_encoding Devuelve el nombre del conjunto de caracteres actual.
  • mysql_close Cierra una conexión MySQL.
  • mysql_connect Abre una conexión con un servidor MySQL.
  • mysql_create_db Crea una base de datos MySQL.
  • mysql_data_seek Busca información en la base de datos.
  • mysql_db_name Indica nombre de la base de datos.
  • mysql_db_query Envía una consulta MySQL.
  • mysql_drop_db Desecha (es decir, elimina) una base de datos MySQL.
  • mysql_error Devuelve el texto del mensaje de error de la operación anterior de MySQL.
  • mysql_fetch_array Captura una fila de resultado como matriz asociativa, matriz numérica o ambas.
  • mysql_fetch_assoc Captura una fila de resultado como matriz asociativa.
  • mysql_fetch_row Obtiene una fila de resultado como matriz enumerada.
  • mysql_field_len Devuelve la longitud de un campo dado.
  • mysql_field_name Obtiene el nombre del campo dado en un resultado.
  • mysql_field_seek Busca hasta una bifurcación de campo determinada.
  • mysql_field_table Obtiene el nombre de la tabla en que está el campo determinado.
  • mysql_field_type Obtiene el tipo del campo dado en un resultado.
  • mysql_get_server_info Obtiene información del servidor MySQL.
  • mysql_info Obtiene información acerca de la consulta más reciente.
  • mysql_list_dbs Lista las bases de datos disponibles en un servidor MySQL.
  • mysql_list_fields Lista campos de una tabla MySQL.
  • mysql_list_tables Lista las tablas en una base de datos MySQL.
  • mysql_num_fields Obtiene número de campos en el resultado.
  • mysql_num_rows Obtiene número de filas en el resultado.
  • mysql_pconnect Abre una conexión persistente con un servidor MySQL.
  • mysql_query Envía una consulta MySQL.
  • mysql_result Obtiene datos de resultado.
  • mysql_select_db Selecciona una base de datos MySQL.
  • mysql_tablename Obtiene el nombre de tabla de un campo.

Conectando al servidor

Para conectar al servidor, PHP lo hace por medio de objetos utilizando la función mysql_connect(), la cual recibe como parámetros; el servidor, el usuario y la clave de conexión.
La función devuelve un parametro true o false, dependiendo de si la conexión ha resultado con éxito, o no, de hecho se le puede introducir una función die para que muestre un mensaje en caso de que no se pueda conectar con el servidor, tal y como vemos en el siguiente ejemplo:
<?php
$conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');

?>

Conectando a la base de datos

Una vez que ya hemos conectado al servidor es necesario que conectemos con la base de datos, para ello  utilizamos la función
mysql_select_db('nombre de la base de datos', identificador)
Donde tenemos que escribir el nombre de la base de datos y en identificador introducir la variable que guarda la conexión al servidor de la siguiente manera:

Nota: vamos a utilizar una base de datos llamada agenda

<?php
$conexion = mysql_connect("localhost","root","") or die ('No se ha podido conectar al servidor');
$db = mysql_select_db("agenda", $conexion) or die ('No se ha podido conectar a la base de datos');

De esta forma ya estamos conectados a nuestra base de datos, y podremos trabajar con ella realizando consultas, como veremos en los siguientes artículos...


sábado, 1 de noviembre de 2014

DevFestCordoba 2014

Cartél de presentación
Ayer pasé el día en el DevFestCordoba, que como el año pasado fue una experiencia excelente con muchos tipos de charlas, aunque primordialmente se basó en Android.
Nada más llegar al evento, que comenzó en su horario de mañana en el salón de actos de la facultad de derecho, nos dieron unas camisetas muy chulas, y comenzaron las charlas.
  • La primera impartida por mi buen amigo David Moreno, nos habló sobre Gradle, que el usa diariamente en su trabajo, y la verdad que estuvo muy bien, ya que muchos no conocíamos de que se trataba y nos los explico bastante limpiamente.
  • Siguió la segunda charla impartida por Nacho Álvarez, el cual nos habló de  Raspberry Pi + NFC + Android, mostrando como se podían pasar archivos de un dispositivo a otro, pagar con el nuestros  dispositivo android... la verdad es que fue muy divertida.
  • Continuamos con Juan Carlos Rodirguez hablando sobre iBeacons y los Bluetooth 4.0 de bajo consumo y sus utilidades, que son sorprendentes
  • Antes del descanso Leticia Capelo nos hablo de la importancia de introducir a más chicas en el mundo de la informática, y de las iniciativas que están realizando algunos grupos de mujeres por todo el mundo para hacer que cada vez haya más, en un sector actualmente dominado por los hombres. Yo animo a todas las chicas a que aprendan más de la informática.
  • Después del descanso tuvimos la que para mi a titulo personal, como desarrollador de Apache Cordova, fue la ponencia más interesante, Hiram Rodriguez nos mostró el funcionamiento de Ionic, una tecnología para hacer aplicaciones para móviles que me dejó boquiabierto, ya que simplifica el trabajo enormemente. De hecho en tan solo unos días quiero ponerme a investigarlo.
  • Jorge Rider continuó exponiendo su trabajo con Google Cloud Messaging, muy interesante como servicio de mensajería, y muy fácil de utilizar.
  • Otra de mis favoritas fue la charla ofrecida por Javier Velasco, sobre Polymer,  una biblioteca que utiliza las últimas tecnologías web que permite crear elementos HTML personalizados. Según dicen el futuro de la web...
En los talleres

Tras las charlas de la mañana nos desplazamos hasta CoSfera, donde se nos dio pizza y refrescos a todos, todo un detalle, y comenzaron los talleres, desgraciadamente yo solo pude quedarme al primero de los dos, el cual trató sobre Chromecast, su funcionamiento, como se programa, algunas aplicaciones... y sobre todo muy divertida ya que pusieron una televisión allí, donde todos mostraban mensajes, jugaban... por desgracia para mi, mi móvil, que es de cuando los Reyes Catolicos aun no habían entrado en Granada, no pudo bajar las aplicaciones y no pude juguetear mucho, pero no importó para ver lo que se puede hacer.

Otro año más ha sido una pasada y de hecho me fui de allí con la sensación de haber aprendido mucho y sobre todo con otro evento para el viernes que viene sobre Polymer...

Como casi siempre Álvaro y yo juntos en este tipo de eventos!!!


jueves, 30 de octubre de 2014

Archivo de conexión a la base de datos de magento

Llevo unos días investigando Magento, de hecho me siento como un explorador de siglos pasados intentando descubrir donde esta la Fuente de la Juventud, pero sin éxito alguno.
La cuestión es que me han solicitado que haga un plugin con una funcionalidad muy especifica y con cierto grado de complejidad en el algoritmo, cosa que esta solventada, el problema proviene cuando tenemos que conectar con la base de datos, la cual no es relacional si no EAV (ya os hablare de eso en otra entrada), por lo que hacer consultas es practicamente imposible si no eres un especialista en Magento.

Aun así y tras muchos intentos y búsquedas, aunque no haya dado con la Fuente, si es cierto que he encontrado otras cosas, como por ejemplo el archivo donde esta la información para la conexión a la base de datos, cuya dirección es:
/magento/app/etc/local.xml

En este archivo podemos encontrar un pequeño código, no os asusteis no es muy grande donde una de sus fracciones, que se puede ver a golpe de vista es la siguiente:
<connection>
 <host><![CDATA[nombreHost]]></host>
 <username><![CDATA[nombreUsuario]]></username>
 <password><![CDATA[password]]></password>
 <dbname><![CDATA[nombreDB]]></dbname>
 <active>1</active>
<connection>

Se puede observar los datos que hay y donde están, por lo que es relativamente sencillo obtenerlos para poder acceder a nuestra base de datos desde un plugins php que utilicemos.
Los datos son por orden:
  • nombre del host
  • nombre de usuario
  • password
  • nombre de la base de datos
  • si esta o no esta activa
Además si cambian los valores de nuestra base de datos podemos hacerlo desde aquí.

miércoles, 29 de octubre de 2014

PHP (09) BBDD (01) Bases de datos

En este primer articulo sobre las bases de datos, vamos a dar algunas definiciones e ideas de que es y como funcionan las bases de datos en PHP.
Los siguientes estarán enfocados a MySQL, una de las bases de datos más extendidas, pero si se conoce como funciona la conexión y su trabajo, se descubrirá que las demás BBDD funcionan de forma similar.

Se podría definir una base de datos, de forma muy burda, pero que de momento nos vale como: Una colección de tablas donde se encuentran los datos.
De forma más acertada podríamos utilizar decir que:

Unas base de datos es un almacén (físico/virtual) donde se albergan los datos de forma ordenada, representando los aspectos del mundo real que le interesen al diseñador, ya que las bases de datos se crean con un propósito especifico.
            Los datos pueden ser desde los libros de una biblioteca a números de teléfono, direcciones, expedientes académicos, historiales clínicos...
Un ejemplo muy sencillo de esto podría ser una agenda con nombres y teléfonos, lo cual nos daría dos campos (nombre y teléfono).

Aunque aquí no hablaremos del lenguaje SQL estrictamente, si es necesario que demos un pequeño repaso, para que aquello profanos que nos siguen puedan dejar su situación y continuar con el tutorial de forma satisfactoria.

SQL (Structured Query Lenguage) ó (Lenguaje de consulta estructurado) es el lenguaje que se utiliza para acceder a las bases de datos. PHP puede introducirlo en su código y de este modo se hace lo que se podría considerar el sumun de la programación en PHP.

Para comenzar este repaso rápido por SQL supongamos que tenemos una tabla llamada agenda con los siguientes campos:
Nombre         Teléfono
Miguel         123456789
Antonio        987654321
María          386943724

Para poder observar los datos de la tabla, es necesario realizar una consulta SQL, que es una instrucción. Por ejemplo, si quisiéramos mostrar todos los datos de nuestra tabla, deberíamos de escribir:
SELECT * FROM agenda

Esta consulta nos mostraría todos los valores de la tabla.
Pero PHP necesita algo más que la consulta, ya que para interactuar con MySQL, necesita la función mysql_query() de una forma similar a esta: (no te preocupes si no lo entiendes, es solo un ejemplo y haremos muchos ejercicios en los próximos articulos.)
$query = "SELECT * FROM agenda";
$result = mysql_query($query) or die("Falló la consulta: " . mysql_error());

Todo esto que puede parecer muy grande, en realidad es muy sencillo, e incluso divertido, ya que es donde radica la mayor parte de la potencia de PHP yse pueden hacer cosas realmente espectaculares, de hecho la inmensa mayoría de los CMS actuales funcionan por este proceso.

MySQL

Para instalar MySQL en tu ordenador, es muy sencillo, tan solo tienes que tener instalado el XAMP o un programa similar según tus gustos y sistema operativo, o bien puedes hacerlo a mano en linux, aunque yo no lo recomiendo
Una vez que lo tenemos instalado es fácil acceder a él y crear una pequeña base de datos para comenzar a trabajar con PHP, de hecho hay multitud de información en la red sobre como hacerlo y espero poder hacer un vídeo en los próximos días para que veáis como se hace paso a paso, y utilizar un script de PHP para empezar a hacer consultas.