ene
25
2013

Prácticas de PHP – MySql

Ejercicio práctico de PHP – MySql

En esta práctica queremos implementar una pequeña aplicación en PHP5 que, tomando las tres primeras letras de la entrada estándar, devuelva por la salida estándar todas las coincidencias de hospedajes existentes en una determinada base de datos, ordenados por nombre, incluyendo sus características y su ubicación.

Tenemos dos tipos de hospedajes, Hoteles y Apartamentos, cada uno con sus características específicas. En el caso de los hoteles, además de su nombre, necesitamos conocer el número de estrellas y el tipo de habitación estándar que tienen (dejamos a tu elección proponer unos cuantos tipos de habitación como doble, doble con vistas, …). En el caso de los apartamentos y además de su nombre, necesitamos conocer para cada propiedad cuantos apartamentos tienen disponibles y para cuantos adultos tienen capacidad, teniendo en cuenta que sólo tienen un tipo de apartamentos.

Para la ubicación de cualquier hospedaje nos basta con indicar la ciudad y provincia.

La salida (a mostrar por salida estándar) debería ser un listado del siguiente tipo:

.Hotel Azul, 3 estrellas, habitación doble con vistas, Valencia, Valencia
.Apartamentos Beach, 10 apartamentos, 4 adultos, Almeria, Almeria
.Hotel Blanco, 4 estrellas, habitación doble, Mojacar, Almeria
.Hotel Rojo, 3 estrellas, habitación sencilla, Sanlucar, Cádiz
.Apartamentos Sol y playa, 50 apartamentos, 6 adultos, Málaga, Málaga

Esta práctica la realice como test de conocimientos PHP-MySql, seguramente encontréis mil formas de solucionarlo, con clases, utilizando la arquitectura modelo-vista-controlador, etc. En mi caso no me compliqué demasiado y aún así me llevo más de 2 o 3 horas.

La solución contiene el código PHP así como la creación de las tablas MySql que eran necesarias:

La solución

Fichero conexion.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
// creamos la función que utilizaremos para conectarnos en la bd.
// Si cambia la bd solo tendremos que cambiarlo en un sitio.  
// El archivo se llamara conexion.php que luego llamaremos desde el script que hará 
// la consulta en la bd.
 
function Conectarse()
{
   if (!($conectado=mysql_connect("host.com","user","password1")))
   {
      echo "Error de conexion a la base de datos.";
      exit();
   }
   if (!mysql_select_db("basededatos",$conectado))
   {
      echo "Error al seleccionar la base de datos.";
      exit();
   }
   return $conectado;
}
?>

Fichero consulta.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
 
include("conexion.php");
 
// Llamamos al fichero que tiene la función que nos permite conectarnos a la bd.
 
// Realizamos la conexión
$conectado=Conectarse();
 
 
// Recogemos el parámetro
$consultaCiudad= $_REQUEST["consultaCiudad"];
 
 
if($conectado){
 
        $sqlCiudad= "select * from (
       select hos.nombre, h.estrellas || 'estrellas', h.tiphab, u.ciudad, u.provincia
       from         hotel h, 
               hospedaje hos, 
               ubicacion u 
       where hos.idUbi = u.id 
       and hos.id = h.idHos
       and (u.ciudad like '%$consultaCiudad%' or u.provincia like '%$consultaCiudad%') 
       union
 
select hos.nombre, a.disponibles || ' apartamentos', a.capacidad || ' adultos', u.ciudad, u.provincia
       from    apartamento a,         
               hospedaje hos, 
               ubicacion u 
       where hos.idUbi = u.id 
       and hos.id = a.idHos
       and (u.ciudad like '%$consultaCiudad%' or u.provincia like '%$consultaCiudad%') 
       ) t
       order by nombre";
 
        $resSqlCiudad = mysql_query($sqlCiudad) or mysql_error();
 
        if (!$resSqlCiudad) {
                echo "Fallo la consulta: ".$resSqlCiudad;
                mysql_close($conectado);
                return 0;
        } else {
 
 
                echo "<ul>";  // creamos la lista
 
                while ($result_rowCiudad = mysql_fetch_row(($resSqlCiudad))) {
 
                        echo "<li> ".$result_rowCiudad["0"].", ".$result_rowCiudad["1"].",".$result_rowCiudad["2"].",".$result_rowCiudad["3"].",".$result_rowCiudad["4"]." ";
                     // mostramos cada resultado de la lista.           
                }   
 
                echo "</ul>"; // cerramos la lista
        }
 
} else {
        die("Fallo en la conexión al servidor.");
}
 
?>

Fichero de creación de tablas MySql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
--Tabla ubicacion(id, ciudad, provincia)
CREATE TABLE ubicacion (id INT PRIMARY KEY, ciudad VARCHAR(30), provincia VARCHAR(30));
 
--Tabla hospedaje(id, nombre, idUbi)
--idUbi FK ubicacion.id
CREATE TABLE hospedaje (id INT PRIMARY KEY, nombre VARCHAR(30), idUbi INT, FOREIGN KEY (idUbi) REFERENCES ubicacion (id));
 
--Tabla hotel(idHos, estrellas, tiphab)
--idHos FK hospedaje.id
CREATE TABLE hotel (idHos INT, estrellas INT, tiphab VARCHAR(50), FOREIGN KEY (idHos) REFERENCES hospedaje (id));
 
--Tabla apartamento(idHos, disponibles, capacidad)
--idHos FK hospedaje.id
CREATE TABLE apartamento (idHos INT, disponibles INT, capacidad INT, FOREIGN KEY (idHos) REFERENCES hospedaje (id));
 
 
 
 
 
SELECT * FROM 
(
SELECT hos.nombre, h.estrellas || 'estrellas', h.tiphab, u.ciudad, u.provincia
       FROM         hotel h, 
               hospedaje hos, 
               ubicacion u 
       WHERE hos.idUbi = u.id 
           AND hos.id = h.idHos
       AND (u.ciudad LIKE '%$consultaCiudad%' OR u.provincia LIKE '%$consultaCiudad%') 
UNION
SELECT hos.nombre, a.disponibles || ' apartamentos', a.capacidad || ' adultos', u.ciudad, u.provincia
       FROM    apartamento a,         
               hospedaje hos, 
               ubicacion u 
       WHERE hos.idUbi = u.id 
           AND hos.id = a.idHos
       AND (u.ciudad LIKE '%$consultaCiudad%' OR u.provincia LIKE '%$consultaCiudad%') 
) t
ORDER BY nombre
Han llegado aquí buscando:
Ningún usuario a búscado algo parecido en nuestra website

Related Posts

Acerca del Autor:

1 Comment + Add Comment

  • Hola, amigos, ojala pueda ayudarme en esto: Tengo un cliente que tiene contrato con un servidor web que no soporta bases de datos Mysql, por lo tanto no puedo instalar aplicaciones que requieren bases de datos,específicamente Oscommerce. Mi servidor si soporta Mysql, cree una base de datos en mi servidor y subi los archivos de oscommerce al servidor de mi cliente, al tratrar de usar la información de la base de datos en el proceso de instalacion, no me lo permite, que hago para usar la base de datos de mi proveedor en el hosting de mi cliente.

Leave a comment


siete + 5 =

Ayudas!

Recientes

  • Ber: Pongo los que voy utilizando, si te animas y tienes alguno, enviamelo y lo publicamos. Un saludo,
  • luis enrique: estimado tienes batcheros para validar reglas de tipo numéricos, fecha y letras, asi como retirar...
  • Ber: Hola, No se muy bien a que te refieres, si me das más detalles. Saludos
  • Myri: hola me puedes ayudar me sale una cxudricula en el emulador pero en el telefono me sale q la plicacion no se...
  • Ber: Hola, No lo tengo en java no, :( . Si lo haces envíamelo please y lo subo si quieres. Un saludo,
Google+