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.
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
19/6/16
Geocodificación con Google Maps API y PHP

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)
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:
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)
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:
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)
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
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:
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:
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:
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:
Código en tratarFormulario.php:
De modo que el código completo, hasta el momento, sería la siguiente:
index.php
tratarFormulario.php
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
tratarFormulario.php
IntroducirEnPHP.php
<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>
<?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
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
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

