Download or die("Problemas en la conexion")

Document related concepts
no text concepts found
Transcript
PHP II PARTE
Presentado por:
Laura Patricia Pinto Prieto
BASE DE DATOS (MYSQL)
Uno de los empleos principales de php es el acceso a una base
de datos en el servidor. las operaciones básicas se hacen
empleando como lenguaje el SQL.
Php implementa distintas funciones según la base de datos a
emplear. Existen funciones actualmente para acceder a las
siguientes servidores de bases de datos:
- Mysql
- Microsoft sql server
- Oracle
- Entre otros
El más empleado en la actualidad en la Web es el
gestor de base de datos MySQL. (debido que cuando
se lo emplea sin fines de lucro se puede emplear el
software en forma gratuita).
Como ejemplo supongamos que se ha creado una base
de datos llamada phpfacil ,también una tabla llamada
alumnos cuya estructura se muestra a continuación
CREATE TABLE alumnos (
codigo int(11) NOT NULL auto_increment,
nombre varchar(40) default NULL,
mail varchar(50) default NULL,
codigocurso int(11) default NULL,
PRIMARY KEY (`codigo`) )
INSERT( Agregar registros a una tabla)
Necesitamos dos páginas para este proceso, una será el formulario
de carga de datos y la siguiente será la que efectúe la inserción en
la tabla.
El paso más importante es la codificación del comando SQL
insert:
mysql_query("insert into alumnos(nombre,mail,codigocurso) values
('$_REQUEST[nombre]','$_REQUEST[mail]',$_REQUEST[cod
igocurso])",
$conexion) or die("Problemas en el select".mysql_error());
FORMULARIO DE CARGA DE DATOS
<head><title>Problema</title></head>
<body>
<h1>Registro de Alumnos</h1>
<form action="pagina2.php" method="post">
Ingrese nombre:
<input type="text" name="nombre"><br>
Ingrese mail:
<input type="text" name="mail"><br>
Seleccione el curso:
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
<br>
<input type="submit" value="Registrar">
</form>
</body>
Ahora veremos como realizar el registro de los datos cargados en el
formulario, en la tabla alumnos de la base de datos phpfacil
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion=mysql_connect("localhost","root","z80")
or die("Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
die("Problemas en la seleccion de la base de datos");
mysql_query("insert into alumnos(nombre,mail,codigocurso) values
('$_REQUEST[nombre]','$_REQUEST[mail]',$_REQUEST[codigocurso])",
$conexion) or die("Problemas en el select".mysql_error());
mysql_close($conexion);
echo "El alumno fue dado de alta.";
?>
</body>
</html>
Veamos los pasos para efectuar el registro en la tabla alumnos:
$conexion=mysql_connect("localhost","root","z80")
or die("Problemas en la conexion");
La función mysql_connect se conecta a una base de datos de tipo MySql, el
primer parámetro es la dirección donde se encuentra el gestor de base de
datos (en este caso en el mismo servidor por lo que indicamos esto con
"localhost), el segundo parámetro es el nombre de usuario de la base de
datos ("root" en nuestro caso, que es el usuario por defecto que crea MySql
para el administrador) y por último la clave del usuariol definída como clave
la cadena "z80").
En caso de hacer algún error en la llamada a la función la misma retorna false
por lo que se ejecuta la instrucción seguida del operador or, en nuestro caso
llamamos a la función die que detiene la ejecución del programa y muestra
el mensaje por pantalla.
Paso seguido se selecciona una base de datos (ya que el gestor de base de
datos puede administrar varias bases de datos):
mysql_select_db("phpfacil",$conexion) or
die("Problemas en la seleccion de la base de datos");
A esta función le indicamos como primer parámetro el
nombre de la base de datos con la que trabajaremos y
como segundo parámetro la referencia que retornó la
función mysql_connect.
mysql_close($conexion);
echo "El alumno fue registrado.“
Por último cerramos la conexion con la base de datos y
mostramos un mensaje indicando que la carga se
efectuó en forma correcta.
Tener en cuenta que el campo código se generó en
forma automática.
LISTADO (SELECCIÓN DE REGISTROS DE UNA TABLA)
<?php
$conexion=mysql_connect("localhost","root","z80")
or die("Problemas en la conexion");
mysql_select_db("phpfacil",$conexion)
or die("Problemas en la selección de la base de datos");
$registros=mysql_query("select codigo,nombre, mail, codigocurso
from alumnos",$conexion) or
die("Problemas en el select:".mysql_error());
while ($reg=mysql_fetch_array($registros))
{ echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:";
switch ($reg['codigocurso']) {
case 1:echo "PHP";
break;
case 2:echo "ASP";
break;
case 3:echo "JSP";
break; }
echo "<br>";
echo "<hr>";}
mysql_close($conexion); ?>
El comando SQL que nos permite recuperar datos de tablas se llama
SELECT. Indicamos los campos a rescatar de la tabla y luego de
la palabra clave from indicamos el nombre de la tabla:
$registros=mysql_query("select codigo,nombre, mail,
codigocurso from alumnos",$conexion) or
die("Problemas en el select:".mysql_error());
En caso de haber codificado incorrectamente, el comando SQL
select la función mysql_query retorna false, por lo que se ejecuta
el comando siguiente al operador or, es decir la función die.
Si el comando SQL es correcto, en la variable $registros se
almacena una referencia a los datos rescatados de la tabla
alumnos. Ahora debemos ir mostrando registro a registro los
datos extraidos:
while ($reg=mysql_fetch_array($registros))
while ($reg=mysql_fetch_array($registros))
Para rescatar registro a registro los datos obtenidos por el
select debemos llamar a la función mysql_fetch_array.
Esta función retorna un vector asociativo con los datos
del registro rescatado, o false en caso de no haber más
registros
Es decir que si retorna un registro se almacena en el vector $reg y la condición del
while se valida como verdadero y pasa a ejecutarse el bloque del while:
{
echo "Codigo:".$reg['codigo']."<br>";
echo "Nombre:".$reg['nombre']."<br>";
echo "Mail:".$reg['mail']."<br>";
echo "Curso:";
switch ($reg['codigocurso']) {
case 1:echo "PHP";
break;
case 2:echo "ASP";
break;
case 3:echo "JSP";
break;
}
echo "<br>";
echo "<hr>";
}

El bloque del while muestra el contenido del registro rescatado
por la función mysql_fetch_array. Como vemos, para rescatar
cada campo accedemos mediante el vector asociativo $reg
indicando como subíndice un campo indicado en el
select:$reg['codigo']
Cada vez que llamamos a la función mysql_fetch_array nos
retorna el siguiente registro. Cuando debemos mostrar el curso
mediante la instrucción switch, analizamos si tiene un 1,2 ó 3 y
procedemos a mostrar el nombre del curso.
Para separar cada alumno en la página HTML llamamos
disponemos la marca "<hr>"
PROGRAMACIÓN
ORIENTADA A OBJETOS
PHP

Programación Lineal: Es cuando desarrollamos todo el
código disponiendo instrucciones PHP alternando con el
HTML de la página.

Programación Estructurada: Planteamos funciones que
agrupan actividades a desarrollar y luego dentro de la
página llamamos a dichas funciones que pueden estar
dentro del mismo archivo o en una librería separada.

Programación Orientada a Objetos: Es cuando
planteamos clases y definimos objetos de las mismas.
¿Qué es una clase?


Una clase es un molde del que luego se pueden
crear múltiples objetos, con similares
características.
La clase define los atributos (variables) y
métodos (funciones) comunes a los objetos de
ese tipo, pero luego, cada objeto tendrá sus
propios valores y compartirán las mismas
funciones.
Objetos
Son instancias de clases. Durante la ejecución de la aplicación se
producirá la instanciación de esta clase, es decir, la creación de los
objetos que representan cada uno de los individuos con sus
características propias, es decir, valores específicos para sus
atributos
Encapsulamiento
El principio de ocultación de información se plasma en los
lenguajes OO en diversos mecanismos de protección de los
miembros de la clase:
Miembros públicos (+). Sin ningún
tipo de protección especial
 Miembros privados (-). Inaccesibles
desde el exterior de la clase
 Miembros protegidos (#). Similares
a los privados aunque se permite su
acceso desde las clases descendientes

Ejemplo de métodos y
atributos
<?php
class CabeceraPagina
{ private $titulo;
private $ubicacion;
public function inicializar($tit,$ubi)
{$this->titulo=$tit;
$this->ubicacion=$ubi;
} public function graficar()
{echo '<div style="font-size:40px;text-align:'.$this>ubicacion.'">';
echo $this->titulo;
echo '</div>'; } }
cabecera=new CabeceraPagina();
$cabecera->inicializar('El blog del programador','center');
$cabecera->graficar(); ?>
Método constructor de una
clase

El constructor es un método especial de una clase. El
objetivo fundamental del constructor es inicializar los
atributos del objeto que creamos.

Básicamente el constructor remplaza al método
inicializar que habíamos hecho en el concepto
anterior.
Las ventajas de implementar un constructor
en lugar del método inicializar son:



El constructor es el primer método que se
ejecuta cuando se crea un objeto y no puede ser
llamado nuevamente.
El constructor se llama automáticamente. Es
decir es imposible de olvidarse llamarlo ya que se
llamará automáticamente.
Un constructor no puede retornar dato.
Ejemplo constructor
<?php class CabeceraPagina
{ private $titulo;
private $ubicacion;
public function __construct($tit,$ubi)
{ $this->titulo=$tit;
$this->ubicacion=$ubi; }
public function graficar()
{ echo '<div style="font-size:40px;text-align:'.$this->ubicacion.'">';
echo $this->titulo;
echo '</div>'; } }
$cabecera=new CabeceraPagina('El blog del programador','center');
$cabecera->graficar(); ?>
Llamada de métodos dentro de la
clase.
Para llamar un método desde donde creamos el objeto utilizamos la
sintaxis:
[nombre del objeto]->[nombre del método]
Es decir antecedemos al nombre del método el nombre del
objeto y el operador ->
Ahora bien que pasa si queremos llamar dentro de la clase a otro
método que pertenece a la misma clase, la sintaxis es la siguiente:
$this->[nombre del método]
Es importante tener en cuenta que esto solo se puede hacer cuando
estamos dentro de la misma clase.
Modificadores de acceso a atributos y
métodos (public - private)



Veíamos hasta ahora que todos los métodos planteados
de la clase han sido públicos. Pero en muchas
situaciones conviene que haya métodos privados
(private).
Un método privado (private) solo puede ser llamado
desde otro método de la clase. No podemos llamar a un
método privados desde donde definimos un objeto.
Con la definición de métodos privados se elimina la
posibilidad de llamar a métodos por error
Colaboración de objetos
Cuando dentro de una clase definimos un atributo o una variable de otra clase
decimos que esta segunda clase colabora con la primera.
class Cabecera { [atributos y métodos] }
class Cuerpo { [atributos y métodos] }
class Pie { [atributos y métodos] }
class Pagina
{ private $cabecera;
private $cuerpo;
private $pie;
[métodos] }
$pag=new Pagina();
El constructor de la clase pagna:
public function __construct($texto1,$texto2)
{ $this->cabecera=new Cabecera($texto1);
$this->cuerpo=new Cuerpo();
$this->pie=new Pie($texto2); }
Herencia



Otra requisito que tiene que tener un lenguaje para
considerarse orientado a objetos es la HERENCIA.
La herencia significa que se pueden crear nuevas clases
partiendo de clases existentes, que tendrá todas los
atributos y los métodos de su 'superclase' o 'clase padre'
y además se le podrán añadir otros atributos y métodos
propios.
En PHP, a diferencia de otros lenguajes orientados a
objetos (C++), una clase sólo puede derivar de una
única clase, es decir, PHP no permite herencia múltiple.
Superclase o clase padre
Clase de la que desciende o deriva una clase. Las clases hijas
(descendientes) heredan (incorporan) automáticamente los
atributos y métodos de la la clase padre.
Subclase
Clase desciendiente de otra. Hereda automáticamente los
atributos y métodos de su superclase. Es una especialización de
otra clase. Admiten la definición de nuevos atributos y métodos
para aumentar la especialización de la clase.
Ejemplo
VEHICULO
COLECTIVO
MOTO
AUTO
FORDK
Renault 9
Siempre hacia abajo en la jerarquía hay una
especialización (las subclases añaden nuevos atributos
y métodos
¿Cuándo hay herencia?

Cuando la relación entre dos clases es del tipo "...tiene un..." o
"...es parte de...", no debemos implementar herencia. Estamos
frente a una relación de colaboración de clases no de herencia.

Luego si vemos que dos clase responden a la pregunta ClaseA
"..es un.." ClaseB es posible que haya una relación de herencia.
Por ejemplo:
Auto "es un" Vehiculo
Circulo "es una" Figura
Mouse "es un" DispositivoEntrada
Suma "es una" Operacion
Ejemplo Herencia
<?php
class Operacion
{ protected $valor1;
protected $valor2;
protected $resultado;
public function cargar1($v)
{ $this->valor1=$v; }
public function cargar2($v)
{ $this->valor2=$v; }
public function imprimirResultado()
{ echo $this->resultado.'<br>'; } }
class Suma extends Operacion
{
public function operar()
{
$this->resultado=$this->valor1+$this->valor2;
}
}
class Resta extends Operación
{
public function operar()
{
$this->resultado=$this->valor1-$this->valor2;
}
}
$suma=new Suma();
$suma->cargar1(10);
$suma->cargar2(10);
$suma->operar();
echo 'El resultado de la suma de 10+10 es:';
$suma->imprimirResultado();
$resta=new Resta();
$resta->cargar1(10);
$resta->cargar2(5);
$resta->operar();
echo 'El resultado de la diferencia de 10-5 es:';
$resta->imprimirResultado();
?>