curso_php

Post on 29-Jun-2015

44 views 1 download

Tags:

transcript

IT Colima Ene-Jun 2009 1

PHP

IT Colima Ene-Jun 2009 2

1. INTRODUCCIÓN:Diferencias entre ASP y PHP

� Software propietario � Free Software

� Plataformas Microsoft

� Varios lenguajes (VBScript, JavaScript)

� Multiplataforma

� Un solo lenguaje: PHP

IT Colima Ene-Jun 2009 3

Que se necesita para que funcione PHP

� Servidor de páginas http

� Versión compilada de PHP

� Editor de Texto

� Si se requiere de manejar bases de datos MYSQL es el mejor DBMS para PHP

IT Colima Ene-Jun 2009 4

Características de PHP� Más rápido que ASP

� Lenguaje más fácil y potente

� Integración perfecta con 8 servidores HTTP

� Acceso a 20 tipos de Bases de Datos

� Diseño modular de fácil ampliación

� Licencia abierta

IT Colima Ene-Jun 2009 5

Historia y DesarrolladoresFechas

•Inicio del desarrollo en otoño de 1994 •PHP Versión 1 en primavera 1995 •PHP Versión 2 1995-1997 •PHP Versión 3 1997-2000 •PHP Versión 4 en el segundo trimestre de 2000

Equipo de Desarrollo (195 personas con acceso al CVS)•Zeev Suraski y Andi Gutmans (Israel)•Shane Caraveo (Florida)•Stig Bakken (Norway)•Andrei Zmievski (Lincoln, Nebraska)•Sascha Schumann (Dortmund, Germany)•Thies C. Arntzen (Hamburg, Germany)•Jim Winstead (Los Angeles)•Sam Ruby (Raleigh, NC) •Rasmus Lerdorf (San Francisco)

IT Colima Ene-Jun 2009 6

PHP 5� El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend

Engine II (o Zend Engine 2). La versión más reciente de PHP es la 5.2.4 (30 de agosto de 2007), que incluye todas las ventajas que provee el nuevo Zend Engine 2 como:

� Soporte sólido y REAL para Programación Orientada a Objetos ( o OOP) con PHP Data Objects.

� Mejoras de rendimiento. � Mejor soporte para MySQL con extensión completamente reescrita. � Mejor soporte a XML ( XPath, DOM... ). � Soporte nativo para SQLite. � Soporte integrado para SOAP. � Iteradores de datos. � Excepciones de errores.

IT Colima Ene-Jun 2009 7

PHP 6� Está previsto el lanzamiento en breve de la rama 6 de PHP,

cuando se lance esta nueva versión, quedarán solo dos ramas activas en desarrollo (PHP 5 y 6) pues se ha comunicado que PHP 4 ha sido discontinuado desde el 13 de Julio de 2007.

� Las diferencias que encontraremos frente a PHP 5.* son:� Soportará Unicode� Limpieza de funcionalidades obsoletas como register_globals,

safe_mode... � PECL � Mejoras en orientación a objetos

IT Colima Ene-Jun 2009 8

Estadísticas de uso

Fuente: NetcraftAgosto 2000

3,314,634 Dominios, 637,746 Direcciones IP19,823,296 Dominios analizadosPHP instalado en el 16.7% de todos los dominios

Fuente: SecuritySpace.comSeptiembre 2000Informe sobre Módulos Apache

1,322,329 Servidores Apache analizados429,589 (32.49%) PHP247,642 (18.73%) Frontpage133,414 (10.09%) mod_perl111,576 (8.44%) mod_ssl78,030 (5.90%) OpenSSL46,404 (3.51%) ApacheJServ

IT Colima Ene-Jun 2009 9

Plataformas soportadas

Plataformas (actualidad):•UNIX (todas las variantes) •Win32 (NT/W95/W98/W2000) •QNX •Mac (WebTen) •OS/2 •BeOS

Plataformas (en perparación):•OS/390 •AS/400

Servidores:•Apache (UNIX,Win32) •CGI •fhttpd•ISAPI (IIS, Zeus) •NSAPI (Netscape iPlanet) •Java servlet•AOLServer•Roxen

Servidores (en preparación):•Apache 2.0•WSAPI (O'Reilly WebSite) •phttpd•thttpd

IT Colima Ene-Jun 2009 10

Bases de datos soportadasSQL

•Adabas D •Empress •IBM DB2 •Informix •Ingres •Interbase•Frontbase•mSQL•Direct MS-SQL •MySQL•ODBC •Oracle (OCI7,OCI8) •PostgreSQL•Raima Velocis•Solid •Sybase

Otros•dBase •filePro (sólo lectura) •dbm (ndbm, gdbm, Berkeley db)

IT Colima Ene-Jun 2009 11

2. El lenguaje PHP

IT Colima Ene-Jun 2009 12

2.1. Extensión de los ficheros

� .php3 Indica código PHP 3.x.

� .php4 Indica código PHP 4.x.

� .php Indica código PHP. Preferiremos esta extensión por ser más genérica.

� .phtml Actualmente en desuso.

IT Colima Ene-Jun 2009 13

2.2. Delimitadores

<? echo 'Primer método de delimitar código PHP'; ?>

<?php echo 'Segundo método, el más usado'; ?>

<script language="php">echo 'Algunos editores (como el FrontPage) Sólo entienden este método'; </script>

<% echo 'Método de compatibilidad con ASP'; %>

IT Colima Ene-Jun 2009 14

<html><body><?php$H=Date(H);if ( $H>20 || $H<4) {

echo “Buenas noches.”;} else{

echo “Buenos días.”;}?></body></html>

2.2. Delimitadores. Ejemplo.

IT Colima Ene-Jun 2009 15

<%@ Language=VBScript %><html><body><%IF Hour(time)>20 OR Hour(time)<4 THEN%>Buenas noches.<%ELSE%>Buenos días.<%END IF%></body></html>

2.2. Delimitadores. Ejemplo. ASP

IT Colima Ene-Jun 2009 16

<html><body><?php if ( Hour(time)>20 || Hour(time)<4) { ?>Buenas noches.<?php } else { ?>Buenos días.<?php }?></body></html>

2.2. Delimitadores. Ejemplo. PHP

IT Colima Ene-Jun 2009 17

2.3. Fin de línea

print( date("M d, Y H:i:s", time()) );

print ( date( "M d, Y H:i:s",

time() )

);

IT Colima Ene-Jun 2009 18

2.4. Comentarios

/* Comentarios estilo C.* Pueden extenderse durante varias líneas.*/

// Comentarios estilo C++. Hasta fin de línea.

# Comentarios estilo Perl. Hasta fin de línea.

IT Colima Ene-Jun 2009 19

2.5.1. Variables. Declaración y Uso.

• NO hace falta declararlas• Llevan delante el signo del dólar ‘$’.

$var_1 = 123;$var_2 = ’hola’;$var_3 = $var_1 * 2;

IT Colima Ene-Jun 2009 20

$mi_variable = ’Inicializamos como texto’;$mi_variable = 3; // Entero.$mi_variable = 3.14 * $mi_variable; // Float.$mi_variable = new MiClase(); // Objeto.

Variables débilmente tipadas (tipo mixed).

2.5.2. Variables. Tipado.

IT Colima Ene-Jun 2009 21

2.5.2. Variables. Tipado. Conversión automática.

PHP realiza conversiones automáticas de tipo:

$mivar = 123;echo $mivar; // Se convierte a string

$mivar = ’3’; // Se convierte a entero$mivar = 2 + $mivar; // para realizar la suma

IT Colima Ene-Jun 2009 22

2.5.2. Variables. Tipado. Conversión explícita.

Operador cast:

$mivar = (string)123;

Cabiar el tipo de una variable:

$mivar = 12;settype($mivar, "double");

IT Colima Ene-Jun 2009 23

2.5.3. Variables. Ámbito.

� En el cuerpo de un fichero, las variables son GLOBALES al fichero y ficheros incluidos.

� En una función, son LOCALES a esa función.

� Dentro de una clase, sólo pueden ser accedidas a través del operador “->”sobre el nombre del objeto.

IT Colima Ene-Jun 2009 24

2.5.4. Referencias.

Se definen con el carácter ‘&’:

$alias = &$variable

Se puede eliminar una referencia con la función unset():

$a = 1;$b = &$a;unset ($a); // Pero $b sigue valiendo 1

IT Colima Ene-Jun 2009 25

2.6. Tipos de datos.

•Enteros, en decimal, octal o hexadecimal.$MiVar = 123;

•Punto flotante.$MiVar = 1.3e4;

•Arrays.$MiVar[2] = 123;

•Strings.$MiVar = “Cadena de texto\n”;

•Objetos:$MiVar = new MiClase();

IT Colima Ene-Jun 2009 26

2.6.3. Tipos de datos. Arrays.

$MiArray[0] = 1;

$MiArray[1] = “hola!!”;

$MiArray[] = 3;

echo $MiArray[2]; // 3

IT Colima Ene-Jun 2009 27

2.6.3. Tipos de datos. Arrays (2).

Funcionan como vectores o tablas hash al mismo tiempo:

$MiArray[“nombre”] = “Homer”;echo $MiArray[0]; // 1echo $MiArray[“nombre”]; // “Homer”

Y pueden tener más de una dimensión:

$MiOtroArray[1][“pepe”][4] = “3 dimensiones!”;

referencia

IT Colima Ene-Jun 2009 28

2.6.3. Tipos de datos. Arrays (3).

También se pueden definir con el constructor array() :

$OtroArrayMas = array( 1, “hola”, 5);

$YOtroArray = array(0 => 1,1 => “hola”,2 => 5,3 => 8,“nombre” => “Homer”

);

IT Colima Ene-Jun 2009 29

2.6.4. Tipos de datos. Strings.Comillas dobles.

• Si se delimitan entre comillas dobles (”), se expandirá cualquier variable que haya dentro de la cadena. Además, se pueden incluir ciertas secuencias de escape, al igual que en C:

Secuencia Significado

\n Nueva línea

\r Retorno de carro

\t Tabulación horizontal

\\ Barra invertida

\$ Símbolo del dólar

\" Dobles comillas

\[0-7]{1,3} Carácter en octal

\x[0-9A-Fa-f]{1,2} Carácter en hexadecimal

IT Colima Ene-Jun 2009 30

2.6.4. Tipos de datos. Strings (2).Comillas simples.

� Si se delimitan entre comillas simples (’), las variables no se expanden y además las únicas secuencias de escape que se reconocen son “\\” y “\'” (barra invertida y comillas simples.)

IT Colima Ene-Jun 2009 31

2.6.4. Tipos de datos. Strings (3).“Here Doc”

$cadena = <<<FINCADEsto es un ejemplo de cadena como “here doc”.La variable \$a vale $a.Ahora vamos a finalizar la cadena:FINCAD

� Utilizando la sintaxis “here doc” de Perl. Las variables se expanden y no hace falta escapar las comillas:

IT Colima Ene-Jun 2009 32

2.6.4. Tipos de datos. Strings (4).

Para concatenar cadenas se utiliza el operador ‘.’ :

$cad = ‘A esta cadena ‘;$cad = $cad . ‘le vamos a añadir más texto.’;

Se puede acceder a cada carácter como si fuera un array:

$cad2 = “Tercer carácter de \$cad : ‘$cad[2]’”;

IT Colima Ene-Jun 2009 33

2.7. Constantes.

define(“SALUDO”, “Hola, mundo!”);echo “La constante SALUDO vale ” . SALUDO;

Las constantes se definen con la función define():

Las constantes en PHP se diferencian de las variables en que:

•no llevan el símbolo del dólar delante.•puede accederse a ellas desde cualquier parte del código donde han sido definidas, sin restricciones de ámbito como en las variables.•no pueden ser redefinidas o borradas una vezdefinidas.•sólo pueden contener valores escalares, no vectores.

IT Colima Ene-Jun 2009 34

2.8. Mayúsculas y minúsculas.

Comportamiento mixto en variables y funciones:

•En las variables, las mayúsculas y minúsculasIMPORTAN. •En los nombres de funciones y palabras reservadas, las mayúsculas NO IMPORTAN.

IT Colima Ene-Jun 2009 35

2.9.1. Operadores aritméticos.

Operación Nombre Resultado

$a + $b Suma Suma de $a y $b.

$a - $b Resta Diferencia entre $a y $b.

$a * $b Multiplicación Producto de $a y $b.

$a / $b División Cociente de $a y $b.

$a % $b Módulo Resto de la operación $a/$b.

IT Colima Ene-Jun 2009 36

2.9.2. Auto-incremento y auto-decremento.

OperaciónNombre Resultado

++$a Pre-incremento Incrementa $a en 1, y devuelve $a (incrementado).

$a++ Post-incremento Devuelve $a, y después lo incrementa en 1.

--$a Pre-decremento Decrementa $a en 1, y después lo devuelve.

$a-- Post-decremento Devuelve $a, y después lo incrementa en 1.

IT Colima Ene-Jun 2009 37

2.9.3. Operadores de bits.

Operación Nombre Resultado

$a & $b Y Se ponen a 1 los bits que están a 1 en $a y $b.

$a | $b O Se ponen a 1 los bits que están a 1 en $a o $b.

$a ^ $b O Exclusivo Se ponen a 1 los bits que están a 1 en $a o $b, pero no en ambos.

~ $a No Se invierten los bits (se cambian 1 por 0 y viceversa.)

$a << $b Desp. Izq. Desplaza $b posiciones a la izquierda todos los bits de $a.

$a >> $b Desp. Drch. Desplaza $b posiciones a la derecha todos los bits de $a.

IT Colima Ene-Jun 2009 38

2.9.4. Operadores lógicos.

Operación Nombre Resultado

$a and $b Y Cierto si $a y $b son ciertos.

$a or $b O Cierto si $a o $b es cierto.

$a xor $b O Exclusivo. Cierto si $a o $b es cierto, pero no ambos.

! $a No Cierto si $a es falso.

$a && $b Y Cierto si $a y $b son ciertos.

$a || $b O Cierto si $a o $b es cierto.

IT Colima Ene-Jun 2009 39

2.9.5. Operadores. Asignación, igualdad e identidad.

OperaciónNombre Resultado

$a = $b Asignación Asigna el valor de una variable o expresión del segundo término a la variable del primer término.

$a == $b Igualdad Compara si el valor de los dos operandos es el mismo.

$a === $b Identidad Compara si el valor es el mismo y, además, el tipo coincide.

IT Colima Ene-Jun 2009 40

2.9.5. Operadores. Asignación, igualdad e identidad.Ejemplo.

$var1 = 1; // Asignación$var2 = 1;$var3 = “1”;($var1 == $var2) // Cierto, son iguales($var1 == $var3) // Son iguales (tras conversión)($var1 === $var2) // Cierto, son idénticas($var1 === $var3) // FALSO, el tipo no coincide

IT Colima Ene-Jun 2009 41

2.9.5. Operadores. Asignación,igualdad e identidad. Error.

$var1 = 1;$var2 = 2;if( $var1 = $var2 ) {

echo ‘iguales’;} else {

echo ‘distintas’;}

IT Colima Ene-Jun 2009 42

2.9.6. Comparaciones.

Operación Nombre Resultado

$a != $b No igual Cierto si el valor de $a no es igual al de $b.

$a !== $b No idéntico Cierto si $a no es igual a $b, o si no tienen el mismo tipo.

$a < $b Menor que Cierto si $a es estrictamente menor que $b.

$a > $b Mayor que Cierto si $a es estrictamente mayor que $b.

$a <= $b Menor o igual que Cierto si $a es menor o igual que $b.

$a >= $b Mayor o igual que Cierto si $a es mayor o igual que $b.

IT Colima Ene-Jun 2009 43

2.9.7. Operadores de cadenas.

$a = 1;$b = 2;

Echo ‘El resultado de ‘ . $a . ‘ + ‘ . $b . ‘ es ‘ , $a + $b;

Echo “El resultado de $a + $b es “ , $a + $b;

IT Colima Ene-Jun 2009 44

2.9.8. Atajos en la asignación.

+= -= *= /= %= &= ^= .= >>= y <<=

$var1 += 3; // $var1 = $var1 + 3;$var2 /= 2; // $var2 = $var2 / 2;$var3 >>= 1; // $var3 = $var3 >> 1;

IT Colima Ene-Jun 2009 45

2.9.9. Precedencia.

,

or

xor

and

print

= += -= *= /= .= %= &= |= ^= ~= <<= >>=

? :

||

&&

|

^

&

== != === !==

< <= > >=

<< >>

+ - .

* / %

! ~ ++ -- (int) (double) (string) (array) (object) @

[

new

IT Colima Ene-Jun 2009 46

2.10.1. Estructuras de control.if … elseif … else

if (expresión) {

comandos}

if (expresión) {

comandos_cierto} else {

comandos_falso}

IT Colima Ene-Jun 2009 47

2.10.1. Estructuras de control.if … elseif … else(2)

if (expresion1) {

comandos1} elseif (expresion2) {

comandos2} elseif (expresion3) {

comandos3}...else {

comandosElse}

IT Colima Ene-Jun 2009 48

2.10.2. whiley do … while

while (expresión) {

comandos}

do {

comandos} while (expresión);

IT Colima Ene-Jun 2009 49

2.10.4. for

for (expresión1; expresión2; expresión3) {

comandos}

$factorial5 = 1;for ($i = 2; $i <= 5; $i++ ) {

$factorial5 *= $i;}

IT Colima Ene-Jun 2009 50

2.10.4. for (2)

for ($factorial5 = 1, $i = 2; $i <= 5; $i++ ) {

$factorial5 = $factorial5 * $i;}

for ($factorial5=1, $i=2; $i<=5; $factorial5*=$i, $i++);

IT Colima Ene-Jun 2009 51

2.10.4. for (3). ASP.

’ ASP<%FOR i=1 TO 100%><%=MiVar%><%NEXT%>

// PHP<?phpfor ($i = 1; $i <= 100; $i++) {

echo $MiVar;}?>

IT Colima Ene-Jun 2009 52

2.10.5. foreach

foreach ( array as variable) {

comandos}

$a = array (1, 2, 3, 17);foreach ($a as $v){

print "Valor actual de \$a: $v.\n";}

// Valor actual de $a: 1// Valor actual de $a: 2// Valor actual de $a: 3// Valor actual de $a: 17

IT Colima Ene-Jun 2009 53

2.10.5. foreach(2)

foreach ( array as indice => variable){

comandos}

IT Colima Ene-Jun 2009 54

2.10.6. switch

switch (variable) {

case valor1:comandos1

case valor2:comandos2

...case valorN:

comandosNdefault:

comandosDefault}

IT Colima Ene-Jun 2009 55

2.10.6. switch(2)

switch ($i) {

case 1:echo “Código del 1”;

case 2:echo “Código del 2”;

case 3:echo “Código del 3”;break;

case 4:echo “Código del 4”;

}

IT Colima Ene-Jun 2009 56

2.11. Cierto o falso.Valores numéricos.

$x = 1; // $x if( $x ) // se evalúa a cierto

$x = 0; // $x definida como el entero 0if( $x ) // se evalúa a falso

IT Colima Ene-Jun 2009 57

2.11. Cierto o falso.Strings.

$x = "hello"; // asignamos una cadena a $xif( $x ) // se evalúa a cierto

$x = ""; // cadena vacíaif( $x ) // evalúa a falso

// Excepción:$x = "0"; // cero en una cadenaif( $x ) // evalúa a falso

// (se convierte a entero)

IT Colima Ene-Jun 2009 58

2.11. Cierto o falso.Arrays.

$x = array(); // $x es un array vacíoif( $x ) // se evalúa como falso

$x = array( "a", "b", "c" ); if( $x ) // se evalúa a cierto

IT Colima Ene-Jun 2009 59

2.11. Cierto o falso.Objetos.

Class Yod {} // clase vacía$x = new Yod(); if( $x ) // se evalúa a falso

Class Yod { // clase no vacíavar $x = 1;

} $x = new Yod(); if( $x ) // se evalúa a cierto

IT Colima Ene-Jun 2009 60

2.11. Cierto o falso.Constantes.

•TRUE es el valor entero decimal 1.

•FALSE es la cadena vacía.

IT Colima Ene-Jun 2009 61

2.12. Funciones.

function nombre ($arg_1, $arg_2, ..., $arg_n) {

comandosreturn $salida;

}

IT Colima Ene-Jun 2009 62

2.12. Funciones. (2)Ejemplo.

function factorial ($valor) {if ($valor < 0) {

return –1; // Error}

if ($valor == 0 ) {return 1;

}

if ($valor == 1 || $valor == 2) {return $valor;

}

$ret = 1;for ($i = 2; $i <= $valor; $i++) {

$ret = $ret * $i;}return $ret;

}$factorial5 = factorial(5);Echo $factorial5;

IT Colima Ene-Jun 2009 63

2.12. Funciones. (3)Valores por defecto.

function enlace($url) {

echo “<a href= $url>Pulsa aquí</a>”;}

Echo enlace(“http:// www.itcolima.mx ”);Echo “<br>”;Echo enlace(“http://localhost”);

IT Colima Ene-Jun 2009 64

2.12.1. Funciones.Argumentos por referencia.

function MiFuncion(&$var) {

$var++;}

$a = 5;MiFuncion($a);// Aquí $a == 6

IT Colima Ene-Jun 2009 65

2.12.2. Funciones.Devolución por referencia.

function &buscar_cliente($nombre) {

// ... buscamos ...return $registro;

}

$cliente = &buscar_cliente(“Juan”);echo $cliente->dni;

IT Colima Ene-Jun 2009 66

2.13. includey require

require(“cabecera.inc”);

If ($incluir == TRUE) {

$ficheros = array(“uno”, ”dos”, ”tres”);foreach ($ficheros as $fichero) {

include($fichero);}

}

IT Colima Ene-Jun 2009 67

3. Programando en PHP

IT Colima Ene-Jun 2009 68

3.1.1. Forms.

<form action=“datos.php" method="POST">Su nombre: <input type=text name=nombre><br>Su edad: <input type=text name=edad><br><input type=submit></form>

<?phpecho “Tu nombre es:”.$_POST[‘nombre’].”<br>”;echo “Tu edad es:”.$_POST[‘ edad’].”<br>”;echo “Tu edad es:”.$edad.”<br>”; // con register_globals=on?>

formulario.html

datos.php

IT Colima Ene-Jun 2009 69

3.1.2. Forms. (todo en la misma pagina)

<?phpif ( isset($_POST["Enviar"]) ) { // validando si existe el boton Enviar

echo "el nombre es".$_POST["nombre"]."<br>";echo "la edad es".$_POST["edad"]."<br>";

}else { ?><p>Captura de datos personales:</p><form id="form1" name="form1" method="post" action="" ><p>Nombre: <input type="text" name="nombre" id="nombre" /> <br />Edad: <input type="text" name="edad" id="edad" /> </p>

<p> <input type="submit" name="Enviar" id="Enviar" value="Enviar" /><input type="reset" name="Limpiar" id="Limpiar" value="Limpiar" /> </p>

</form><? } ?></body></html>

IT Colima Ene-Jun 2009 70

3.1.2. Forms. (todo en la misma pagina)

Ejercicios con formularios

IT Colima Ene-Jun 2009 71

3.2. Cookies.

setcookie(“PruebaCookie”, “expiraré dentro de una hora”,time() + 3600);

setcookie(“PruebaCookie”, “”, time());

int setcookie (string nombre [, string valor[, int fin [, string camino[, string dominio[, int seguro]]]]])

IT Colima Ene-Jun 2009 72

3.3. Sesiones.

bool session_start(void);bool session_register (mixed name [, mixed ...])bool session_destroy(void);

// Ejemplo, un contadorsession_start(); print($contador); $contador++;session_register("contador");

<A HREF="siguiente.php?<?=SID?>">Continuar</A>

IT Colima Ene-Jun 2009 73

3.4. Tratamiento de errores.

$nombre = '/etc/shadow';

$fichero = @fopen ($nombre, 'r');

if( !$fichero ) {

die("No se pudo abrir el fichero ($nombre)");}

IT Colima Ene-Jun 2009 74

3.5.1. Cadenas. Comparación.

El operador (==) nos puede servir para evaluar si dos cadenasde caracteres son iguales dentro de una estructura de control. Además, tenemos la función strcmp( ) , que compara bit a bit dos cadenas de caracteres. Atendiendo al valor de salida de la función, podemos obtener los siguientes resultados:

• Si el valor que se obtiene es 0, las dos cadenas son exactamente igual.• Si obtenemos un valor negativo, el primer string es máspequeño que el segundo.• Si obtenemos un valor positivo, el primer string es másgrande que el segundo.

IT Colima Ene-Jun 2009 75

3.5.1. Cadenas. Comparación.

int strcmp (string str1, string str2)int strcasecmp (string str1, string str2)(esta no es sensible a mayúsculas)

// Ejemplo:if (strcmp($a, $b) == 0) {

echo ‘iguales’;}

IT Colima Ene-Jun 2009 76

3.5.2. Cadenas. Subcadenas.

La funciónsubstr() permite seleccionar un conjunto de caracteres de una cadena, quedando intactoel string original.

string substr (string cadena, int inicio[, int tamaño])

$str = substr('abcdef', 2, 3); // cde$str = substr('abcdef', -2); // ef$str = substr('abcdef', -2, 1); // e$str = substr('abcdef', 1, -2); // bcd

IT Colima Ene-Jun 2009 77

3.5.2. Cadenas. Subcadenas. (2)La funciónstrpos() encuentra en un string la posición de un carácter determinado.int strpos (string cadena, string referencia

[, int inicio])int strrpos (string cadena, char referencia)

$i = strpos('cadena de prueba', 'de');// $i = 2$i = strpos('cadena de prueba', 'de', 5);// $i = 7$s = strrpos('cadena de prueba', 'de');// $s = 7$s = strstr('cadena de prueba', 'de');// $s = dena de prueba

IT Colima Ene-Jun 2009 78

3.5.2. Cadenas. Subcadenas. (2)<?php

$cadena = "Esta cadena tiene muchas letras";echo "La primera ocurrencia de 'tiene' es " .strpos($cadena,"tiene") . "<br>";

?>

<?php$cadena = "Esta cadena tiene muchas letras";echo "La primera ocurrencia de 'a' es " . strpos($cadena, "a" ) ."<br>";echo "La primera ocurrencia desde atrás de 'a' es " .strrpos($cadena, "a") . "<br>";

?>

IT Colima Ene-Jun 2009 79

3.5.2. Cadenas. Subcadenas. (2)string strstr (string cadena, string referencia)

•La función strstr() recibe como parámetros una cadena de caracteresdonde buscar y otra con un conjunto de caracteres que queremos encontrar.

•Si se encuentra el patrón de búsqueda, el resultado será una cadena de caracteres que comenzará justo en el patrón, hasta el final del string primero.

•Si no se encuentra el patrón el resultado será false.

< ?php$cadena = "Esta cadena tiene muchas letras";echo "La primera ocurrencia de 'cadena' es: " .strstr ($cadena,"cadena") . "<br>";

?>

IT Colima Ene-Jun 2009 80

3.5.2. Cadenas. Limpieza de cadenas

Sirven para limpiar espacios en blanco al principio de la cadena, al final o en cualquier parte desde el principio al final y son respectivamente ltrim( ) , chop()y trim()subcads4.php<?php

$salto_linea = "\n";$cadena = " cadena con varios espacios en blanco " ;echo $salto_linea . $cadena . " tamaño: " . strlen($cadena);echo "<br>";echo $salto_linea . ltrim($cadena) . " tamaño: ".strlen(ltrim($cadena));echo "<br>";echo $salto_linea . chop($cadena) . " tamaño: ".strlen(chop($cadena));echo "<br>";echo $salto_linea . trim($cadena) . " tamaño: ".strlen(trim($cadena));

?>

IT Colima Ene-Jun 2009 81

3.5.2. Cadenas. Sustitucion de cadenasLa funciónstr_replace()toma como parámetros un conjunto de caracteres a buscar, un grupo que debe sustituirse por el anterior y una cadena de caracteres sobre la que actuar.

<?php //subcads5.php

$cadena = "Esta cadena tiene muchas letras";

$cadena = str_replace("Esta","Este",$cadena);

echo str_replace("cadena","conjunto",$cadena);

?>

Si en la cadena existiera más de una instancia del conjunto buscado, todas las ocurrenciasquedarían cambiadas.

<?php//subcads6.php

$cadena = "Esta cadena tiene muchas letras y cadenas";

$cadena = str_replace("Esta","Este",$cadena);

echo str_replace("cadena","conjunto",$cadena);

?>

IT Colima Ene-Jun 2009 82

3.5.2. Cadenas. Funciones de mayúscula y minúsculaLas funcionesstrtolower() y strtoupper() devuelven la cadena que

se pasa como argumento, completamente en minúscula o mayúscularespectivamente.

<?php//subcads8.php

$cadena = "Hay palabras en MAYÚSCULAS y en minúsculas<br>" ;

echo strtolower($cadena) ;

echo strtoupper($cadena);

?>

IT Colima Ene-Jun 2009 83

3.5.2. Cadenas. Funciones de mayúscula y minúsculaSi lo que realmente nos interesa es que la primera letra de un textoaparezca como letra Capital o, que letras iniciales de cada palabra en una frase aparezcan en mayúscula, tenemos las funciones ucfirst( ) y ucwords( ) .

<?php$cadena = "había una vez...<br>";echo ucfirst($cadena);$cadena2 = "linux user group";echo "LUG significa ".ucwords($cadena2) ;

?>

IT Colima Ene-Jun 2009 84

3.5.2. Cadenas. Expresiones regulares� Las funciones vistas anteriormente basan su potencia en la

búsqueda o sustitución de los caracteres de una cadena, peroson poco útiles cuando tratamos de comprobar si un conjuntode caracteres cumple un formato determinado.

� Si solicitamos mediante un formulario un correo electrónico, necesitamos saber, a priori, si ese correo por lo menos está bienconstruido

alumno@hotmail.org

alumno@gmail.com

IT Colima Ene-Jun 2009 85

3.5.2. Cadenas. Expresiones regulares

�La idea es poder descartar de alguna forma los correos escritos:

alumno @hotmail.org

ALUMNO@gmail.com

alumno@@hotmail.org

IT Colima Ene-Jun 2009 86

3.5.2. Cadenas. Comprobar expresiones regulares

La funciónereg()es capaz de comprobar si una cadena se correspondecon el patrón que se pasa como parámetro. Toma dos argumentosobligatorios, una expresión regular y una cadena de caracteres dondebuscar el patrón. Seguidamente puede ver un ejemplo completo de utilización de expresiones regulares y la función:

IT Colima Ene-Jun 2009 87

3.5.2. Cadenas. Expresiones regulares� Las expresiones

regulares son patrones de búsqueda dentro de cadenas.

� Estos patrones se construyenmediante caracteresespeciales quecumplen unasreglasdeterminadas

IT Colima Ene-Jun 2009 88agrupacion sin almacenar en variable(?: )

agrupación almacenandola a una variable( )Agrupando

una u otra|Alternar

entre 4 y 8{4,8}

4 o más{4,}

4 exactos{4}

0 0 1 (”quizas a”)?

0 o mas (”quizas algunos”)*

1 o mas (”algunos”)+

Agrupaciones aplicadas a elementos

cualquier carácter que no sea un espacio[^[:space:]]

cualquier digito[[:digit:]]

cualquier letra[[:alpha:]]

cualquier espacio (espacio \n \r o \t)[[:space:]]

cualquier carácter.

cualquier carácter hexadecimal (’0′ a ‘9′ o ‘a’ a ‘f’)[a-fA-F0-9]

cualquier carácter excepto aAeEiou[^aAeEiou]

cualquier carácter incluído en [ ][aAeEiou]

Grupo de carácteres

Termina con$

Empieza con^Delimitadores

Códigos hexadecimales\xa3

Códigos de control\cJ \cG

Nueva linea, tabulación y retorno de carro\n \t \r

Precede un caracter especial con el signo \ para cancelar su significado\$ \^ \+ \\ \?

Letras, digitos y cualquier carácter especiala A y 6 % @

Caracteres literalesLocalización de un carácter concreto

DescripciónEjemploTipo de Operador

IT Colima Ene-Jun 2009 89

3.5.2. Cadenas. Expresiones regulares

[ a - z ] + @ [ a - z ] + \ . o rg

�La primera parte, [a-z] +, nos dice que aceptará una letra, o conjunto de letras, sin espacios y en minúsculas, que pueden corresponderse con el nombre de usuario de la cuenta de correo.

� Después aceptará un símbolo@, seguido de otro conjunto de caracteres, correspondientes al servidor de correo.

�La última parte de la expresión la componen los símbolos \ ., queindican que tiene que aparecer un punto que separe la descripción del servidor del dominio y la cadenaorg , que obliga a que todos los correossean de dominio no gubernamental.

IT Colima Ene-Jun 2009 90

3.5.2. Cadenas. Expresiones regulares

^[ a - z ]+@[ a - 2 ] + \ . o r g$

Obliga a que el comienzo de la cadena y el final sean parte de la expresión.

IT Colima Ene-Jun 2009 91

3.5.2. Cadenas. Expresiones regularesTambién podemos encontrarnos con que existen correosintroducidos correctamente, pero el dominio es otrodistinto a org. Esta vez la solución es introducir el operador O lógico |, que permite elegir entre variasopciones:

^ [ a - z ] +@ [ a - z ] + \ . ( o r g | c o m | n e t )$

IT Colima Ene-Jun 2009 92

3.5.2. Cadenas. Expresiones regulares�Un problema menor, aunque habitual en el ámbito de los correos electrónicos, es la utilización de signos de puntuación para separar nombres y apellidos y servidoresde servidores virtuales.

� Por ejemplo, el correo siguiente es correcto, pero no seríaevaluado por la expresión anterior:

alumno.sistemas@labredes.itcolima.edu.mx

IT Colima Ene-Jun 2009 93

3.5.2. Cadenas. Expresiones regulares

alumno.sistemas@labredes.itcolima.edu.mx

�Solución

^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$

IT Colima Ene-Jun 2009 94

3.5.2. Cadenas. Comprobar expresiones regulares

<?php

$correo = "alumno.sistemas@labredes.itcolima.org";

$correol = "ALUMNO@labredes@itcolima.edu";

$correo2 = "@lumno.sistemas@labrede.itcolima.edu";

if ( ereg("^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$",$correo) ){

echo "El correo $correo se acepta.<br>";

} else {

echo "El correo $correo no cumple el patrón.<br>";

}

if (ereg("^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$",$correol) ) {

echo "El correo $correol se acepta.<br>";

}else {

echo "El correo $correol no cumple el patrón.<br>";

}

if (ereg("^[a-z\.]+@[a-z\.]+\.(org|com|net|edu)$",$correo2)) {

echo "El correo $correo2 se acepta.<br>";

}else {

echo "El correo $correo2 no cumple el patrón.<br>";

}

?>

IT Colima Ene-Jun 2009 95

3.5.3. Cadenas.Imprimir y formatear.

int printf (string formato [, mixed args...])string sprintf (string formato [, mixed args...])

1. Relleno2. Alineación3. Número de caracteres4. Precisión5. Tipo

% El carácter de tanto por ciento.b Entero en binario.c Entero como carácter ASCII.d Entero en decimal.f Double en punto flotante.o Entero en octal.s Cadena.x Entero en hexadecimal (minúsculas).X Entero en hexadecimal (mayúsculas).

Secuencias de formato

IT Colima Ene-Jun 2009 96

3.5.3. Cadenas. Imprimir y formatear. (2)

<?php$dia=17;$mes=3;$anio=2009;printf("%02d/%02d/%04d", $dia, $mes, $anio); echo "<br>";$pago1 = 68.75;$pago2 = 52.35;$pago = $pago1 + $pago2;

// echo $pago mostraría "123.1"// Mostrar al menos un dígito entero y exactamente // dos decimales, rellenando con ceros

printf ("%01.2f", $pago);?>

IT Colima Ene-Jun 2009 97

3.5.4. Escapar caracteres.SQL.

$busca = “D’Alton”; // Habrá que escapar el apóstrofe

$sql = ‘SELECT * FROM usuariosWHERE apellido = \’’ .addslashes($busca) . ‘\’’;

IT Colima Ene-Jun 2009 98

3.5.4. Escapar caracteres.Shell.

string system (string comando [, int valor_salida])

echo system(“finger $usuario”);

¿Qué pasa si $usuario=“pepe ; apachectl stop” ?

string escapeshellcmd (string comando)

IT Colima Ene-Jun 2009 99

3.5.4. Escapar caracteres.HTML.

$valor = “a>b”;echo ‘<input type=hidden name=var value=”’ .

htmlspecialchars($valor) . ‘”>’;

// <input type=hidden name=var value=”a&gt;b”>

string nl2br (string cadena)

IT Colima Ene-Jun 2009 100

3.5.5. Extraer campos.

array explode (string delimitador, string cadena[, int límite])

string implode (string delimitador, array campos)

$cadena = implode(“:”, $campos);

$cadena = “campo1:campo2:campo3”;$campos = explode(“:”, $cadena);

IT Colima Ene-Jun 2009 101

3.5.5. Extraer campos.Expresiones regulares.

array split (string delimitador, string cadena[, int límite])

$fecha = "12/4 2000";

$campos = split ('[ /.-]', $fecha);

IT Colima Ene-Jun 2009 102

3.5.6. Recorrer un array.

$arr = array(1,'cosa',1.57,'gato'=>'raton','perro'=> 'gato');

current($arr); // 1 next($arr); // cosacurrent($arr); // cosaprev($arr); // 1 end($arr); // gatocurrent($arr); // gatokey($arr); // perroreset($arr); // 1 each($arr); // array(0,1) each($arr); // array(1,'foo') each($arr); // array(2,1.57)

reset(), end(), next(), each(), current(), key()

IT Colima Ene-Jun 2009 103

3.5.7. Ordenar un array.

• sort(): Ordena el array por contenido en orden ascendente.

• rsort(): Ordena por contenido en orden descendente.

• ksort(): Ordena por el índice en orden ascendente.

• rksort(): Ordena por el índice en orden descendente.

IT Colima Ene-Jun 2009 104

3.5.8. Otras funciones.

string trim (string cadena)string ltrim (string cadena)string rtrim (string cadena)

string strtoupper (string cadena)string strtolower (string cadena)string ucfirst (string cadena)

Eliminar espacios en blanco:

Mayúsculas y minúsculas:

IT Colima Ene-Jun 2009 105

3.6.1. Ficheros. Abrir y cerrar.

int fopen (string nombre, string modo[, int include_path])

int fclose (int identificador)

Modos:•‘r’ Sólo lectura. Puntero al inicio.•‘r+’ Lectura/escritura. Puntero al inicio.•‘w’ Sólo escritura. Se trunca el fichero.•‘w+’ Lectura/escritura. Se trunca el fichero.•‘a’ Sólo escritura. Puntero al final.•‘a+’ Lectura/escritura. Puntero al final.

IT Colima Ene-Jun 2009 106

3.6.2. Ficheros.Leer y escribir.

string fgets (int identificador, int tamaño)

mixed fscanf (int identificador, string formato[, string var1...])

int feof (int identificador)

array file (string fichero[, int include_path])

int fwrite (int identificador, string cadena [, int tamaño])

IT Colima Ene-Jun 2009 107

3.6.3. Ficheros.Copiar / renombrar / borrar.

int copy (string origen, string destino)

int rename (string origen, string destino)

int unlink (string fichero)

IT Colima Ene-Jun 2009 108

3.6.4. Directorios.

int chdir (string directorio)int mkdir (string nombre, int modo)int rmdir (string nombre)

int opendir (string nombre)string readdir (int identificador)void closedir (int identificador)

IT Colima Ene-Jun 2009 109

3.6.4. Directorio. Listado de contenidos.

$direcotrio = opendir('.');

while (($fichero = readdir($directorio)) !== FALSE) {

echo "$fichero\n";}

closedir($directorio);

IT Colima Ene-Jun 2009 110

3.6.5. Ficheros. Envío.

<FORM ENCTYPE="multipart/form-data" ACTION="recibir.php" METHOD=POST>

<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000">Fichero: <INPUT NAME="fichero" TYPE="file"><INPUT TYPE="submit" VALUE="Enviar"></FORM>

// Contenido de “recibir.php”echo ’Recibido el fichero: "’.$fichero_name.’"<br>’;echo ’Tamaño del fichero: ’ . $fichero_size . ’<br>’;echo ’Tipo mime: ’ . $fichero_type . ’<br>’;rename($fichero, $fichero_name);

IT Colima Ene-Jun 2009 111

3.7.1. POO. Definición de una clase.

class NombreClase{

var $variables;

function metodos ($parametros){

codigo}

}

IT Colima Ene-Jun 2009 112

2.7.1. POO. Definición de una clase.Ejemplo.

class Coche {var $velocidad; // Velocidad actual

// Constructor por defecto. El coche está parado.function coche() {

$this->velocidad = 0;}// Constructor que indica la velocidad inicial.function coche($vel) {

$this->velocidad = $vel;}// Método acelerar. El coche va más rápido.function acelerar() {

$this->velocidad++;}// Método frenar. El coche va más lento hasta frenar.function frenar() {

if ($this->velocidad > 0) {$this->velocidad--;

}}

}

IT Colima Ene-Jun 2009 113

2.7.1. POO. Modificadores de acceso

Restringiendo el acceso a las propiedades (encapsulacion)• Modificadores de acceso:

•Publico (public ) //por defecto•Privado (private )•Protegido (protected )

• Cuando se declara una propiedad como “privada ” solo la misma clase puede acceder a la propiedad

• Cuando se declara como “protected ” solo la misma clasey las clases derivadas puede acceder a la propiedad(herencia).

IT Colima Ene-Jun 2009 114

2.7.1. POO. Modificadores de acceso<?php

class persona{var $nombre;public $departemento, $edad;private $RFC;protected $clave;function __construct(){

$this->nombre="xxxx";$this->edad=0;

} function set_nombre($nuevo_nombre){

$this->nombre = $nuevo_nombre;}function set_edad($nueva_edad){

$this->edad = $nueva_edad;}function get_nombre(){

return $this->nombre;}function get_edad(){

return $this->edad;}

}

IT Colima Ene-Jun 2009 115

2.7.2. POO. Herencia.

class ClaseDerivada extends ClaseBase{

// definición de métodos y variables// exclusivos de ClaseDerivada,// y redefinición (especialización)// de métodos de ClaseBase

}

IT Colima Ene-Jun 2009 116

2.7.2. POO. Herencia.Ejemplo.

class persona{var $nombre;public $departemento, $edad;private $RFC;protected $clave;

function __construct(){$this->nombre="xxxx";$this->edad=0;

}function set_nombre($nuevo_nombre){

$this->nombre = $nuevo_nombre;}function set_edad($nueva_edad){

$this->edad = $nueva_edad;}function get_nombre(){

return $this->nombre;}function get_edad(){

return $this->edad;}

}

class admvo extends persona{

}

IT Colima Ene-Jun 2009 117

2.7.2. POO. Herencia.Ejemplo.

class CocheFantastico extends coche() {// Frenado instantáneofunction frena() {

$this->velocidad = 0;}// ¡El coche habla!function habla() {

echo “Hola, Michael.”;}// ¡Salta!function salta() {

echo “Boing!!”;}// Turbo propulsiónfunction turbo() {

$this->velocidad = 200;}

}

IT Colima Ene-Jun 2009 118

2.7.3. POO. Creación y usode objetos.

// Creación (instanciación)$MiCoche = new Coche;$MiCocheSeMueve = new Coche(10);

// Uso$MiCoche->acelerar();$MiCoche->acelerar();$MiCoche->acelerar();echo $MiCoche->velocidad;$MiCoche->frenar();

IT Colima Ene-Jun 2009 119

2.7.3. POO. Creación y usode objetos.

// Creación (instanciación)$MiCoche = new Coche;$MiCocheSeMueve = new Coche(10);

// Uso$MiCoche->acelerar();$MiCoche->acelerar();$MiCoche->acelerar();echo $MiCoche->velocidad;$MiCoche->frenar();

IT Colima Ene-Jun 2009 120

2.7.3. POO. Interfaces• Uso: cuando se hace imprescindible definir unas pautas generalesde trabajo para que el resultado final sea el esperado.

• Si el desarrollo consiste en programar varios objetos, el analista de la aplicación puede definir la estructura básica en papel o crear una pequeña plantilla con métodos que el objeto final debería tener obligatoriamente.

• Esta plantilla es un interface y permite definir una clase con funciones definidas, pero sin desarrollar, que obliga a todas las clases que lo implementen a declarar estos métodos como mínimo.

IT Colima Ene-Jun 2009 121

2.7.3. POO. Interfacesinterface persona{

function set_nombre(){

}

function get_nombre(){

}

}

La interface anterior define la estructura básica que queremos para el objeto, declarando las funciones set_nombre y get_nombre. Para que unaclase haga uso de la interface se declara de la siguiente forma:

class trabajador implements persona

IT Colima Ene-Jun 2009 122

2.7.3. POO. Clases abstractas•Un interface no permite crear el cuerpo de ninguna función, dejando estatarea a las clases que la implementen.

•Las clases abstractas permiten definir funciones que deben implementarseobligatoriamente en los objetos que hereden y, además, permiten definirfunciones completas que pueden heredarse.

• Las clases abstractas deben llevar la palabra reservada abstract en la declaración de la clase y en todos los métodos que sólo definan su nombre.

abstract class persona{protected $nombre;function set_nombre($nombre){

$this->nombre=$nombre;}

abstract function get_nombre(){}

}

IT Colima Ene-Jun 2009 123

2.7.3. POO. Clases abstractas

• En lugar de un interface , se ha optado por utilizar una clase abstracta, porque se tiene claro que el método set_nombre() tiene que funcionarasí. • También se define el método abstracto get_nombre() , queobligatoriamente debe ser declarado en la clase que herede de ésta. • En realidad, un interface es una clase que tiene todos sus métodosabstractos

abstract class persona{protected $nombre;function set_nombre($nombre){

$this->nombre=$nombre;}

abstract function get_nombre(){}

}

IT Colima Ene-Jun 2009 124

POO. Clases con metodos estaticos� En PHP 5 puede declarar funciones dentro de una

clase que no utilicen propiedades o métodos de la misma.

� Estos métodos pueden calcular valores numéricos, hacer una conexión a una base de datos o comprobar que un correo electrónico esté bien definido.

� Aunque no existe ninguna palabra reservada para definirlo, son conocidos como métodos estáticos y pueden ser utilizados sin necesidad de instanciar un objeto.

IT Colima Ene-Jun 2009 125

POO. Clases con metodos estaticos<?php

class Nombre{protected $nombre;public function getNombre(){

return $this->nombre;}public function setNombre($nombre){

$this->nombre = $nombre;}public function NombreDefecto(){

return “Juan Perez<br>";}

$juan = new Nombre;echo $juan->NombreDefecto();

//También se puede acceder al nombre por defecto

echo Nombre::NombreDefecto();?>

IT Colima Ene-Jun 2009 126

POO. Llamada a funciones de la clase padre� El operador ( :: ) se puede utilizar también dentro de

una clase para hacer llamadas a funciones de la clase padre que estén sobrecargadas.

� Si define un constructor para la clase padre y otro para la clase hijo, cuando cree el objeto, el constructor que se ejecuta es el de nivel inferior, el constructor hijo.

� Para llamar al constructor padre debe utilizarse la nomenclatura Nombre_clase_padre : : construct() .

IT Colima Ene-Jun 2009 127

POO. Llamada a funciones de la clase padre<?php

class Nombre{protected $nombre;function __construct ( $nombre){

$this->nombre = $nombre;}public function getNombre(){

return $this->nombre;}public function setNombre($nombre){

$this->nombre = $nombre;}public function NombreDefecto(){

return “Juan Perez<br>";}

}

class Apellido extends Nombre{protected $apellidos;function __construct($nombre,$apellidos){

$this->apellidos = $apellidos;Nombre::construct(Snombre) ;

}public function getApellidos (){

return $this->apellidos;}

}$juan = new Apellido(“Juan",“Perez");echo $juan->getNombre() . "<br>";echo $juan->getApellidos();

?>

IT Colima Ene-Jun 2009 128

3.8.1. BD. Conexión y desconexión.

int mysql_connect ([string servidor [:puerto] [:/camino/al/socket] [, string usuario[, string contraseña]]])

int mysql_close ([int identificador])

int mysql_pconnect ([string servidor [:puerto][:/camino/al/socket] [, string usuario[, string contraseña]]])

int mysql_pclose ([int identificador])

IT Colima Ene-Jun 2009 129

3.8.1. BD. Conexión y desconexión. Ejemplo.

$link = mysql_connect ("www.mmlabx.ua.es", "nobody", "");

if (!$link) {

die ("No se pudo conectar");}

print ("Conexión realizada");

mysql_close ($link);

IT Colima Ene-Jun 2009 130

3.8.2. BD. Elegir una BD.

int mysql_select_db (string nombre_bd[, int identificador])

if (!mysql_select_db("prueba", $link)) {

die (“No existe la BD”);}

IT Colima Ene-Jun 2009 131

3.8.3. BD. Querys.

int mysql_query (string query [, int identificador])int mysql_db_query (string nombre_bd, string query

[, int identificador])int mysql_free_result (int result)

$query = "SELECT codigo, nombre, descripcion, creditos, tipo

FROM asignatura";

$asignaturas = mysql_query($query, $link);if (!$asignaturas) {

die (“Error en el query”);}

IT Colima Ene-Jun 2009 132

3.8.4. BD. Extraer información.

int mysql_affected_rows ([int identificador])

int mysql_num_rows (int resultado)

array mysql_fetch_row (int resultado)

array mysql_fetch_array(int resultado[, int tipo_resultado])

object mysql_fetch_object (int result)

array mysql_fetch_lengths (int resultado)

int mysql_data_seek (int resultado, int numero_fila)

IT Colima Ene-Jun 2009 133

2.8.5. BD. Extraer información.Ejemplos.

while ($fila = mysql_fetch_array($asignaturas)) {

echo $fila[‘codigo’] . ‘ ‘ . $fila[‘nombre’] . “\n”;}

while ($fila = mysql_fetch_object($asignaturas)) {

echo $fila->codigo . ‘ ‘ . $fila->nombre . “\n”;}

IT Colima Ene-Jun 2009 134

3.9. Acceso a BD unificado.Clase ConexionGenerica.

class ConexionGenerica {var $link;

function connect($servidor, $usuario, $clave) {echo "<h1>El m&eacute;todo <i>connect</i> ",

"no est&aacute; implementado en la ", "clase <i>".get_class($this)."</i></h1>";

return FALSE;}

function close() {}function select_db($base_datos) {}function query($query) {}function fetch_array($resultado) {}function free_result($resultado) {}

}

IT Colima Ene-Jun 2009 135

3.9. Acceso a BD unificado.Clase ConexionMySQL.

require ("ConexionGenerica.inc");

class ConexionMySQL extends ConexionGenerica {

function connect($servidor="localhost", $usuario="nobody", $clave="") {

return $this->link = mysql_connect($servidor,$usuario, $clave);

}

function close() {}function select_db($base_datos) {}function query($query) {}function fetch_array($resultado) {}function free_result($resultado) {}

}

IT Colima Ene-Jun 2009 136

3.9. Acceso a BD unificado. Uso.

// Fichero CreaConexion.increquire ("ConexionMySQL.inc");$conexion = new ConexionMySQL();

require ("CreaConexion.inc");

$conexion->connect("localhost", "nobody");$conexion->select_db("prueba", $link);

$asignaturas = $conexion->query("SELECT codigo, nombre, descripcion, creditos, tipo

FROM asignatura");