No es un bug, es una característica no documentada

Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas

12/10/16

Galería web responsive. HTML5 + Bootstrap + PHP + Magnific Popup

23:45 Posted by Inazio Claver , , No comments
Realizando una página web me surgió la necesidad de crear una sección que sirviera de galería para que el cliente pueda mostrar todos sus trabajos.
Los requisitos que buscaba es que fuera responsive y que su carga fuese rápida. No quería perder mucho tiempo desarrollando una galería con esas características desde cero y me puse a buscar hasta que llegué a este proyecto en Git Hub de Dmitry Semenov: https://github.com/dimsemenov/Magnific-Popup.

19/6/16

Geocodificación con Google Maps API y PHP

21:28 Posted by Inazio Claver No comments

La geocodificación es el proceso de asignar coordenadas geográficas, como latitud-longitud.

Lo que voy a explicar aquí es como convertir una dirección textual, una calle por ejemplo, en coordenadas ltd-lng, para poder utilizarlas posteriormente en un mapa de Google, ya que cuando queremos cargar un map en una web debemos echar mano de coordenadas geocodificadas.

¿Me quedó algo redundante el anterior párrafo, verdad? Perdón.

Vayamos al apartado técnico, que es lo que tiene chicha y lo que queremos hacer.
Usaremos la API de Google Maps (podéis echarle un ojo aquí) y trabajaremos con un lenguaje de parte servidor como PHP realizando una llamada JSON y capturando su respuesta.

Puede sonar algo... lioso, intenso, así leído de primeras, pero cuando lo veamos paso por paso veremos que en realidad el procedimiento es tremendamente sencillo.

Para nuestro caso práctico, vamos a convertir la dirección "Calle San Lorenzo, Huesca, Spain".

¿Estáis listos? Empezamos.

Lo primero que debemos tener en claro es nuestra estructura de ficheros. Para mi caso ejemplo voy a crear, en el mismo directorio, dos ficheros. Geoposicionamiento.php para almacenar la función encargada de devolver la respuesta JSON, y miEjemplo.php para pasar la calle y extraer las coordenadas.

Geoposicionamiento.php

Vamos a crear una función a la que le pasaremos por parámetro una dirección y nos retornará o bien un array con tres campos, latitud, longitud y string con la dirección enviada, o bien FALSE si se produjo algún tipo de error en la conversión.

function geocodificacion($address){}

Ahora, dentro de la función, convertiremos la dirección del parámetro en una URL

$address = urlencode($address);

Y la URL la apuntaremos, a través de un método POST, a la API de geocodificación de Google Maps

$url = "http://maps.google.com/maps/api/geocode/json?address={$address}";

En una variable nueva recogeremos la respuesta JSON

$resp_json = file_get_contents($url);

Y procederemos a descodificarla

$resp = json_decode($resp_json, true);

Para poder llevar a cabo la geocodificación, el parámetro Status de la respuesta deberá tener un valor de OK. En caso contrario, retornaremos FALSE.

if ($resp['status'] == 'OK'){
}
else{
    return false;
}

¡Recuerda! Estamos dentro del if. 

Deberemos capturar sólo los datos que nos interesen. En mi caso, latitud, longitud y la dirección formateada.

$lati = $resp['results'][0]['geometry']['location']['lat'];
$longi = $resp['results'][0]['geometry']['location']['lng'];
$formatted_address = $resp['results'][0]['formatted_address'];

Deberemos verificar que los datos estén completos. En caso contrario, volveremos a retornar FALSE.

if ($lati && $longi && $formatted_address){
}
else{
    return false;
}

Volvemos a estar dentro del if. En este caso del segundo

Ahora que ya sabemos que los datos son correctos, debemos crear un nuevo array, almacenar en él la información y devolverlo.

$data_arr = array();

array_push(
    $data_arr,
    $lati,
    $longi,
    $formatted_address
);

return $data_arr;

¿Sencillo, verdad?

miEjemplo.php

En el segundo archivo, lo que hacemos simplemente es incluir el archivo anterior

include_once '../lib/geoposicionamiento.php';

Crear un string con la dirección

$cadena = "Calle San Lorenzo, Huesca, Spain";

Y hacer la llamada a la función

$data_arr = geocode($cadena);

Luego solo nos quedará tratar la información como deseemos. Por ejemplo, yo quiero quedarme la latitud y la longitud en dos variables nuevas.

if ($data_arr){
    $latitud = $data_arr[0];
    $longitud = $data_arr[1];
}
else{
    $latitud = NULL;
    $longitud = NULL;
}

Y si todo fue correcto, podremos ver que la latitud y la longitud de esa dirección es: 42.135508, -0.405422

Puedes ver el código completo de la clase PHP en mi repositorio de Github.

11/1/16

Acceso a datos. Aplicaciones web servidor. PHP (Ejercicio)

1:11 Posted by Inazio , 1 comment
En la sección de PHP hemos visto poquísimo. Básicamente, un ejercicio para realizar consultar basadas en la interfaz PDO para conexión con bases de datos.

Os lo pongo a continuación:

Sobre un proyecto nuevo PHP (PracticaPDO), realiza las siguientes tareas:

  • Lanza el script practicaPDO.sql
  • Crea el siguiente script conexion.php:

<?php
$servidor = 'localhost';
$bd = 'practicapdo';
$usuario = 'root';
$contrasenia = '';
?>
  • Agrega el siguiente script index.php que permita crear el siguiente menú que lanzará los scripts de los siguientes apartados:

11/6/15

Lenguajes de marcas. Prácticas y teoría (TODO COMPLETO)

20:05 Posted by Inazio , , , , , No comments
Este curso, mientras estudiaba por las mañanas, me apunte a un certificado profesional de creación de páginas web.

Estudié HTML5 y CSS3, junto con algo de JavaScript. Por desgracia tuve que abandonar el curso antes de poder ver jQuery, Ajax y poder refrescar PHP, pero la verdad que aprendí bastante.

Hablando con un compañero de DAM por las mañanas comento que quería echarle un vistazo a estos temas en verano, así que aprovecho la plataforma para colgar todos los apuntes y trabajos que he realizado tanto en éste módulo de Lenguajes de marcas como en el certificado de por la tarde.

En verano iré ampliando la información con JavaScript y jQuery, en cuanto un compañero de por la tarde me pase lo que han continuado haciendo.

Esta todo montado en una carpeta en el Drive. Disfrutadla :)

Los temas a tratar son:
  • HTML
  • CSS
  • PHP
  • JAVASCRIPT
  • JQUERY
  • AJAX
  • XML / XSLT
Podeís visitar el enlace pulsando aquí.

2/3/15

Entornos de desarrollo. NetBeans. Creación de web PHP en servidor remoto (práctica)

8:58 Posted by Inazio , No comments
La primera dificultad fue, basicamente, poder hacer entera la práctica. Mi ordenador está en reparación en garantía (me salió mal el touchpad y claro, ya que está pagado se aprovecha), con lo que me dejaron un ordenador de la tienda para poder ir trabajando mientras. 
Es una patata, y esta práctica no me permite hacerla porque faltan requisitos de virtualización.

Tampoco me va a dejar grabar la pantalla con un programa de captura de video del propio ordenador. Ya lo probe...

Ergo sólo me quedaba esta opción, chapucera donde las haya, pero mejor que no entregar nada siempre será.

De esa solución ha surgido este video. La calidad, en el montaje, no ha quedado muy buena. Movie Maker es lo que tiene, pero la falta de recursos...

En fin, disfruten de la experiencia



Evidentemente, como ya intuía, este video el profesor no lo ha dado por válido. Pero menos mal que me llegó mi portatil de garantía el viernes siguiente y he podido hacer uno con algo más de calidad en una máquina virtual. He aquí el resultado:


6/2/15

Lenguajes de marcas. Formularios HTML5+PHP+BD

13:35 Posted by Inazio , No comments
Sintaxis:

<form action="formulario.php " method=" ">
     <input ...>
     <input type="submit">
</form>

En el action, pasaremos los datos del formulario a formulario.php, pero tenemos dos modos de realizar el método:

  • get -  Se verá en la URL. Habrá que usar la variable $_GET
  • post - Viaja enmascarado. Hay que usar $_POST


NOTA:
br, hr, img, input, link y meta, entre otras etiquetas, no hace falta cerrarlos en HTML5

Vamos a usar el NetBeans para esta práctica. Creamos un proyecto en PHP remoto (tal y como explicaba en la entrada anterior (ver aquí) de nombre, por ejemplo, formulario en mi caso.

Necesitaremos dos archivos, index.php y tratarFormulario.php.

Hacemos primero una sencilla prueba, escribimos en index.php el código para generar un simple bóton y un cuadro de texto, tal que así:


Y veremos en el navegador esto:

Cuando pulsemos enviar nos llamará a tratarFormulario. Si miramos atentamente a la URL...


¿Veis? Podemos ver lo que contiene el campo nombre. Por eso se dice que el método GET es inseguro, por ejemplo permitiría realizar un ataque de SQL inyection.
Eso lo solucionaremos usando método post.

En este ejemplo trabajaremos con get, posteriormente realizaré pruebas con código usando post.

En tratarFormulario.php escribimos lo siguiente:


Lo que hacemos en la línea 8 es mostrar por pantalla un Hola y el texto capturado del formulario de index.php


Podemos hacer varias cosas con los cuadros de texto y los botones. Por ejemplo, si queremos insertar un valor por defecto, usaremos el parámetro value. Ej:

<input type="text" name="nombre" value="Escribe aquí...">
<input type="submit" value="Ok">

Si queremos limitar el número de caracteres que pueden escrbir en las cajas, usaremos el parámetro maxlength:

<input type="text" name="nombre" value="Escribe aquí..." maxlength="5">


Tambien tenemos distintos tipos de input. Por ejemplo, para la fecha, o para indicar código hexadecimal de un color:

<input type="date" name="fecha" value="<?php echo date("Y-m-d");?>">

<input type="color" name="color">

El código php en el value es para mostrar el día actual

Vamos a hacer una calculadora, a ver como queda:

Código en index.php:

<form action="tratarFormulario.php" method="get">
     <p>Calculadora</p>
     <input type="text" name="uno">
     <p>+</p>
     <input type="text" name="dos">
     <input type="submit" value="Ok">

</form>

Código en tratarFormulario.php:

<?php
     echo 'La suma de '.$_GET['uno'].' y '.$_GET['dos'];
     $resultado=$_GET['uno']+$_GET['dos'];
     echo ' es '.$resultado;

?>

De modo que el código completo, hasta el momento, sería la siguiente:

index.php

<!DOCTYPE html>

<html lang="es">

    <head>
        <meta charset="UTF-8"/>
        <title>::Formularios::</title>
    </head>
   
    <body>
        <form action="tratarFormulario.php" method="get">
            <p>Nombre</p>
            <input type="text" name="nombre" value="nombre..." maxlength="5">
            <input type="text" name="apellido" value="apellidos...">
            <input type="date" name="fecha" value="<?php echo date("Y-m-d");?>">
            <input type="color" name="color">
           
            <p>Calculadora</p>
            <input type="text" name="uno">
            <p>+</p>
            <input type="text" name="dos">
            <input type="submit" value="Ok">
        </form>
       
    </body>

</html>

tratarFormulario.php

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8"/>
        <title>::Formularios::</title>
    </head>
        <?php
            echo 'Hola '.$_GET['nombre'].' '.$_GET['apellido'];
            echo 'Día seleccionado: '.$_GET['fecha'];
            echo ' ';
            echo 'Color '.$_GET['color'];
            echo '<br>';
            echo 'La suma de '.$_GET['uno'].' y '.$_GET['dos'];
            $resultado=$_GET['uno']+$_GET['dos'];
            echo ' es '.$resultado;
        ?>
    <body>
       
    </body>

</html>

Visualizando lo siguiente:

index.php

tratarFormulario.php


Ahora vamos a hacer una conexión al servidor a través de formularios.

Creamos un nuevo documento, introducirEnPHP.php.

En index.php, el código a escribir será el siguiente:


y en introducirEnPHP.php


Y comprobamos que nos da el mensaje de la consulta correcta


Los códigos completos de las prácticas de hoy son:

index.php

<!DOCTYPE html>

<html lang="es">

    <head>
        <meta charset="UTF-8"/>
        <title>::Formularios::</title>
    </head>
   
    <body>
        <form action="tratarFormulario.php" method="get">
            <p>Nombre</p>
            <input type="text" name="nombre" value="nombre..." maxlength="5">
            <input type="text" name="apellido" value="apellidos...">
            <input type="date" name="fecha" value="<?php echo date("Y-m-d");?>">
            <input type="color" name="color">
           
            <p>Calculadora</p>
            <input type="text" name="uno">
            <p>+</p>
            <input type="text" name="dos">
            <input type="submit" value="Ok">
        </form>
        <br><br>
        <form action="introducirEnPHP.php" method="get">
            Nombre:<input type="text" name="nombre" value="nombre.....">
            Edad: <input type="text" name="edad">
            <input type="submit">
        </form>
    </body>

</html>

tratarFormulario.php

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8"/>
        <title>::Formularios::</title>
    </head>
        <?php
            echo 'Hola '.$_GET['nombre'].' '.$_GET['apellido'];
            echo 'Día seleccionado: '.$_GET['fecha'];
            echo ' ';
            echo 'Color '.$_GET['color'];
            echo '<br>';
            echo 'La suma de '.$_GET['uno'].' y '.$_GET['dos'];
            $resultado=$_GET['uno']+$_GET['dos'];
            echo ' es '.$resultado;
        ?>
    <body>
       
    </body>
</html>


IntroducirEnPHP.php

<?php
    $servidor="localhost";
    $usuario="dam1";
    $password="dam1123";
    $bd="dam1_inazio";
       
    $conector=mysqli_connect($servidor,$usuario,$password,$bd);
       
    if (mysqli_connect_errno($conector)){
        echo "Fallo al conectar a MySQL:" . mysqli_connect_error();
    }
    else{
        echo "Conexión correcta";
        $nombre=$_GET['nombre'];
        $edad=$_GET['edad'];
        $consulta="INSERT INTO usuario VALUES (null,'$nombre',$edad)";
        if (mysqli_query($conector,$consulta))   {
            echo 'Consulta correcta';
        }
        else{
            echo 'Error en la consulta';
        }
    }

?>



4/2/15

Entornos de desarrollo. PHP con NetBeans

9:30 Posted by Inazio , No comments
Vamos a crear nuestra primera página en PHP con NetBeans. Lo primero, si no lo tenemos instalado, será instalar el pluggin de PHP.

Hecho eso, nos vamos a File - New Proyect y elegimos PHP Application from Remote Server



En la siguiente pantalla, elegimos un nombre de proyecto. Por defecto saldrá el de a continuación, yo elegí proyecto1


Pulsamos Next y en Proyect URL escribimos la dirección donde guardaremos nuestro proyecto. Pulsmos en Manage para crear una nueva conexión remota


Escribimos la dirección IP del servidor, usuario y contraseña


Ok, Siguiente y saldrá el siguiente mensaje


Abrimos y/o nos descargamos el Putty, nos conectamos con el servidor con usuario y contraseña y, dentro de la carpeta proyecto1 que se nos ha debido crear anteriormente y creamos un index.php


Nos vamos a NetBeans, retrocedemos pulsando Back y volvemos a pulsar Next. Se nos creará el proyecto


 En index.php escribimos el siguiente código:



He aquí el código:

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8" />
        <title>Mi primera página PHP</title>
    </head>
   
    <body>
    <?php
        phpinfo();
    ?>
       
    </body>


</html>

y comprobamos, pulsando el botón play


Para comprobar la página. Veremos algo similar a esto:


El siguiente paso es conectarnos a la base de datos para crear una nueva tabla llamada usuarios:


Nos vamos a mi usuario, pulsamos en nueva y configuramos la nueva tabla de la siguiente manera:




Y rellenamos las tablas con dos valores de nombre y edad


Vamos a escribir nuestro primer código, en el que primero nos conectaremos a la base de datos:


Y veremos lo siguiente:


A continuación haremos una consulta:


Viendose de la siguiente manera:


El código completo utilizado hasta este punto:

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8" />
        <title>Mi primera página PHP</title>
    </head>
   
    <body>
    <?php
        $servidor="localhost";
        $usuario="dam1";
        $password="dam1123";
        $bd="dam1_inazio";
       
        $conector=mysqli_connect($servidor,$usuario,$password,$bd);
       
        if (mysqli_connect_errno($conector)){
            echo "Fallo al conectar a MySQL:" . mysqli_connect_error();
        }
        else{
            echo "Conexión correcta";
           
            $consulta="SELECT * FROM usuario;";
           
            $resultado=mysqli_query($conector,$consulta);
            $fila=mysqli_fetch_assoc($resultado); // Capturo fila de consulta en $fila
           
            while ($fila != NULL){ // Hasta que no queden más filas
                echo "<br />"; // Salto de linea en HTML
                print_r($fila);
                $fila=mysqli_fetch_assoc($resultado);
            }
        }
    ?>
       
    </body>

</html>

El problema es que montado así queda un poquito bastante feo la visualización de la consulta. ¿Que hacemos?
Montarlo en una tabla.

Lo primero será capturar las claves de nuestra consulta, para capturar los nombres de los arrays.

Por tanto, vamos a utilizar la función foreach.

A foreach le tenemos que pasar como parámetros la fila llamandolo como $campo el nombre de la clave y como $valor los valores contenidos en las mismas.

foreach ($fila as $campo => $valor)

Basicamente lo que haremos será generar la estructura de una tabla y automatizar el mostrado tanto del nombre de la columna como de los campos. Tal que así


Visualizando así el resultado:

Código de nuevo completo, utilizado hasta este momento y que reemplaza al anterior mostrado:

<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8" />
        <title>Mi primera página PHP</title>
    </head>
   
    <body>
    <?php
        $servidor="localhost";
        $usuario="dam1";
        $password="dam1123";
        $bd="dam1_inazio";
       
        $conector=mysqli_connect($servidor,$usuario,$password,$bd);
       
        if (mysqli_connect_errno($conector)){
            echo "Fallo al conectar a MySQL:" . mysqli_connect_error();
        }
        else{
            echo "Conexión correcta";
           
            $consulta="SELECT * FROM usuario;";
           
            $resultado=mysqli_query($conector,$consulta);
            $fila=mysqli_fetch_assoc($resultado); // Capturo fila de consulta en $fila
            echo "<table>"
                    . "<thead>"
                        . "<tr>";
                            foreach($fila as $campo => $dato){ // Capturamos el nombre del campo
                                echo "<th>$campo</th>";
                            }
                        echo "</tr>"
                    . "</thead>"
                    . "<tbody>";
           
            while ($fila != NULL){ // Hasta que no queden más filas
                echo "<tr>";
                foreach($fila as $dato){ // Imprime uno a uno los campos de la fila
                    echo "<td>$dato</td>";
                }
                echo "</tr>";
                $fila=mysqli_fetch_assoc($resultado);
            }
            echo "</tbody></table>";
        }
    ?>
       
    </body>

</html>

Y por supuesto si insertas posteriormente más datos en la tabla, los mostrará simplemente recargando la página