Date post: | 12-Feb-2018 |
Category: |
Documents |
Upload: | juan-gutierrez |
View: | 223 times |
Download: | 0 times |
of 145
7/23/2019 Php Capitulos567[1]
1/145
Desarrollo Web con
PHPOscar Capuay Uceda
7/23/2019 Php Capitulos567[1]
2/145
Contenido
DEDICATORIA 7
AGRADECIMIENTOS 7
INTRODUCCIN 9
I. PREPARANDO LA PLATAFORMA DE DESARROLLO 11
INSTALACIN DEL SERVIDOR WEB Y PHP 11INSTALACIN EN WINDOWS 11
II. DHTML 16
HTML 16
FORMATO DE TEXTO CON HTML 19
LISTAS 19
COMENTARIOS NO VISIBLES EN LA PANTALLA 22CARACTERES ESPECIALES 23ENLACES O HIPERVNCULOS 25
IMGENES 28TABLAS 31
FORMULARIOS 38HTML4 45JAVASCRIPT 61ELEMENTOS BSICOS 62COMENTARIOS 62
LITERALES 63TIPOS DE DATOS 64VARIABLES 64
OPERADORES 65
ESTRUCTURAS DE CONTROL 68
OBJETOS 70
OBJETOS PREDEFINIDOS 71EVENTOS 75
DEFINICIN MEDIANTE CDIGO 77MODELO DE OBJETOS DEL DOCUMENTO 78OBJETO WINDOW 79OBJETO DOCUMENT 82OBJETO FORM 83OTROS OBJETOS 88
FICHEROS .JS 90
HOJASDEESTILOENCASCADA 91
SINTAXIS Y TIPOS BSICOS DE DATOS EN CSS2 95
PALABRAS CLAVE 97
7/23/2019 Php Capitulos567[1]
3/145
III. INICIANDO LA PROGRAMACIN CON PHP 99
QUE ES PHP? 99VARIABLES 99CONSTANTES 99
TIPOS DE DATOS 100EXPRESIONES 100
OPERADORES 102OPERADORES DE ARITMTICA 103OPERADORES DE ASIGNACIN 103OPERADORES DE COMPARACIN 104OPERADORES DE CONTROL DE ERRORES 105OPERADORES DE EJECUCIN 106OPERADORES DE INCREMENTO/DECREMENTO 106OPERADORES DE LGICA 108
OPERADORES DE CADENA 108
OPERADORES DE MATRICES 109
OPERADORES DE TIPO 110
IV. ESTRUCTURAS DE CONTROL 113
SI (CONDICIONAL):IF 113ELSE 114
ELSEIF 114
FOR 115
WHILE 115
DO..WHILE 115
V. ACCESO A DATOS CON PHP 117
FORMULARIOS HTMLY PHP 124
SUBIENDO ARCHIVOS AL SERVIDOR 129
ACCESO A BASES DE DATOS 132
CREANDO UNA BASE DE DATOS MYSQLEN MYSQLADMINISTRATOR 132CREANDO UNA BASE DE DATOS MYSQLEN PHPMYADMIN 137
ACCESO A MYSQLDESDE PHP 143INSTALACIN DE POSTGRESQLSOBRE WINDOWS XP 151
CREANDO UNA BASE DE DATOS POSTGRESQLEN PGADMIN III 158CREANDO UNA BASE DE DATOS POSTGRESQLEN PHPPGADMIN 165ACCESO A POSTGRESQLDESDE PHP 170ACCESO A MSSQL-SERVER DESDE PHP 177
VI. PHP ORIENTADO A OBJETOS 187
CLASES EN PHP 187
INSTANCIA DE UN OBJETO 187EXTENDIENDO OBJETOS 188
7/23/2019 Php Capitulos567[1]
4/145
AUTO CARGA DE OBJETOS 189ACCESO A MYSQLCON PHPORIENTADO A OBJETOS 191MYSQLI 191
MYSQLI_STMT 193MYSQLI_RESULT 194
PAGINANDO RESULTADOS 202
ARQUITECTURA MVC 205
MVCCON PHP 205
MVCY PHPCON ACCESO A BASE DE DATOS 212PDOPHPDATA OBJECT 215CLASES PREDEFINIDAS 215
CONEXIONES CON PDO 218EJECUCIN DE SENTENCIAS PREPARADAS CON PDO 221
VII.SEGURIDAD WEB 225
SEGURIDAD EN EL SISTEMA DE ARCHIVOS 225SEGURIDAD EN BASE DE DATOS 227INYECCIN SQL 229SESIONES 242AUTENTIFICACIN HTTPCON PHP 246LOGIN 248CAPTCHA 253
VIII.GENERACIN DE ARCHIVOS CON PHP 257
IMGENES 257ARCHIVOS PDF 264FPDF 264
ARCHIVOS XLS 274
IX. PHP + AJAX 281
AJAX 281XAJAX 282
EVENTOS CON XAJAX 291
TRABAJO CON FORMULARIOS EN XAJAX 293ERROR COMN 298BSQUEDA EN BASE DE DATOS CON XAJAX 299ADMINISTRACIN DE DATOS CON AJAX 301
CONTROLADOR CON AJAX 301
CAPA DE DATOS CON AJAX 306
VISTA CON AJAX 308
X. REFERENCIAS BIBLIOGRAFICAS 313
XI.ANEXOS 314
7/23/2019 Php Capitulos567[1]
5/145
LISTA DE EJEMPLOS 314LISTA DE TABLAS 318LISTA DE FIGURAS 319
7/23/2019 Php Capitulos567[1]
6/145
Acceso a Datos con PHP
V. Acceso a Datos con PHP
Lo primero que tene digo PHP en el
ocumento HTML.tra arcas, las cuales tienen la siguiente formaETIQUETA> . Debido a esto, hay que indicar dentro del
io y fin deldigo PHP insertado, para ello hay que utilizar los siguientes smbolos:
ara iniciar PHP:
AD>mplo PHP
>
uiente cdigo imprime Hipertext Preprocessor
rocessor";
>
cliente Web (navegador o browser) hace una solicitud a uneb, ste ubica el archivo solicitado y verifica si contiene cdigo
HP o no, en caso que slo sea HTML, el archivo es enviado directamente
o del procesamiento al cliente. Segn el ejemplo anterior, elocumento sera enviado a ser procesado, en este proceso se interpretara
las lneas de cdigo y despus el resultado sera enviado al cliente.
p
> Primer Ejemplo PHP >
Hipertext Preprocessor
Preprocessor
mos que aprender es como insertar c
dEn HTML se baja en base a m; # Esto es una abreviatura de "
7/23/2019 Php Capitulos567[1]
8/145
Acceso a Datos con PHP
La etiqueta de fin de bloque incluir tras ella la siguiente lnea si hay alguna. Adems, la etiqueta de fin de bloque lleva implcito el punto ynecesitas por lo tanto aadir el punto y coma final de la ltima lnea
sarrollo de software son muy importantes los comentarios en loste sintaxis:
n comentario de una lnea se usa: //eas, se delimita el
6: Comentarios
?phpemplo de una lnea
ro ejemplo,
as
7: Sentencia if (1)
hp
HEAD> Ejemplo de la sentencia if El siguiente cdigo utiliza
la sentencia if de php
/BODY>/HTML>
Ejemplo 58: Sentencia if (2)
pagina03.php
presentecoma; nodel bloque PHP.
En el descripts, en el caso de PHP, los comentarios tienen la siguien
Cuando es u Cunado un comentarios es de varias ln
comentario utilizando: /*y */
Ejemplo 5
Ejemplo 5pagina02.p
"; // escribir fila con el valor de: i
>
Resultado Web
Ahora veaEn este primer ejemplo generamos una tabla con una columna y nEjemplo 60: Sentencia for (1)
Pagina05.php
7/23/2019 Php Capitulos567[1]
11/145
Acceso a Datos con PHP
Figura 56. Resultado de pagina05.phpEjemplo 61: Sentencia for (2)
agina06.php
encia for
for($i=1;$i$i $j"; //escribir columnas (celdas)
echo ""; // terminar la fila
a tabla
p
HEAD> Ejemplo de la sent
as filas con el for
{ ?>
Ejemplo 62:
Con el siguiepagina07.php
Ejemplo de la sentencia for
Oscar E Capuay Uceda 123
7/23/2019 Php Capitulos567[1]
13/145
Acceso a Datos con PHP
La mayor parte de aplicaciones Web suelen trabajar con PHP utilizandovariables y objetos ingresados por los usuarios a travs de formulariosHTML.
Formularios HTML y PHPVeamos un ej gina PHPutilizando los mEjemplo 63: Envo de datos de un formulario a una pgina PHP
formulario01.html
FormularioIngresa tu nombre
En la etiqueta form, en su propiedad action, especificamos el destino de losdatos, es decir, la pgina PHP que recibir los datos del formulario. En estecaso pagina08.php, y no olvidemos que en el mtodo estamos especificandoPOST.Adems debemos tomar en cuenta el nombre del objeto (caja de texto input tipo text) txtnombre, pues ser en nombre que usaremos en la pginade destino.
pagina08.php
Ejemplo de envio de datosTu nombre es:
En esta pgina podemos ver que usamos el array $_POST de PHP paraacceder a los datos enviados a travs de este mtodo. Tambien podemos
emplo sencillo en el que se envan datos a una ptodos POST y GET, respectivamente.
Oscar E Capuay Uceda 124
7/23/2019 Php Capitulos567[1]
14/145
Acceso a Datos con PHP
observar que en la barra de direccin no aparece ninguna variable,P.solamente el nombre de la pgina PH
Resultado Web
Figura 58. Resultado de formulario01.html
Figura 59. Resultado de pagina08.php
Ahora veamos como sera este ejemplo utilizando el mtodo GET.Formulario02.html
head>
Ingresa tu nombre
pagina09.php
Ejemplo de envio de datos
Tu nombre es:
7/23/2019 Php Capitulos567[1]
15/145
Acceso a Datos con PHP
echo $_GET[txtnombre];?>
Resultado Web:
Figura 60. Resultado de formulario02.html
Figura 61. Resultado de pagina09.php
Figura 62. URL incluyendo datos enviados
En la figura 36 podemos ver en la barra de direccin los datos enviados atravs del mtodo GET, por lo que debemos utilizar el array $_GET de PHPpara acceder a ellos.
Ahora utilizaremos algunos objetos adicionales en el formulario, tipo INPUT:checkbox, radio, y hidden.
formulario03.html
Oscar E Capuay Uceda 126
7/23/2019 Php Capitulos567[1]
16/145
Acceso a Datos con PHP
Formulario
Temas de inters:Redes
de computadorasWorld
Wide WebSeguridad Informtica
Sexo:MasculinoFemenino
ckbox que tienen el mismoe datos al archivo pagina10.php,
ero cada uno de ellos tiene un valor distinto para poder diferenciarlos.Cuando estos objetos lleguen a su destino solo podremos leer los valores deaquellos objetos que fueron chequeados.En el caso de los botones de opcin pasa algo similar pero esta tcnicasiempre la utilizo pues nos sirve para agrupar radio-botones (botones deopcin).
Resultado Web:
put type="submit" name="Submit" value="Enviar">
7/23/2019 Php Capitulos567[1]
17/145
Acceso a Datos con PHP
Al presionar el botn Enviar enviamos los datos del formulario al archivo:pagina10.php que se detalla a continuacin:
pagina10.php Ejemplo de envio de datosEl valor del objeto oculto
es:
El sexo seleccionado:
Los temas seleccionados son:
7/23/2019 Php Capitulos567[1]
18/145
Acceso a Datos con PHP
Figura 65. Resultado de formulario03.html (segundo caso)
Figura 66. Resultado de pagina10.php (segundo caso)
Subiendo archivos al servidor
En muchas aplicaciones Web es necesario enviar o subir archivos al servidorWeb, es por ello que veremos a continuacin el procedimiento que nospermita realizar esta tarea sin ningn problema.
Figura 67. Resultado de formulario04.html
Ejemplo 64: Subir un archivo al servidor Web
formulario04.html
Oscar E Capuay Uceda 129
7/23/2019 Php Capitulos567[1]
19/145
Acceso a Datos con PHP
Subir ameta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
form action="pagina11.php" method="post" enctype="multipart/form-data"
name="form1">Seleccione un
/html>
rchivos
Nombres
7/23/2019 Php Capitulos567[1]
36/145
Acceso a Datos con PHP
Pagina15.php
7/23/2019 Php Capitulos567[1]
37/145
Acceso a Datos con PHP
$registro=mysql_fetch_array($rs);?>Nuevo registro
Edicin de Persona Nombres
7/23/2019 Php Capitulos567[1]
38/145
Acceso a Datos con PHP
Figura 97. Formulario de edicin de un registro
pagina17.php
7/23/2019 Php Capitulos567[1]
39/145
Acceso a Datos con PHP
//ejecutar sentenciamysql_query($sql) or
cho "La persona fue eliminada exitosamente
";
>
En la siguiente seccin veremos el acceso a una base de datos PostgreSQL.
die(mysql_error());eecho "Listado de Personas";?
Oscar E Capuay Uceda 150
7/23/2019 Php Capitulos567[1]
40/145
Acceso a Datos con PHP
Instalacin de PostgreSQL sobre Windows XPPara instalar PostgreSQL debemos descargar el instalador de la seccinDownload de http://www.postgresql.org.
Una vez descargado el archivo zip, lo descomprimimos y tendremos lossiguientes archivos:
Figura 99. Archivos de instalacin de PostgreSQL
Ejecutamos el archivo postgresql-8.3
Figura 100. Asistente de instalacin de PostgreSQL
Seleccionamos el idioma que se usar en la instalacin (English) ypresionamos Start.
Oscar E Capuay Uceda 151
7/23/2019 Php Capitulos567[1]
41/145
Acceso a Datos con PHP
Figura 101. Inicio del asistente de instalacin
Se recomienda c leemos lasstrucciones necesarias para empezar.
errar los programas abiertos y y luegoin
Figura 102. Notas de instalacin
Oscar E Capuay Uceda 152
7/23/2019 Php Capitulos567[1]
42/145
Acceso a Datos con PHP
Figura 103. Opciones de instalacin
amosSeleccion
las herramientas e interfaces que deseamos instalar.
Figura 104. onfiguracin del servicio
Luego ingresamos el password para la cuenta postgres.
Oscar E Capuay Uceda 153
7/23/2019 Php Capitulos567[1]
43/145
Acceso a Datos con PHP
Figura 105. Error en la cuenta
Si el usuario postgres no existe aparecer el mensaje anterior para preguntarsi deseamos crearlo responderemos Si.
Figura 106. Password aleatorio
Si no ingresamos un password lo suficientemente seguro nos aparecer estemensaje para asignarnos un password aleatorio. Si deseamos conservar
te presionaremos No.nuestro password ingresado anteriormen
Figura 107. Cuenta del superusuario
In mos otro password para el super-usuario del sistema de base dgresa etos (por razones de seguridad, se recomienda no utilizar el password
rior).daante
Oscar E Capuay Uceda 154
7/23/2019 Php Capitulos567[1]
44/145
Acceso a Datos con PHP
Figura 108. Habilitar lenguaje procedural
rocedural y presionamos Next para luegoSeleccionamos el lenguaje pseleccionar los mdulos adicionales que podemos instalar.
Figura 109. El asistente est listo para iniciar la instalacin
esta todo listo para la instalacin.Ahora ya
Oscar E Capuay Uceda 155
7/23/2019 Php Capitulos567[1]
45/145
Acceso a Datos con PHP
Figura 110. Instalando PostgreSQL
Figura 111. Instalacin completa
Finalmente nos aparecer esta ventana que nos indica el final de lak y
s el
instalacin. Si no queremos correr el Stack Builder quitamos el chec
presionamos Finish.Una vez instalado vamos al men Inicio Programas y seleccionamomen de PostgreSQL. En este men abrimos PgAdmin III.
Oscar E Capuay Uceda 156
7/23/2019 Php Capitulos567[1]
46/145
Acceso a Datos con PHP
Figura 112. pgAdmin III
Si hacemos doble click sobre el servidor PostgreSQL Database Server 8.3aparecer la siguie
nte ventana para logearnos.
Figura 113. Conexin al servidor desde pgAdmin III
Oscar E Capuay Uceda 157
7/23/2019 Php Capitulos567[1]
47/145
Acceso a Datos con PHP
Creando una base de datos PostgreSQL en pgAdmin III
atos.trar nuestras bases de dAl ingresar a pgAdmin ya podemos adminis
Figura 114. Listado de elementos del servidor
s una base de datos.Creamo
Figura 115. Creando una base de datos
Ingresamos los datos de la nueva base de datos (dbdemo).
Oscar E Capuay Uceda 158
7/23/2019 Php Capitulos567[1]
48/145
Acceso a Datos con PHP
Figura 116.
Datos de la nueva base de datos
otn derecho delLuego creamos la tabla persona, haciendo click con el bmouse y seleccionando New table
Figura 117. Creando una nueva tabl
a
Oscar E Capuay Uceda 159
7/23/2019 Php Capitulos567[1]
49/145
Acceso a Datos con PHP
Figura 118. Propiedades de la tabla
Especificamos los datos de la tabla y luego los campos. Cuando el tipo dedato es autoincrementable seleccionamos el tipo serial.
Figura 119. Propiedades de una nueva columna
Oscar E Capuay Uceda 160
7/23/2019 Php Capitulos567[1]
50/145
Acceso a Datos con PHP
Figura 120. Columna nombres de la tabla persona
Luego especificamos la clave primaria de la clave
Figura 121. Clave primaria de la tabla persona
Luego de especificar el nombre del constraint seleccionamos los campos dela clave primaria.
Oscar E Capuay Uceda 161
7/23/2019 Php Capitulos567[1]
51/145
Acceso a Datos con PHP
Figura 122. Columnas pertenecientes a la clave primaria
Finalmente registramos el constraint y luego podemos ver el script de laabla.t
Figura 123. Script SQL generado para la creacin de la tabla
Oscar E Capuay Uceda 162
7/23/2019 Php Capitulos567[1]
52/145
7/23/2019 Php Capitulos567[1]
53/145
Acceso a Datos con PHP
Figura 126. Vista de datos de la tabla
s doble click sobre la primera fila e ingresamos luego los datos.Hacemo
Figura 127. Editando datos en la tabla
remos la creacin de la base de datos con otra herramienta.Ahora ve
Oscar E Capuay Uceda 164
7/23/2019 Php Capitulos567[1]
54/145
Acceso a Datos con PHP
Creando una base de datos PostgreSQL en phpPgAdminEl primer paso es crear una base de datos utilizando phpPgAdmin una
estras bases de datosaplicacin Web que nos permite administrar nures.Postg
Escribiremos la siguiente direccin: http://localhost/phppgadmin/
Figura 128. Interfaz de phpPgAdmin
Ingresamos el usuario y password para tener acceso a las bases de datos.
Figura 129. Logeo de usuarios al servidor PostgreSQL
Una vez ingresados los datos presionamos el botn Autenticar paraingresar.
Oscar E Capuay Uceda 165
7/23/2019 Php Capitulos567[1]
55/145
Acceso a Datos con PHP
Figura 130. Interfaz de ingreso a phpPgAdmin
Ahora crearemos una base de datos PostgreSQL, haciendo clic en elhipervnculo: Crear base de datos.
Figura 131. Creando una nueva base de datos
Ahora nuestra base de datos dbdemo aparece en el margen izquierdo de laaplicacin Web.
Oscar E Capuay Uceda 166
7/23/2019 Php Capitulos567[1]
56/145
Acceso a Datos con PHP
Figura 132. Base de datos dbdemo creada
Seleccionamos la base de datos para crear la tabla persona.
Figura 133. Men de elementos de la base de datos
Figura 134. creando la tabla persona
Ingresamos el nombre de la tabla y especificamos la cantidad de camposque vamos a crear y luego presionamos Prximo.
Oscar E Capuay Uceda 167
7/23/2019 Php Capitulos567[1]
57/145
Acceso a Datos con PHP
Figura 135. Ingresando los campos de la tabla
Al igual que en MySQL seleccionamos autoincrement para la clave primariade la tabla (el valor del campo se auto-incrementa en cada nuevo registroinsertado), en este caso indicaremos lo mismo a travs de SERIAL.
Figura 136. Autoincremento para la clave primaria
Figura 137. Estructura de la tabla
Haciendo clic en el hipervnculo Insertar, agregaremos registros a la tabla.
Oscar E Capuay Uceda 168
7/23/2019 Php Capitulos567[1]
58/145
Acceso a Datos con PHP
Figura 138. Formulario de ingreso de nuevos registros
Figura 139. Listado de registros
Para conectarnos a PostgreSQL desde PHP debemos aseguarrnos que las
libreras de PHP para PostgreSQL estn disponibles, para ello vamos amen de WAMP y listamos las extensiones de PHP.
Oscar E Capuay Uceda 169
7/23/2019 Php Capitulos567[1]
59/145
Acceso a Datos con PHP
Figura 140. Activando la extensin php_pgsql
Una vez verificado procedemos a programar la pgina de conexin:
Acceso a PostgreSQL desde PHP
Ejemplo 71: Conexin a PostgreSQL
pagina22.php
pagina23.php
La funcin pg_last_error() muestra el ltimo error ocurrido en la conexinactiva, la cual es el parmetro.
Oscar E Capuay Uceda 170
7/23/2019 Php Capitulos567[1]
60/145
Acceso a Datos con PHP
Resultado Web:
Figura 141. Resultado de pagina23.php
Ejemplo 72: Listado de registros en una tabla HTML.
pagina24.php
IdNombresApellidosEditarEliminar
7/23/2019 Php Capitulos567[1]
61/145
Acceso a Datos con PHP
// Cerrar conexionpg_close($conex);?>
Agregar Registro
Resultado Web:
Figura 142. Resultado de pagina24.php
Ejemplo 73: Insercin de registro en PostgreSQL.
formulario06.html
Nuevo registro
Nuevo Registro
Nombres
Apellidos
Oscar E Capuay Uceda 172
7/23/2019 Php Capitulos567[1]
62/145
Acceso a Datos con PHP
Telfono
El destino de los datos de este formulario es: pagina25.php.
Resultado Web:
Figura 143. Resultado de formulario06.html
pagina25.php
7/23/2019 Php Capitulos567[1]
63/145
Acceso a Datos con PHP
Resultado Web:
Figura 144. Resultado de pagina25.php
Ejemplo 74: Edicin de registro en PostgreSQL.
pagina26.php
7/23/2019 Php Capitulos567[1]
64/145
Acceso a Datos con PHP
Telfono
7/23/2019 Php Capitulos567[1]
65/145
Acceso a Datos con PHP
Figura 146. Resultado de pagina27.php
Ejemplo 75: Eliminacin de registro en PostgreSQL.
pagina28.php
7/23/2019 Php Capitulos567[1]
66/145
Acceso a Datos con PHP
Acceso a MS SQL-Server desde PHPAhora es el turno de MS SQLServer, para crear una base de datos vamos aabrir el Administrador Corporativo y luego crearemos una base de datosamada dbdemo.ll
Figura 148. Creando un nueva base de datos
Figura 149. Nombre de la nueva base de datos
Oscar E Capuay Uceda 177
7/23/2019 Php Capitulos567[1]
67/145
Acceso a Datos con PHP
Luego creamos la tabla persona.
Figura 150. Creando una nueva tabla
Figura 151. Especificacin de los campos de la tabla
Verificamos si la librera para MS-SQLServer est disponible.
Oscar E Capuay Uceda 178
7/23/2019 Php Capitulos567[1]
68/145
Acceso a Datos con PHP
Figura 152. Activando la extensin php_mssql
Luego ingresamos algunos registros para probar los scripts.
Figura 153. Creando un usuario para acceso a la base de datos
Creamos un usuario para el acceso a la base de datos que hemos creado yestablecemos los permisos.
Oscar E Capuay Uceda 179
7/23/2019 Php Capitulos567[1]
69/145
Acceso a Datos con PHP
Figura 154. Establecimiento de los permisos del usuario
Ejemplo 76: Conexin a MS-SQLServer
pagina29.php
7/23/2019 Php Capitulos567[1]
70/145
Acceso a Datos con PHP
Figura 155. Resultado de pagina30.php
Ejemplo 77: Listado de registros
pagina31.php
IdNombres
ApellidosEditarEliminar
7/23/2019 Php Capitulos567[1]
71/145
Acceso a Datos con PHP
Agregar Registro
Ejemplo 78: Insercin de registro en MS-SQLServer
formulario07.html
Nuevo registro
Nuevo Registro
Nombres
Apellidos
Telfono
Oscar E Capuay Uceda 182
7/23/2019 Php Capitulos567[1]
72/145
Acceso a Datos con PHP
pagina32.php
7/23/2019 Php Capitulos567[1]
73/145
Acceso a Datos con PHP
Ejemplo 79: Edicin de registro en MS-SQLServer
pagina33.php
7/23/2019 Php Capitulos567[1]
74/145
Acceso a Datos con PHP
Resultado Web:
Figura 157. Resultado de pagina33.php
pagina34.php
7/23/2019 Php Capitulos567[1]
75/145
Acceso a Datos con PHP
mssql_query($sql) or die("Error al eliminar el registro");echo
"La persona fue eliminada exitosamente
";echo "Listado de Personas";?>
Resultado Web:
Figura 159. Resultado de pagina35.php
Oscar E Capuay Uceda 186
7/23/2019 Php Capitulos567[1]
76/145
PHP Orientado a Objetos
VI. PHP Orientado a Objetos
Clases en PHP
Cada definicin de clase empieza con la palabra "class", seguida por unnombre de clase, el cual puede ser cualquier nombre que no est en la listade palabras reservadas en PHP. [3]
Ejemplo 81: Definicin de una clase
pagina19.php
Instancia de un ObjetoPara crear una instancia de un objeto, un nuevo objeto debe ser creado yasignado a una variable. Un objeto siempre ser asignado cuando se creaun objeto nuevo a menos que el objeto tenga un constructor definido quearroje una excepcin en caso de error. Las clases deben ser definidas antesde crear las instancias (y en algunos casos esto es un requerido).
Cuando se asigna una instancia de un objeto previamente creado a unanueva variable, la nueva variable accesar a la misma instancia que la delobjeto a la que fue asignada. Este comportamiento es el mismo cuando sepasan instancias a una funcin. Una nueva instancia de un objeto
previamente creado puede ser hecha clonndolo. [3]
Ejemplo 82: Creando una instancia
pagina20.php
7/23/2019 Php Capitulos567[1]
77/145
PHP Orientado a Objetos
$instancia->variable = '$asignado tendr este valor';$instancia = null; // $instancia y $referencia sern nulosvar_dump($instancia);var_dump($referencia);var_dump($asignado);
?>Resultado Web
Figura 160. Resultado de pagina20.php
Extendiendo objetosUna clase puede heredar mtodos y miembros de otra clase usando lapalabra 'extends' en la declaracin. No es posible extender de mltiplesclases, una clase puede heredar solo de una clase base.
Los mtodos heredados y sus miembros pueden ser evitados,redeclarndolos con el mismo nombre con el que los defini la clase padre, a
menos que la clase padre haya definido un mtodo como final. Es posibleaccesar a los mtodos o miembros redeclarados haciendo referencia a elloscon parent::
Ejemplo 83: Herencia simple de una Clase
pagina21.php
Oscar E Capuay Uceda 188
7/23/2019 Php Capitulos567[1]
78/145
PHP Orientado a Objetos
Resultado Web
Figura 161. Resultado de pagina21.php
Auto carga de ObjetosCuando se escriben aplicaciones con programacin orientada a objetoscrean un archivo fuente PHP por cada definicin de clase. Una de lasmolestias ms grandes es tener que escribir una larga lista de includesnecesarios al principio de cada script (uno para cada clase).
En PHP 5, esto ya no es necesario. Puede definir una funcin __autoload lacual es llamada automticamente en caso de que intente usar una clase queno ha sido definida an. Al llamar esta funcin la ejecucin del script da unaltima oportunidad de cargar la clase antes de que PHP falle con un error.
Nota: Las excepciones arrojadas en la funcin __autoload no pueden sercapturadas en el bloque catch y resultan en el despliegue de un error fatal.
Nota: La autocarga no esta disponible en PHP si se usa el modo interactivoCLI.
En el siguiente ejemplo se intenta cargar las clases clase1 y clase2 de losarchivos clase1.php y clase2.php respectivamente utilizando la funcin__autoload para despus ejecutar los mtodos de cada clase.
Ejemplo 84: Auto carga
clase1.php
Oscar E Capuay Uceda 189
7/23/2019 Php Capitulos567[1]
79/145
PHP Orientado a Objetos
clase2.php
autocarga.php
Resultado Web:
Figura 162. Resultado de autocarga.php
Oscar E Capuay Uceda 190
7/23/2019 Php Capitulos567[1]
80/145
PHP Orientado a Objetos
Acceso a MySQL con PHP Orientado a Objetos
PHP 5.x viene con una extensin mejorada para trabajar con la funcionalidadprovista por MySQL 4.1 y superior.
Veamos a continuacin una breve referencia es clases y mtodos.
Clases predefin idas
mysqliRepresenta una conexin entres PHP y la base de datos MySQL.
Constructor
mysqli - constructor de un nuevo objeto mysqli
Mtodosautocommit - cambia en ON u OFF las modificaciones de auto-commiting enla base de datos.
change_user - cambia el usuario del identificador de enlace especificado.
character_set_name - regresa el conjunto de caracteres del identificador deenlace especificado.
close - cierra una conexin previamente abierta.
commit - completa la transaccin actual.
connect - abre una nueva conexin al servidor de MySQL.
debug - realiza operaciones de rastreo.
dump_debug_info - vaca informacin de rastreo.
get_client_info - retorna la versin del cliente.
get_host_info - retorna el tipo de conexin usada.
get_server_info - retorna la versin del servidor MySQL.
get_server_version - retorna la versin del servidor MySQL
init - inicializa el objeto mysqli.
info - obtiene informacin acerca de la consulta ms recientementeejecutada.
kill - solicita al servidor destruir un thread de mysql.
Oscar E Capuay Uceda 191
7/23/2019 Php Capitulos567[1]
81/145
PHP Orientado a Objetos
multi_query - realiza consultas de SQL mltiples.
more_results - verifica si existen mas resultados de la consulta mltipleactualmente ejecutada.
next_result - lee el siguiente resultado de la consulta mltiple actualmenteejecutada.
options - fija opciones extra en la conexin.
ping - llama una conexin con el servidor o reconecta si no hay conexin.
prepare - prepara una sentencia SQL.
query - ejecuta una sentencia SQL.
real_connect - intenta abrir una conexin al servidor de base de datosMySQL.
escape_string - caracteres especiales de escape para ser usados en unasentencia SQL, tomando en cuenta el conjunto de caracteres actual de laconexin.
rollback - deshace la transaccin actual.
select_db - selecciona la base de datos por defecto.
ssl_set - fija los parmetros SSL.
stat - obtiene el estado actual del sistema.
stmt_init - inicializa una sentencia para ser usada con mysqli_stmt_prepare.
store_result - transfiere un resultado de la ltima consulta.
use_result - transfiere un resultado sin almacenamiento intermedio de laltima consulta.
thread_safe - retorna si se ha dado thread_safety o no.
Propiedadesaffected_rows - obtiene el nmero de filas afectadas en la operacin MySQLprevia.
client_info - retorna en una cadena la versin del cliente de MySQL.
client_version - retorna en un entero la versin del cliente de MySQL.
errno - retorna el cdigo de error para la llamada a funcin ms reciente.
Oscar E Capuay Uceda 192
7/23/2019 Php Capitulos567[1]
82/145
PHP Orientado a Objetos
error - retorna la cadena de error para la llamada a funcin ms reciente.
field_count - retorna el nmero de columnas para la consulta ms reciente.
host_info - retorna la cadena representando el tipo de conexin usado.
info - retorna informacin acerca de la consulta ejecutada msrecientemente.
insert_id - retorna el identificador generado automticamente usado en laltima consulta.
protocol_version - retorna la versin del protocolo usado por MySQL.
sqlstate - retorna una cadena que contiene el cdigo de error SQLSTATEpara el ltimo error.
thread_id - retorna el identificador del THREAD para la conexin actual.
warning_count - retorna el nmero de alertas generadas durante la ejecucindel enunciado SQL previo.
mysqli_stmtRepresenta una sentencia preparada.
Mtodosbind_param - enlaza variables a una sentencia preparada.
bind_result - enlaza variables a una sentencia preparada para elalmacenamiento del resultado.
close - cierra la sentencia preparada.
data_seek - busca a una fila arbitrariamente en el resultado.
execute - ejecuta una sentencia preparada.
fetch - obtiene el resultado de la sentencia preparada en variables lmite.
free_result - libera la memoria del resultado almacenado para el manejadorde la sentencia dada.
result_metadata - obtiene un resultado de la sentencia preparada parainformacin de metadatos.
prepare - prepara una consulta SQL.
send_long_data - enva datos en partes.reset - resetea una sentencia preparada.
Oscar E Capuay Uceda 193
7/23/2019 Php Capitulos567[1]
83/145
PHP Orientado a Objetos
store_result - almacena el resultado completo de la sentencia preparada.
Propiedades
affected_rows - retorna las filas afectadas de la ltima sentencia ejecutada.errno - retorna el cdigo de error para la llamada a funcin ms reciente.
error - retorna el mensaje de error para la llamada a funcin ms reciente.
param_count - retorna el numero de parmetros para la sentencia preparadadada.
sqlstate - retorna una cadena conteniendo el cdigo de error SQLSTATEpara la llamada a funcin ms reciente.
mysqli_resultRepresenta el resultado obtenido de la consulta hecha en la base de datos.
Mtodosclose - cierra el resultado.
data_seek - mueve el puntero interno del resultado.
fetch_field - obtiene la informacin de la columna en el resultado.
fetch_fields - obtiene la informacin para todas las columnas del resultado.
fetch_field_direct - obtiene informacin de la columna para la columna dada.
fetch_array - recupera una fila como una matriz asociativa, una matriznumrica, o ambos.
fetch_assoc - obtiene una fuka como una matriz asociativa.
fetch_object - obtiene una fila como un objeto.
fetch_row - obtiene una fila como una matriz enumerada.
close - libera la memoria ocupada por el resultado.
field_seek - fija el apuntador del resultado a la posicin especificada.
Propiedadescurrent_field - retorna la posicin de puntero actual.
field_count - retorna el nmero de campos en el resultado.
Oscar E Capuay Uceda 194
7/23/2019 Php Capitulos567[1]
84/145
PHP Orientado a Objetos
lengths - retorna una matriz con la longitud de los campos.
num_rows - retorna el nmero de filas en el resultado.
Nos conectaremos a la base de datos dbdemo y administraremos la tablapersona.
Ejemplo 85: Conexin a MySQL con mysqli
mysqli-connect.php
Resultado Web:
Figura 163. Resultado de mysqli-connect.php
Modificaremos el archivo anterior para utilizarlo en las conexiones de lasprximas pginas.
mysqli-conexion.php
7/23/2019 Php Capitulos567[1]
85/145
7/23/2019 Php Capitulos567[1]
86/145
PHP Orientado a Objetos
EditarEliminar
7/23/2019 Php Capitulos567[1]
87/145
PHP Orientado a Objetos
Nuevo registro
Nuevo Registro
Nombres
Apellidos
Telfono
Resultado Web:
Figura 166. Resultado de formulario08.htm
Oscar E Capuay Uceda 198
7/23/2019 Php Capitulos567[1]
88/145
PHP Orientado a Objetos
mysqli-insertar.php
7/23/2019 Php Capitulos567[1]
89/145
PHP Orientado a Objetos
7/23/2019 Php Capitulos567[1]
90/145
PHP Orientado a Objetos
mysqli-actualizar.php
7/23/2019 Php Capitulos567[1]
91/145
PHP Orientado a Objetos
Paginando resultados
Ejemplo 90: Paginacin de resultados
mysqli-listado-paginacion.php
IdNombresApellidosEditarEliminar
7/23/2019 Php Capitulos567[1]
92/145
PHP Orientado a Objetos
Pgina:
7/23/2019 Php Capitulos567[1]
93/145
PHP Orientado a Objetos
$sql=$sql ." limit $inicio,$regxpag";
Hallamos el nmero de pginas. La funcin ceil redondea fracciones haciaarriba.$numpag=ceil($numreg/$regxpag);
Ejecutamos la consulta SQL para obtener los registros de la pginaseleccionada.$rspersona=$mysqli->query($sql) or die($mysqli->error);
Imprimir la cantidad de registros total.echo "Registros encontrados:" . $numreg;
En la parte inferior de la pgina web aparecen las pginas de resultados.A travs de un bucle creamos los hipervnculos para visualizar las pginas.
7/23/2019 Php Capitulos567[1]
94/145
PHP Orientado a Objetos
Arquitectura MVC
Todos los que estamos inmersos en el mundo de la programacin sabemosque en todo programa los datos que se procesan pueden ser ingresados y
mostrados en formas diferentes dependiendo del tipo y diseo de la interfaz,y sobre todo en el desarrollo Web esto se ve aun ms acentuado debido aque los desarrolladores Web muchas veces son muy buenos programandopero no diseando interfaces, por lo general las empresas de este rubrooptan por utilizar dos equipos de trabajo: los codificadores quienes seencargan de implementar los algoritmos y los diseadores para darle unbuena presentacin a la aplicacin, pero las dificultades inician cuandoalguna parte del cdigo que un equipo hace influye sobre el diseo querealiza el otro equipo. Para dar solucin a este tipo de problemas hansurgido arquitecturas de desarrollo que nos permiten desarrollar aplicacionesseparando la lgica del diseo de la interfaz, una de ellas es la ArquitecturaMVC (Modelo Vista Controlador).
MVC con PHPLo que se muestra a continuacin es un artculo muy interesante extrado dehttp://www.phpizza.com/es/ en el que se explica de una forma fcil y sencillael uso de MVC con PHP.
Esta arquitectura va ms all de esa divisin abstracta en dos capas eimplementa 3 partes:
Figura 172. MVCFuente: http://www.phpizza.com
En el esquema de arriba las flechas oscuras significan una interaccin
directa y las claras la indirecta. Esto bsicamente quiere decir que las verdesson las respuestas a las azules.
Oscar E Capuay Uceda 205
7/23/2019 Php Capitulos567[1]
95/145
PHP Orientado a Objetos
La capa de Presentacin se divide en dos componentes: Controlador y laVista. La capa de Datos tiene un componente: el Modelo.
Controlador
Algunos al hablar de Controlador se referirn a su acometido bajo losnombres de Lgica de Negocio o Lgica Empresarial.
Lo de la lgica de negocio probablemente venga de los tiempos en los quelos programas sobre todo hacan cosas relacionadas con informes contables.
Como su propio nombre indica el Controlador controla lo que sucede a partirde que se haya producido una interaccin por parte del usuario sobre laVista.
La Vista le comunica los eventos al Controlador. El Controlador usa elModelo para conseguir los datos o almacenarlos y por fin, el Controladorvuelve a usar la Vista para comunicar al usuario que resultado provoc suaccin.
Modelo
El acometido de esta parte llamada Modelo es el Acceso A Datos. Al hablarde Datos uno piensa en una Base de Datos o un Sistema de Gestin deBases de Datos (SGBD): MySQL, PostgreSQL, Oracle etc.
En realidad el Modelo encapsula la Capa de Acceso a Datos de tal formaque se supone que nos podemos olvidar de que tipo de SGBD estamosusando.El Modelo, en realidad, es el objeto en s.
Vista
La tercera parte es la Vista. Es en realidad la Capa de Presentacin. Sirvepara que el usuario pueda interactuar a travs de los eventos con elControlador y tambin para que pueda ver los resultados. Estos resultadossern aportados por el Controlador a travs del Modelo.
Esta es la diferencia con la simple programacin por capas (tambin llamadaescalonada o multi-escalonada) y sin conocerla se suelen confundir lostrminos.
Oscar E Capuay Uceda 206
7/23/2019 Php Capitulos567[1]
96/145
PHP Orientado a Objetos
Figura 173. Tres capasFuente: http://www.phpizza.com
En una arquitectura de separacin por capas que es una manera de llevara cabo la separacin abstracta de 2 capas la Capa de Acceso a Datosnunca interfiere directamente con la Vista. Lo hace siempre a travs delControlador. El Controlador interpreta los eventos que le llegan de la Vista,
usa los objetos o funciones de la Capa de Acceso A Datos y enva datos a laVista. Pero la Vista no ejecuta los mtodos de los objetos. En MVC, sinembargo, la Vista s puede mostrar datos a travs de los mtodos de unobjeto que el Controlador le ha pasado.[5]
MVC Web
Traducido al mundo de la programacin Web paso por paso:
1. el Controlador recibe una peticin. Esto puede ocurrir de formadirecta poniendo el usuario en el navegador la URL del Controlador
http://localhost/controlador.php, o mediante un evento a travs deuna Vista ya renderizada (envo de un formulario por ejemplo), o poruna peticin ajax.
2. el Controlador analiza la peticin y usa un Modelo para obtenerdatos de algn tipo.
3. el Modelo puede leer datos y/o escribirlos en una base de datos.Normalmente sucede esto, aunque no siempre.
4. el Controlador usa una Vista para poder presentar los resultados alusuario.
Oscar E Capuay Uceda 207
7/23/2019 Php Capitulos567[1]
97/145
PHP Orientado a Objetos
5. la Vista usa el Modelo, de tal forma, que algn tipo de respuestaobtenido por la accin previa ser presentado en la Vista.
6. la Vista est renderizada con los datos del Modelo y el Controladorenva esta respuesta al usuario.
7. El usuario obtiene la respuesta
El Modelo Vista Controlador no es una cosa reciente. Lo inventaron en losaos 70 al empezar a hacer aplicaciones medianamente grandes quemanejaban muchos datos. Es el llamado Modelo* 2 en la jerga Sun.
*Aqu la palabra Modelo no tiene que ver con el Modelo de Modelo VistaControlador sino con el nombre de la arquitectura.
Hablando de la interaccin entre el Modelo y la Vista - en Java tambin es
posible implementar un componente llamado Observador que despus deconstatar algn cambio en el Modelo, puede realizar ciertas operaciones. Porejemplo: el usuario confirma la compra en una tienda on-line y el Observerimplementado ve que hay un cambio en el Modelo (en la propia base dedatos) y manda un email de confirmacin o actualiza la Vista.
Pero los Observadores no se implementan en PHP porque este lenguaje seejecuta de manera distinta a como se ejecutan los procesos de Java.Normalmente al tener un tiempo limitado de ejecucin los procesos PHP nohacen de observadores.
Sinceramente - hacer una aplicacin usando la arquitectura MVC te costarms trabajo que si haces pginas monolticas, mezclndolo todo - el php y elhtml en lo que se llama popularmente el cdigo spaghetti.
El MVC supone ms trabajo:
Primero tendrs que definir los Modelos y convertirlos en Objetos de talmanera que sus atributos y mtodos sean el conjunto de propiedades yacciones verdaderamente necesarias y representativas. Tendrs queplanificar las Vistas por separado y trabajar los Controladores. Al principio dela implementacin te ser ms rpido hacer pginas monolticas
Por qu usarlo entonces?Pues, cuando quieras cambiar tu aplicacin para aadir, quitar o cambiaralguna funcionalidad - la vida te resultar muy dura. Un proyectomedianamente grande se convertir en un infierno en muy poco tiemposobre todo cuando quieras cambiar algo y ello afecte al funcionamiento dems de una de tus pginas.
El MVC bsicamente te permitir poder cambiar las Capas de presentacinsin que afecten a la de acceso de datos y viceversa.
Hay gente que te dir que el PHP fue concebido como algo sencillo yprctico. Como un lenguaje que permite hacer pginas Web dinmicas y
Oscar E Capuay Uceda 208
7/23/2019 Php Capitulos567[1]
98/145
PHP Orientado a Objetos
procesar formularios de una manera simple. Que complicar las cosas msall de eso es impropio de este lenguaje.
Y les doy la razn. Claro! El asunto es que ese primer PHP no tena muchoque ver con el PHP5 actual. No haba objetos por ejemplo.
Hay pequeas diferencias en como implementan el MVC distintosframeworks, pero los fundamentos son los mismos.
Tambin puedes usar motores de plantillas como por ejemplo Smarty paraimplementar el MVC, pero en realidad no necesitas nada ms que el PHPpuro.
Ejemplo 91: MODELO MVC con PHP
_modelo.php
Ejemplo 92: Una plantilla usada por el modelo
_listar.php
Oscar E Capuay Uceda 209
7/23/2019 Php Capitulos567[1]
99/145
PHP Orientado a Objetos
Ejemplo 93: CONTROLADOR MVC con PHP
_controlador.php
Ejemplo 94: VISTA MVC con PHP
_vista.php
El punto clave en una Vista como la de este ejemplo es que no usesinstrucciones PHP ms all de las que muestren datos. Por qu? Pues si lalgica de tu aplicacin se est decidiendo en la Vista entonces para ququeremos el Controlador? ;) Simplificando mucho el concepto eso quiere
decir que uses echo y metodos de tus objetos (Modelo) que hagan echo dealguna forma aunque tu los llames show o muestra_datos o lo que tquieras.
El inventor y gur del PHP Rasmus Lerdorf, public hace algn tiempo, enfebrero del ao 2006 un bastante mal entendido artculo, titulado The noframework PHP MVC framework
Aqu, Rasmus nos habla sobre como implementar un sencillo MVC usandosolo PHP puro. Bueno, estoy de acuerdo hasta un cierto punto con esteartculo y es que implementar el MVC sin usar un framework que vaya msall de nuestras necesidades nos va a beneficiar en cuanto a la memoria queusa cada script PHP. Ms tarde hablaremos sobre la optimizacin. Algunos
Oscar E Capuay Uceda 210
7/23/2019 Php Capitulos567[1]
100/145
PHP Orientado a Objetos
han interpretado que Rasmus en este artculo defenda la programacinprocedural en contra de la Orientada a Objetos. El mismo dice que no es as-que poda haber hecho todo el ejemplo usando ms objetos y estoy deacuerdo.
Pero si observas detenidamente la parte titulada View add.html que es elejemplo de Vista que nos pone su autor, te dars cuenta que la Vista hace alprincipio una inclusin del Controlador:
include './ui.inc'; // Common View Helper functions
include './add_c.inc'; // Controller
head();
Vale, pues eso no es MVC aunque lo diga mi admirado Rasmus. Es un
framework con divisin de capas en tres partes pero no es MVC. La Vista nodebe ser la que controla la aparicin de un Controlador sino todo lo contrario:el Controlador usa las Vistas.
Oscar E Capuay Uceda 211
7/23/2019 Php Capitulos567[1]
101/145
PHP Orientado a Objetos
MVC y PHP con acceso a Base de Datos
Tomando como gua el artculo anterior desarrollaremos un listado de losregistros de la tabla persona creada en la seccin anterior.
Ejemplo 95: modelo_bd.php
7/23/2019 Php Capitulos567[1]
102/145
PHP Orientado a Objetos
public function CargarDatos($sentencia){
$objBase = new BaseDatos();$objBase->conectar();$objBase->consultar($sentencia);
$this->recset=$objBase->rs;}
} //fin clase
?>
Ejemplo 96: lista_bd.php
Ejemplo 97: vista_bd.php
Ejemplo 98: controlador_bd.php
7/23/2019 Php Capitulos567[1]
103/145
PHP Orientado a Objetos
$titulo = "Lista de personas";
$objData->CargarDatos($sql);
include ("vista_bd.php");?>
Para ver el resultado abrimos en navegador el archivo controlador_bd.php.
Figura 174. Resultado de controlador_bd.php
Oscar E Capuay Uceda 214
7/23/2019 Php Capitulos567[1]
104/145
PHP Orientado a Objetos
PDO PHP Data ObjectPHP Data Objects (PDO) es una extensin de PHP que utilice controladorespara acceder a datos de motores de bases de datos diversos como: MySQL,PostgreSQL, Microsoft SQL Server, Oracle, mSQL, etc.
PDO provee una capa de abstraccin de datos, con la cual, la codificacindepende menos de la base de datos que estemos utilizando, debido a quelos mtodos tienen el mismo nombre para todas las bases de datos quesoporta, es decir, ya no tendremos que escribir mysql_query para ejecutaruna sentencia SQL en MySQL y cuando migremos a PostgreSQL tengamosque cambiarla a pg_query.
PDO esta disponible desde PHP 5.1, y requiere las nuevas caractersticas deprogramacin orientada a objetos que viene desde PHP 5, por lo que nocorre en versiones anteriores.
Los siguientes controladores estn disponibles actualmente:
Tabla 20. Controladores PDOControlador Base de Datos
PDO_DBLIB FreeTDS / Microsoft SQL Server / Sybase
PDO_FIREBIRD Firebird/Interbase 6
PDO_IBM IBM DB2
PDO_INFORMIX IBM Informix Dynamic Server
PDO_MYSQL MySQL 3.x/4.x/5.x
PDO_OCI Oracle Call Interface
PDO_ODBC ODBC v3 (IBM DB2, unixODBC and win32 ODBC)
PDO_PGSQL PostgreSQL
PDO_SQLITE SQLite 3 and SQLite 2
Clases predefinidas
PDORepresenta una conexin entre PHP y un servidor de base de datos.
ConstructorPDO - construye un nuevo objeto PDO
MtodosbeginTransaction inicia una transaccin.
commit - efecta la transaccin.
Oscar E Capuay Uceda 215
7/23/2019 Php Capitulos567[1]
105/145
PHP Orientado a Objetos
errorCode retorna un cdigo de error, si ocurre alguno en la base de datos.
errorInfo retorna un arreglo de informacin del error, si ocurre alguno en labase de datos.
exec ejecuta una sentencia SQL y retorna el nmero de registrosafectados.
getAttribute retorna los atributos de una conexin.
lastInsertId retorna el valor del ID del ultimo registro que fue insertado en latabla.
prepare - prepara una sentencia SQL para su ejecucin.
query ejecuta una sentencia SQL y retorna un conjunto de registros.
quote retorna una cadena de texto con comillas para su uso en sentenciasSQL. Recomendada para evitar inyeccin SQL.
rollBack - Deshace una transaccin
setAttribute establece un atributo para la conexin a una base de datos.
PDOStatementRepresenta una sentencia preparada, luego que la sentencia es ejecutada,un conjunto de registros.
MtodosbindColumn - relaciona variable a una columna de salida en un conjunto deregistros.
bindParam - relaciona una variable PHP a un parmetro en la sentenciapreparada.
bindValue - binds un valor a un parmetro en la sentencia preparada.
closeCursor - cierra el cursor, permitiendo ejecutar nuevamente la sentencia.
columnCount - retorna el nmero de columnas del conjunto de registros.
errorCode - retorna un cdigo de error, si lo hay, de la sentencia.
errorInfo - retorna un arreglo de informacin de un error, si lo hay, de lasentencia.
execute ejecuta la sentencia preparada.
fetch lee un registro de un conjunto de registros.
Oscar E Capuay Uceda 216
7/23/2019 Php Capitulos567[1]
106/145
7/23/2019 Php Capitulos567[1]
107/145
PHP Orientado a Objetos
Conexiones con PDO
Para establecer una conexin a una base de datos debemos instanciar laclase PDO e indicar primero el nombre del motor de base de datos al cual
nos conectaremos, seguido del nombre del servidor, nombre de la base dedatos, usuario y finalmente la contrasea. En el siguiente podemos observaruna conexin a MySQL y las siguientes lneas que estn comentadas seconectan a Microsoft SQL Server y a PostgreSQL respectivamente.
Ejemplo 99: Conexin a MySQL con PDO
pdo-connect.php
Ahora veremos una lista simple obtenida de la tabla persona.
Ejemplo 100: Lista de personas con PDO y manejo de errores
pdo-lista.php
Oscar E Capuay Uceda 218
7/23/2019 Php Capitulos567[1]
108/145
PHP Orientado a Objetos
Resultado Web
Figura 175. Resultado de pdo-lista.php
Ejemplo 101: Listado de registros con PDO, con eliminacin mltiple
pdo-listado.php
EliminarIdNombresApellidosEditar
7/23/2019 Php Capitulos567[1]
109/145
PHP Orientado a Objetos
}$rspersona->closeCursor(); //cerramos resultado de la consulta$conn=null; //cerramos la conexin?>
Resultado Web
Figura 176. Resultado de pdo-listado.php
Ejemplo 102: Insercin de registros con PDO
pdo-nuevo.php
Nuevo registro
Nuevo Registro
Nombres
Oscar E Capuay Uceda 220
7/23/2019 Php Capitulos567[1]
110/145
7/23/2019 Php Capitulos567[1]
111/145
PHP Orientado a Objetos
$sentencia->bindParam(':nombres', $_POST[nombres]);$sentencia->bindParam(':apellidos', $_POST[apellidos]);$sentencia->bindParam(':email', $_POST[email]);$sentencia->bindParam(':telefono', $_POST[telefono]);
$sentencia->execute();$conn = null;header("location: pdo-listado.php");
} catch (PDOException $e) {print "Error!: " .
$e->getMessage() . "
";die();
}?>
Ejemplo 103: Eliminacin mltiple de registros con PDO
pdo-eliminar.php
Ejemplo 104: Edicin de registros con PDO.
pdo-editar.php
Edicin de registro
Oscar E Capuay Uceda 222
7/23/2019 Php Capitulos567[1]
112/145
PHP Orientado a Objetos
7/23/2019 Php Capitulos567[1]
113/145
PHP Orientado a Objetos
$sentencia = $conn->prepare("UPDATE persona SET nombres=:nombres,apellidos=:apellidos, email=:email, telefono=:telefono whereidpersona=:idpersona");
$sentencia->bindParam(':idpersona', $_POST[idpersona]);
$sentencia->bindParam(':nombres', $_POST[nombres]);$sentencia->bindParam(':apellidos', $_POST[apellidos]);$sentencia->bindParam(':email', $_POST[email]);$sentencia->bindParam(':telefono', $_POST[telefono]);
$sentencia->execute();
$conn = null;header("location: pdo-listado.php");
?>
Oscar E Capuay Uceda 224
7/23/2019 Php Capitulos567[1]
114/145
Seguridad Web
VII. Seguridad WebLas aplicaciones Web por lo general estn en lnea y eso las expone a lavisita de usuarios que llegan con objetivos distintos, uno de ellos el hacerse
de fama violando la seguridad de sitios Web, valindose de diferentesestrategias y herramientas. Construir una aplicacin completamente seguraes imposible por tal motivo es imprescindible conocer y establecer barrerascontra estos ataques y por otro lado desarrollar las aplicaciones evitandocometer errores en la codificacin desde el punto de vista lgico, que nospuedan causar problemas de seguridad posteriormente, todo estominimizar en lo posible la posibilidad de violacin en la seguridad delsistema, tal como se menciona en las recomendaciones generales deseguridad en PHP:
Cuando realice pruebas, tenga en mente que no ser capaz deprobar todas las diferentes posibilidades, incluso para las
pginas ms simples. Los datos de entrada que usted puedeesperar en sus aplicaciones no necesariamente tendrn relacinalguna con el tipo de informacin que podra ingresar unempleado disgustado, un cracker con meses de tiempo entre susmanos, o un gato domstico caminando sobre el teclado. Es poresto que es mejor observar el cdigo desde una perspectivalgica, para determinar en dnde podran introducirse datosinesperados, y luego hacer un seguimiento de cmo estainformacin es modificada, reducida o amplificada.1
A continuacin veremos algunos temas sobre la seguridad en el desarrollo
Web.
Seguridad en el Sistema de archivosEl sistema de archivos en todo sistema operativo es importante debido a quea travs de l se puede violar la seguridad de un computador, por ejemplo acontinuacin veremos un caso en el que un usuario puede borrar un archivoimportante del sistema operativo UNIX o LINUX debido a que no se tomaronciertas medidas de precaucin.
Ejemplo 105: Borrar un archivo de un usuario
Este caso presenta el supuesto que un usuario ingresa su nombre y elnombre de su archivo que desea eliminar de su directorio personal a travsde la Web.El usuario ingresar los datos en un formulario y los enviar al siguientearchivo PHP.
7/23/2019 Php Capitulos567[1]
115/145
7/23/2019 Php Capitulos567[1]
116/145
Seguridad Web
Seguridad en Base de datosLa seguridad de las aplicaciones Web tambin pasa por la etapa de diseode la base de datos, al momento de establecer los tipos de usuarios y losprivilegios que cada uno tendr, es recomendable hacer esto y no dejar todo
el control en la lgica de la aplicacin.
Respecto a la conexin con la base de datos es posible utilizar el protocoloSSL para encriptar la comunicacin entre el servidor y los clientes, perosolamente cifra la informacin en el medio, y no cuando es almacenada en labase de datos.Para el caso del almacenamiento de contraseas en la base de datosrecomiendo el uso de uno de los resmenes criptogrficos ms utilizados enla actualidad: MD5.
En PHP el hash MD5 (acrnimo de Message-Digest Algorithm 5, Algoritmode Resumen del Mensaje 5) puede ser utilizado a travs de la funcin con elmismo nombre: md5().MD5 es uno de los algoritmos de reduccincriptogrficos diseados por el profesor Ronald Rivest del MIT(Massachusetts Institute of Technology, Instituto Tecnolgico deMassachusetts). Fue desarrollado en 1991 como reemplazo del algoritmoMD4 despus de que Hans Dobbertin descubriese su debilidad. Veamos unejemplo:
Ejemplo 107: Md5
md5.php
Resultado Web:
Figura 179. Resultado de md5.php
Una cualidad de este algoritmo es que no tiene funcin para descifrar lo que
lo hace mas seguro que otros debido a que un administrador de base dedatos no podra, por ejemplo, ver las claves de los usuarios.
Oscar E Capuay Uceda 227
7/23/2019 Php Capitulos567[1]
117/145
Seguridad Web
Desarrollaremos ahora un formulario para el acceso de usuarios teniendocomo supuesto que la tabla de usuarios se llama: user, y los campos dondeestn registrados los nombres de usuario y clave de acceso son:user_nombre y user_clave respectivamente.
El script para este caso sera:Ejemplo 108: Script para acceso de usuarios
acceso-md5.php
7/23/2019 Php Capitulos567[1]
118/145
Seguridad Web
Inyeccin SQLUna consulta SQL no es una orden confiable a la que no se le debe prestarla atencin debida, sino por el contrario es en la que ms cuidado debemostener puesto que a travs de ella se puede burlar los controles de acceso a
cualquier sistema Web e incluso permitir el acceso a comandos del sistemaoperativo.
La Inyeccin de comandos SQL es una tcnica utilizada para alterarcomandos SQL definidos en una aplicacin con la finalidad de mostrar datos,sobrescribirlos, eliminarlos o ejecutar rdenes que no fueron establecidaspor el desarrollador. La manera de realizar las alteraciones es a travs de losdatos enviados por un usuario y su combinacin con parmetros utilizadosen las sentencias SQL. A continuacin veremos ejemplos que nos ayudarna ver estos casos con mayor detalle.
Ejemplo 109: Inyeccin SQL en una sentencia SELECT
En este ejemplo la variable $zona es enviada por el usuario. Utilizando lavariable $zona enviaremos la siguiente cadena: union select * from usuario--
En la cadena podemos ver una comilla simple ( ) al inicio y doble guin ( -- )al final.
Si reemplazamos esta cadena en lugar de la variable $zona veremos que elresultado de la consulta mostrar todos los datos registrados en la tablausuario.
Utilizando como base el ejemplo anterior haremos inyeccin SQL en unapgina con un listado que utiliza hipervnculos para la paginacin deresultados.
Ejemplo 110: Paginacin de resultados con Inyeccin SQL
inyeccion01.php
7/23/2019 Php Capitulos567[1]
119/145
Seguridad Web
if(!isset($_GET[p])) $_GET[p]=0;//hallamos el total de registros$sql="select * from persona";$rspersona=$mysqli->query($sql) or die($mysqli->error);$nr=$rspersona->num_rows;
//paginacin de resultados$sql="select idpersona,nombres,apellidos from persona limit " . $_GET[p] .",$cantidad";$rspersona=$mysqli->query($sql) or die($mysqli->error);?>IdNombresApellidosEditar
Eliminar
7/23/2019 Php Capitulos567[1]
120/145
Seguridad Web
Oscar E Capuay Uceda 231
Resultado Web:
Figura 180. Resultado de inyeccion01.php
Ahora hagamos clic en la pgina 2. (Ver la direccin URL)
Figura 181. Nuevo resultado de inyeccion01.php
Podemos ver en la imagen anterior que se enva a la pgina una variable pcon el nmero de registro con el que inicia la pgina que se va a mostrar.Ahora aprovecharemos esta variable para inyectar algunas cadenas SQLvalindonos de la funcin urlencode() para generar las cadenas.
Primero tendremos que hacer algunas suposiciones como por ejemplo que labase de datos es MySQL y que se esta usando la orden LIMIT para la
paginacin de resultados y que el inicio es la variable py que a continuacinhabr una coma y luego la cantidad de registros en la sentencia SQL en laque ser reemplazado.
Parte de la cadena sera: LIMIT (la variable p),(cantidad) entonces paraterminar correctamente la cadena enviaremos junto con la variable p unacoma y un nmero que ser la cantidad de registros y luego insertaremosUNION select * from usuario
Cadena a insertar: 0,2 union select * from usuario --Aplicando urlencode tenemos: 0%2C2+union+select+%2A+from+usuario+--+
Esta cadena que hemos generado ser el valor de p.Veremos que sucede:
7/23/2019 Php Capitulos567[1]
121/145
Seguridad Web
Figura 182. Tercer resultado de inyeccion01.php
Nos aparece un mensaje que nos dice que la sentencia SELECT tienediferente nmero de columnas (campos). Por ahora esto slo nos dice quehemos podido inyectar una sentencia SELECT adicional pero nos quedasaber el nmero de campos de la consulta del listado y luego hacer coincidirnuestro SELECT adicional con dicha cantidad.
Ahora supondremos que la cantidad de campos que vemos en el listado es
la cantidad del SELECT de la sentencia para el listado, ahora debemosprobar agregando campos al SELECT inyectado.
Agregaremos un campo al select inyectado.
Cadena a insertar: 0,2 union select *,1 from usuario --Aplicando urlencode: 0%2C2+union+select+%2A%2C1+from+usuario+--+
La cadena URL sera:
Figura 183. URL con inyeccin SQL
Ahora tenemos:
Figura 184. Resultado de la inyeccin SQL
Podemos decir que el nmero de campos coincidi y adems el nombre dela tabla.
Sabiendo ahora lo que puede ocurrir, debemos prevenir este tipo de ataqueutilizando una funcin que se encargue de anular cualquier cadena que
Oscar E Capuay Uceda 232
7/23/2019 Php Capitulos567[1]
122/145
Seguridad Web
pretenda inyectar SQL. Para el caso anterior debemos analizar y verificarque el valor de la variable p sea un nmero obligatoriamente, entoncesaadimos la lnea:
if(!is_numeric($_GET[p])) $_GET[p]=0;
is_numerices una funcin que devuelve TRUE si el valor de la variable esnumrico.
En caso que no sea numrico le asignamos CERO, segn la lnea de cdigoanterior.
inyeccion02.php
Id
NombresApellidosEditarEliminar
Oscar E Capuay Uceda 233
7/23/2019 Php Capitulos567[1]
123/145
Seguridad Web
7/23/2019 Php Capitulos567[1]
124/145
Seguridad Web
para esta tabla: login (nombre del usuario) y clave (password del usuario) yluego registramos algunos registros.
Figura 187. Tabla usuario
Ahora haremos un formulario para el acceso de usuarios.formulario09.php
Acceso al sistema
Acceso al sistema
Usuario
Password
Oscar E Capuay Uceda 235
7/23/2019 Php Capitulos567[1]
125/145
Seguridad Web
Resultado Web:
Figura 188. Resultado de formulario09.html
El formulario anterior enva los datos a una pgina llamada inyeccion03.php.Veamos ahora el archivo inyeccion03.php quien se encargar de controlar el
acceso de los usuarios.inyeccion03.php
7/23/2019 Php Capitulos567[1]
126/145
7/23/2019 Php Capitulos567[1]
127/145
Seguridad Web
Pero si magic_quotes se encuentra inactivo tendremos el siguienteresultado:
Figura 192. Tercer resultado de inyeccion03.php
En este resultado podemos ver que la inyeccin si se ejecutaraexitosamente y el atacante podra ingresar al sistema sin un nombre deusuario ni password vlido.
Podemos utilizar la funcin: get_magic_quotes_gpc la cual devuelve 0 si lascomillas mgicas estn deshabilitadas, 1 de lo contrario para hacer laverificacin en tiempo de ejecucin y la funcin addslashes.
Con el formulario 10 probaremos un nuevo script que utilice estas dosltimas funciones, el formulario 10 solo vara en el valor del atributo actionde la etiqueta form.
formulario10.html
Acceso al sistema
Acceso al sistema Usuario
Password
Oscar E Capuay Uceda 238
7/23/2019 Php Capitulos567[1]
128/145
Seguridad Web
Una vez cargado el formulario, ingresamos los datos de prueba.
Resultado Web:
Figura 193. Resultado de formulario10.html
Ejemplo 111: get_magic_quotes_gpc y addslashes
comillas-magicas.php
7/23/2019 Php Capitulos567[1]
129/145
Seguridad Web
Podemos notar que se le agrega un \(slash) a cada comilla, sin importar laconfiguracin de las comillas mgicas, el script anterior no ayudara a evitarla inyeccin SQL.
Con este script mejoramos el control del acceso a usuarios, pero cabe
resaltar una funcin creada para evitar este tipo de inyecciones SQL enservidores MySQL, llamada: mysqli_real_escape_string (programacinorientada a objetos) o mysql_real_escape_string (programacinprocedimental). Veamos un ejemplo con estilo orientado a objetos:
Ejemplo 112: mysqli_real_escape_string
formulario11.html
Acceso al sistema
Acceso al sistema
Usuario
Password
inyeccion04.php
7/23/2019 Php Capitulos567[1]
130/145
Seguridad Web
echo $sql;?>
Resultado Web:
Figura 195. Resultado de inyeccion04.php
Notamos que el control de la inyeccin SQL result exitoso con la funcin omtodo real_escape_string el cual protege de caracteres especiales en unacadena para ser usada en una sentencia SQL, tomando en cuenta elconjunto de caracteres para la conexin.
Oscar E Capuay Uceda 241
7/23/2019 Php Capitulos567[1]
131/145
Seguridad Web
SesionesLas sesiones en PHP son un mecanismo para preservar datos a lo largo devarios accesos lo que permite construir aplicaciones Web mspersonalizadas.
A cada visitante que accede a su Web se le asigna un identificador nico,llamado "session id" (identificador de sesin). ste se almacena en unacookie por parte del usuario o se propaga en la URL.
Las Cookies sirven para almacenar datos en el navegador del usuario. Sepueden poner cookies usando la funcin setcookie(). Las Cookies son partede la cabecera HTTP, por tanto la funcin setcookie() debe ser llamadaantes de que se produzca cualquier salida al navegador.
El soporte de las sesiones le permite registrar un nmero arbitrario devariables que se conservarn en las siguientes peticiones. Cuando unvisitante acceda a su Web, PHP comprobar automticamente (sisession.auto_start est puesto a 1) o cuando usted lo especifique (de formaexplcita mediante session_start() o implcita a travs de session_register())si se le ha enviado un "session id" especfico con su peticin, en cuyo casose recrean las variables que se haban guardado anteriormente.
Todas las variables registradas son almacenadas tras finalizar la peticin.Las variables que estn indefinidas se marcan como no definidas. En lossubsiguientes accesos, no estarn definidas por el mdulo de sesiones a
menos que el usuario las defina ms tarde.Las opciones de configuracin track_vars y register_globals influyennotablemente en la forma en que las variables de la sesin se almacenan yrestauran. A partir de PHP 4.0.3, track_vars siempre est activado. A partirde PHP 4.1.0, $_SESSION est disponible como variable global, al igual que$_POST, $_GET, $_REQUEST y dems. Al contrario que$HTTP_SESSION_VARS, $_SESSION siempre es global. Por tanto, no sedebe usar global para $_SESSION.
Si track_vars est activado y register_globals est desactivado, slo los
miembros del vector asociativo global $HTTP_SESSION_VARS pueden serregistrados como variables de la sesin. Las variables restauradas de lasesin slo estarn disponibles en el vector $HTTP_SESSION_VARS.
Se recomienda usar $_SESSION (o $HTTP_SESSION_VARS con PHP4.0.6 o inferior) por seguridad y para hacer el cdigo ms legible. Con$_SESSION o $HTTP_SESSION_VARS, no es necesario usar las funcionessession_register() / session_unregister() / session_is_registered(). Losusuarios pueden acceder a una variable de la sesin como si se tratase deuna variable normal.
Si register_globals est activado, todas las variables globales pueden serregistradas como variables de la sesin, y las variables de la sesin sernrestauradas a sus correspondientes variables globales. Como PHP debe
Oscar E Capuay Uceda 242
7/23/2019 Php Capitulos567[1]
132/145
Seguridad Web
saber qu variables globales estn registradas como variables de la sesin,los usuarios deben registrar las variables con la funcin session_register(),mientras que con $HTTP_SESSION_VARS/$_SESSION no es necesariousar session_register().
Si est usando $HTTP_SESSION_VARS/$_SESSION y desactivaregister_globals, no use session_register(), session_is_registered() nisession_unregister().
Se recomienda desactivar register_globals por motivos de seguridad yrendimiento.
Ejemplo 113: Ingreso de un usuario a la aplicacin
ingreso01.php
Acceso al sistema
Usuario
PasswordDatos Incorrectos
Oscar E Capuay Uceda 243
7/23/2019 Php Capitulos567[1]
133/145
Seguridad Web
Resultado Web:
Figura 196. Resultado de ingreso01.php
Ejemplo 114: Verifica datos del usuario
verifica01.php
7/23/2019 Php Capitulos567[1]
134/145
Seguridad Web
$_SESSION['tipo']=$reg->tipo;} else header("location: ingreso01.php?error=1");?>
Probamos con datos incorrectos.
Figura 197. Ingreso01.php con datos incorrectos
Figura 198. Logeo incorrecto
La aplicacin nos devuelve un mensaje de Datos Incorrectos.
Oscar E Capuay Uceda 245
7/23/2019 Php Capitulos567[1]
135/145
Seguridad Web
Autentificacin HTTP con PHPLas caractersticas de autentificacin HTTP en PHP solo estn disponiblescuando se est ejecutando como un mdulo en Apache y hasta ahora no loestn en la versin CGI. En un script PHP como mdulo de Apache, sepuede usar la funcin header() para enviar un mensaje de "Autentificacin
requerida" al navegador cliente haciendo que muestre una ventana deentrada emergente con nombre de usuario y contrasea. Una vez que elusuario ha rellenado el nombre y la contrasea, la URL que contiene el scriptPHP ser llamada de nuevo con las variables predefinidasPHP_AUTH_USER, PHP_AUTH_PW, y AUTH_TYPE asignadas con elnombre de usuario, la contrasea y el tipo de autentificacinrespectivamente. Estas variables predefinidas se pueden encontrar en lasmatrices $_SERVER y $HTTP_SERVER_VARS. Slo autentificacin"Bsica" est soportada en este momento.
Ejemplo 115: Autenticacin HTTP
auth01.php
7/23/2019 Php Capitulos567[1]
136/145
Seguridad Web
Si cancelamos la operacin tenemos el siguiente resultado en el navegador,segn lo establecido en el cdigo.
Figura 200. Resultado de auth01.phpSi ingresamos datos y presionamos Aceptar tendremos:
Figura 201. Autenticacin con datos correctos
Figura 202. Resultado de auth01.php con datos correctos
Oscar E Capuay Uceda 247
7/23/2019 Php Capitulos567[1]
137/145
Seguridad Web
LoginAhora que ya tenemos el script de autenticacin de usuarios,desarrollaremos el script para verificar el nombre de usuario y contrasea enla base de datos. Utilizaremos una tabla usuario, con campos que contengan
el nombre y contrasea del usuario.
Figura 203. Tabla usuario
Script sql:
CREATE TABLE `usuario` (`idusuario` int(11) NOT NULL auto_increment,`login` varchar(10) collate latin1_spanish_ci NOT NULL,`clave` varchar(32) collate latin1_spanish_ci NOT NULL,PRIMARY KEY (`idusuario`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1COLLATE=latin1_spanish_ci AUTO_INCREMENT=1;
Una vez implementada la base de datos ingresaremos algunos registrospara los casos de prueba necesarios para probar el script que
desarrollaremos.
Figura 204. registro de un usuario
Oscar E Capuay Uceda 248
7/23/2019 Php Capitulos567[1]
138/145
Seguridad Web
Como podemos observar en la figura anterior, para ingresar un nuevoregistro debemos aplicar la funcin md5 a la contrasea del usuario.
Ahora desarrollaremos el script de logeo de usuarios. Para ello podremosusar como mecanismo de ingreso de datos el script de autenticacin
desarrollado en el tema anterior o usar un formulario HTML como elsiguiente:
Ejemplo 116: Formulario para el logeo de usuarios
entrar.php
Login
Ingreso al sistemaUsuarioPassword
Resultado Web:
Figura 205. Resultado de entrar.php
Oscar E Capuay Uceda 249
7/23/2019 Php Capitulos567[1]
139/145
Seguridad Web
Ejemplo 117: Logeo de usuarios
logeo.php
En este script utilizamos el mtodo real_escape_string. Esta funcin esusada para crear una cadena SQL sin inyeccin SQL. Los caracterescodificados son NULL (ASCII 0), \n, \r, \, ', ", y Control-Z. Adems usamos lafuncin md5para cifrar la clave escrita en el formulario y compararla con la
cadena cifrada guardada en la base de datos.
Si el nmero de registros es 1 (uno), significa que los datos son correctos ypertenecen a uno y solo un usuario (no pueden haber varios usuarios con elmismo nombre). Por lo que debemos iniciar una sesin utilizando la funcinsession_start . El apoyo que PHP proporciona para las sesiones consiste enuna forma de conservar ciertos datos a lo largo de los subsiguientesaccesos, lo cual le permite construir aplicaciones ms personalizadas eincrementar el atractivo de su sitio Web.
Utilizaremos tambin, al array $_SESSION[] para registrar las variables de
sesin de nuestra aplicacin, en este caso especfico, para registrar elidentificador del usuario (idusuario) y su nombre de usuario (usuario).
A partir de PHP 4.1.0, $_SESSION est disponible como variable global, aligual que $_POST, $_GET, $_REQUEST y dems. Al contrario que$HTTP_SESSION_VARS, $_SESSION siempre es global. Por tanto, no sedebe usar global para $_SESSION.
Cuando los datos ingresados son incorrectos, retornar a la pgina inicial, delo contrario el script redirecciona el navegador hacia el listado de personas(archivo: mysqli-listado.php), el cual, tiene dos nuevas lneas de cdigo conrespecto al ejemplo 76.
Oscar E Capuay Uceda 250
7/23/2019 Php Capitulos567[1]
140/145
Seguridad Web
Resultado Web cuando los datos son incorrectos
Figura 206. Resultado de entrar.php con datos incorrectos
Si alguien quisiera ingresar a nuestro listado sin logearse podra escribirdirectamente la direccin de la pgina y lo podra hacer, pero ahora quehemos iniciado una sesin y hemos registrado algunas variables podremoscontrolar dicha accin y obligar a los usuarios a logearse antes de acceder aciertas pginas. Veamos a continuacin cul sera la lgica del script.
Ejemplo 118: Verifica si el usuario se ha logeado
mysqli-listado-logeado.php
IdNombresApellidosEditarEliminar
Oscar E Capuay Uceda 251
7/23/2019 Php Capitulos567[1]
141/145
Seguridad Web
7/23/2019 Php Capitulos567[1]
142/145
7/23/2019 Php Capitulos567[1]
143/145
Seguridad Web
die("No has adivinado la palabra. Prueba otra vez");} else {?>
Ejemplo 120: Generador CAPTCHA
capu-captcha.php
7/23/2019 Php Capitulos567[1]
144/145
Seguridad Web
//indicar la cantidad de caracteres que tendr la palabra del CAPTCHA$cantidad=6;for($i=1;$i
7/23/2019 Php Capitulos567[1]
145/145
Seguridad Web
Resultados Web:
Podemos ver a continuacin varios ejemplos de los CAPTCHAs generados.
Figura 208. Ejemplo1 de CAPTCHA