Bases de Datos (Segundo Curso) Enxeñeria Técnica en Informática de Sistemas Escola Técnica Superior de Enxeñería Universidade de Santiago de Compostela
Seminario 1: PHP
Curso 2006-2007
José Ramón Ríos Viqueira
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 2
Objetivo
HyperText Markup Language (HTML)
PHP: Hypertext Preprocessor (PHP)
Acceso a bases de datos desde PHP
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 3
Programación del acceso a bases de datos desde una
aplicación web
PRODUCTO
ref
nombre
tipo precio
1142 1135 1199 1187. . .
K7 ABIT KW7 K7 ABIT NF7-S2 K7 AOPEN KM400 AM-S K7 ASROCK K7S41. . .
Placa Placa Placa Placa. . .
71,37 76,42 63,10 38,85. . .
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 4Objetivo
HTML
PHP
Acceso a BD
SERVIDOR
WEB
Pagina1
HTML
Pagina2
HTML
Pagina3
HTML
NAVEGADOR
Petición HTTP:
http://maquina2/Pagina1.html
Página1
HTML
Navegadores
Netscape, Firefox, Internet explorer
Servidores Web
Apache, Internet Information Server (IIS)
MAQUINA1
MAQUINA2
Páginas Web Estáticas (HTML)
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 5
Hypertext Markup Language (HTML)
Estándar del W3C (http://www.w3.org/MarkUp/)
Referencia HTML 4.0 (
http://www.htmlhelp.com/reference/html40/
)
Estructura y conceptos básicos
<HTML> <HEAD> <TITLE> Mi primera página </TITLE> </HEAD> <BODY>
<p align = center>Este es el texto de un párrafo </p> El espacio entre palabras se ignora Incluso los saltos de línea Para saltar de línea<br> se inserta un <br><br><br>
Para insertar espacio se usa el &nbsp; <!-- Esto es un comentario --> </BODY> </HTML>
TAGS
HTML, HEAD, BODY
Atributos
Caracteres especiales
Comentarios
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 6Objetivo
HTML
PHP
Acceso a BD
Listas, Imágenes y Enlaces
<!-- LISTAS --> <UL>
<LI>Primer elemento</LI> <LI>Segundo elemento</LI> <LI>Tercer elemento</LI> </UL>
<OL>
<LI>Primer elemento</LI> <LI>Segundo elemento</LI> <LI>Tercer elemento</LI> </OL>
<!--Imágenes--> <IMG SRC='date.jpg'
ALT='An Introduction to Database Systems'>
<!-- Enlaces --> Comprelo en
<A HREF='http://www.amazon.com'>Amazon</A> <br>
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 7
Objetivo
HTML
PHP
Acceso a BD
Tablas
<TABLE border = 2> <TR> <TD border = 2>Primera columna de la primera fila
</TD> <TD border = 2>
Segunda columna de la primera fila
</TD> <TD border = 2>
Tercera columna de la primera fila
</TD> </TR>
<TR>
<TD colspan = 2 border = 2>
Una columna que se expande por dos
</TD> <TD border = 2>
Segunda columna de la segunda fila
</TD> </TR> </TABLE> Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 8
Objetivo
HTML
PHP
Acceso a BD
Formularios
<FORM ACTION='pagina.php' METHOD='POST'>
Texto:
<INPUT TYPE = text NAME = 'nombre1' size = 15 Value='Valor1'><br> <b>Opciones</b><br>
Opción 1:
<INPUT TYPE = radio NAME = 'nombre2' value='opcion1' CHECKED><br>
Opción 2:
<INPUT TYPE = radio NAME = 'nombre2' value='opcion2'><br>
Marcador:
<INPUT TYPE = checkbox NAME = 'nombre3' Value = 'SI' CHECKED><br>
Selector:
<SELECT NAME = 'nombre4'>
<OPTION value = 'opcion1'> opcion 1</OPTION> <OPTION SELECTED value = 'opcion2'>opcion 2</OPTION> <OPTION value = 'opcion3'> opcion 3</OPTION> </SELECT><br>
<INPUT TYPE = hidden NAME = 'nombre5' Value='Valor2'> <INPUT TYPE = submit Value='Enviar'>
</FORM>
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 9
Hojas de estilos CSS (
http://www.htmlhelp.com/reference/css/
)
<HTML><HEAD>
<TITLE>Mi primera página</TITLE> <LINK rel="stylesheet"
type="text/css" href="estilos.css"> </HEAD>
<BODY>
<TABLE class='relacion' cellspacing = 0> <TR>
<TD class='tittab'>ATTR1</TD> <TD class='tittab'>ATTR2</TD> <TD class='tittab'>ATTR3</TD> <TD class='tittab'>ATTR4</TD> </TR> <TR> <TD class='tuplac'>V11</TD> <TD class='tuplai'> Este es el valor12 </TD> <TD class='tuplac'>Valor13</TD> <TD class='tuplai'> Este es el valor14 </TD> </TR> <TR> <TD class='tuplac'>V21 </TD> <TD class='tuplai'>Valor 22</TD> <TD class='tuplac'>Valor23</TD> <TD class='tuplai'>Valor24</TD> </TR> </TABLE> </BODY> </HTML> .relacion {border:
thin solid black;}
.tittab
{background-color:blue;
border:thin solid black;
padding:3pt;
color: white;
font-family:
Times New Roman;
font-size: 16pt;
font-weight:bold;
text-align: center}
.tuplac
{background-color:white;
border:thin solid black;
padding:3;
color: black;
font-family:
Times New Roman;
font-size:12pt;
text-align: center}
.tuplai
{background-color: white;
border: thin solid black;
padding: 3pt;
color: black; font-family:
Times New Roman;
font-size: 12pt;
text-align: left}
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 10
Objetivo
HTML
PHP
Acceso a BD
Páginas Web Dinámicas (DHTML)
Lenguajes Script de cliente: JavaScript, VBScript
Se ejecutan en el navegador:
•
Responder a eventos de usuario
•
Modificar el HTML dinámicamente en el cliente
SERVIDOR
WEB
Página1
HTML
+
Script
Página2
HTML
+
Script
Página3
HTML
+
Script
NAVEGADOR
Petición HTTP:
http://maquina2/Pagina1.html
Página1
DHTML
MAQUINA1
MAQUINA2
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 11Objetivo
HTML
PHP
Acceso a BD
Generación dinámica de páginas
Lenguajes Script de servidor: php, jsp, asp
Se ejecutan en el servidor: Generan HTML y DHTML
SERVIDOR
WEB
Página1
DHTML
+
PHP
Página2
DHTML
+
PHP
Página3
DHTML
+
PHP
MAQUINA 2
NAVEGADOR
MAQUINA 1
Petición HTTP
Página1
DHTML
MAQUINA 3
SERVIDOR
APLICACIONES
DHTML
+
PHP
DHTML
Las peticiones pueden incluir parámetros
Peticiones GET: Parámetros en la propia dirección
•
Http://maquina2/pagina1.php?nombre1=valor1&nombre2=valor2
Peticiones POST: Parámetros ocultos en la cabecera de la petición
•
Peticiones hechas desde botones de formularios
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 12
Objetivo
HTML
PHP
Acceso a BD
PHP: HyperText Preprocessor (PHP)
WEB:
http://www.php.net/
Referencia:
http://www.php.net/download-docs.php
Sintaxis básica
Similar al lenguaje C
Código PHP insertado entre
<? … ?>
Líneas
de código finalizadas con punto y coma “;”
Comentarios:
// toda la línea, /*texto comentado*/
Variables
precedidas de símbolo $. Mayúsculas importan.
Constantes
: define(“NombreConstante”, valor)
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 13
Sintaxis básica: Ejemplo
<HTML> <HEAD>
<TITLE>
<?echo"Mi primera página";?> </TITLE>
</HEAD> <BODY>
<?
//Esto es un comentario /*esto tambien es un comentario*/
$a= "Hola";
$b= " Mundo!";
echo"<p align = 'center'>".$a.$b."</p>"; define("CONSTANTE", 25);
$c= 'd'; $d= CONSTANTE + $c;
echo"Este es el valor: $d<br>"; echo'Este es el valor: '.$d."<br>"; ?>
</BODY> </HTML>
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 14
Arrays
Numéricos, Asociativos, Recorrido:
Key, Value
Parámetros:
GET, POST
<?//Numéricos
$Productos= array("ruedas", "aceite"); echo$Productos[0]."<br>"; echo$Productos[1]."<br>"; $Numeros= range(4, 25); echo$Numeros[6]; //Asociativos
$Precios = array("ruedas"=>300, "aceite"=>600); echo$Precios["ruedas"]."<br>"; //HTTP_GET_VARS, HTTP_POST_VARS echo$HTTP_GET_VARS["n1"]."<br>"; //bucles while
reset($HTTP_GET_VARS);
while($Parametro= each($HTTP_GET_VARS)) {
echo$Parametro["key"]."-".$Parametro["value"]."<br>"; }?> Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 15
Objetivo
HTML
PHP
Acceso a BD
if(condicion) sentencia; elsesentencia; if(condicion) {bloque;} else{bloque;} switch(expresion) { caseexpresion: {bloque; break;} caseexpresion: {bloque; break;} default: {bloque;} } while(condicion) {bloque;} do bloque; while(condicion);for($i=0; $i<3; $i++) {bloque;}
Estructuras de control
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 16
Definición de funciones y reutilización de código
functioncalculo($a, &$b, $c=4) { global$e; $b+= $e $f= intval(($a+ $b)/$c); return($f); } $a= 3; $b= 2; $e= 5; $a= calculo($a, $b); echo$a."-".$b
Resultado: 2-7
require("a1.php"); If($a==3) require("a2.php"); else include("a3.php"); Funciones
Reutilización de código
•
Inclusión de archivos
•
require
(
"archivo.php"
);
9
En compilación
•
include
(
"archivo.php"
);
9
En ejecución
•
a1 y a2 se incluyen siempre
•
a3 se incluye sólo cuando $a es
igual a 3.
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 17
Operadores y funciones
Operadores
Funciones
Aritméticos +, -, *, /, % Asignación $b = 3 + ($a=4); Concatenación "Hola "."mundo!" Combinaciones +=, -=, *=, /=, %=, .=Pre y Post Incrementos
$a++, ++$a, --$a,
$a--Comparaciones ==, ===, <>, !=, <, >, <=, >= Lógicos !, &&, ||, and, or De bits &, |, -, ^, >>, << Operador ? (condicion?expresion1:expresion2) De variables
gettype($a); settype($a, 'double'); is_array($a); is_double($a), etc. isset($a); unset($a); empty($a); is_null($a) strval($a); intval($a); doubleval($a);
Manipulación de arrays
$elem = each($a);
list($clave, $valor) = each($a); current; reset; end; next; pos; prev; sort($a);
Strings
trim($s); ltrim; chop; nl2br($s);
print(); printf(); sprintf(); addslashes($s); stripslashes($s); htmlspecialchars($s);
$a = explode("separador", $s); $s = implode("separador", $a); strtok(); substr(); strcmp(); strlen; etc.
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 18Objetivo
HTML
PHP
Acceso a BD
APLICACION
SGBD
DATOS
Librerías de acceso
procedimiento miProcedimiento (
. . .
)
{
. . .
conexion = bd_conecta
(UnServidor, UnaBD, UnUsuario, unPass);
resultado = bd_consulta
(conexion, “SELECT * FROM UnaTabla”);
Para cada tupla en resultado
{
valor = tupla[atributo];
print(valor);
}
bd_desconecta(conexion);
. . .
}
Cliente
Servidor
SQL Dinámico en lenguajes convencionales (No Web)
Las sentencias SQL
se construyen
dinámicamente en
tiempo de ejecución
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 19
APLICACION
Librería
MySQL
Librería
PostgreSQL
Librería
Oracle
Librería
Informix
Librería
SQL Server
Librería
ODBC
MySQL
PostgreSQL
Oracle
ODBC
Informix
SQL Server
OTROS
Librerías de acceso para cada gestor
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 20
El caso del lenguaje JAVA
APLICACION
Driver
MySQL
PostgreSQL
Driver
Oracle
Driver
Informix
Driver
SQL Server
Driver
Driver
ODBC
MySQL
PostgreSQL
Oracle
ODBC
Informix
SQL Server
OTROS
JDBC
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 21
Entorno Microsoft (Visual Basic, Visual C++)
APLICACION
Driver
Access
SQL Server
Driver
Oracle
Driver
Informix
Driver
PostgreSQL
Driver
Driver
ODBC
Access
Oracle
PostgreSQL
ODBC
Informix
SQL Server
OTROS
OLEDB
ADO
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 22
Aplicaciones Web. Caso de PHP
SERVIDOR
WEB
Página1
DHTML
+
PHP
Página2
DHTML
+
PHP
Página3
DHTML
+
PHP
MAQUINA 2
NAVEGADOR
MAQUINA 1
Petición HTTP
Página1
DHTML
MAQUINA 3
SERVIDOR
APLICACIONES
DHTML
SGBD DATOS Librería de accesoMAQUINA 4
DHTML
+
PHP
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 23
Configuración para las prácticas (2 máquinas)
APACHE
Página1
HTML
+
PHP
Página2
HTML
+
PHP
Página3
HTML
+
PHP
ETSEBD
NAVEGADOR
PC GSTIC
Petición HTTP
Página1
HTML
SERVIDOR
PHP
HTML
MySQL DATOS LibreríaMySQL PostgreSQLLibrería
PostgreSQL DATOS
DHTML
+
PHP
Objetivo
HTML
PHP
Acceso a BD
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 24
Funciones de acceso para MySQL
Conexión
•
$conexion
=
mysqli_connect
(maquina, usuario, contraseña);
•mysqli_select_db
(
$conexion,
baseDatos);
Consulta
•
$resultado
=
mysqli_query
(
$conexion,
"consultaSQL");
Procesamiento del resultado
•
$nfilas
=
mysqli_num_rows
(
$resultado
);
•mysqli_data_seek
(
$resultado,
posicion);
•for
(
$i
=0; $i<
$nfilas
;
$i
++)
{
$fila
=
mysqli_fetch_array
(
$resultado
);
//devuelve un array asociativo
echo htmlspecialchars
(
stripslashes
(
$fila
["atributo"]));
}
•
$fila
=
mysqli_fetch_row
(
$resultado
);
//devuelve un array enumerado
•
$valor
=
mysqli_result
(
$resultado, $i,
"atributo");
//devuelve un valor
Curso 2006/2007 J.R.R.V. - BD – Seminario 1: PHP 25
Funciones de acceso para PostgreSQL
Conexion
•
Cadena de conexión:
"host=maquina port=puerto dbname=baseDatos user=usuario password=
contraseña"
•
$conexion
=
pg_connect
("cadenaConexion");
Consulta
•
$resultado
=
pg_query
([
$conexion
], "consultaSQL");
Procesamiento del resultado
•
$nfilas
=
pg_num_rows
(
$resultado
);
•pg_result_seek
(
$resultado,
posicion);
•for
(
$i
=0; $i<
$nfilas
;
$i
++)
{
$fila
=
pg_fetch_array
(
$resultado, [$i]
);
//devuelve un array asociativo
echo htmlspecialchars
(
stripslashes
(
$fila
["atributo"]));
}
•