Taller de Php Mysql

22
UNIVERSITARIA DE COLOMBIA TALLER DE PHP MYSQL John Jairo Peña Empresas y Negocios On-Line" y Diseño Web

description

taller php y mysql

Transcript of Taller de Php Mysql

Page 1: Taller de Php Mysql

UNIVERSITARIA DE COLOMBIA

TALLER DE PHP MYSQL

John Jairo Peña

Empresas y Negocios On-Line" y Diseño Web

Page 2: Taller de Php Mysql

QUE ES PHP

PHP (acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de código

abierto muy popular especialmente adecuado para el desarrollo web y que puede ser

incrustado en HTML

Lo que distingue a PHP de algo del lado del cliente como Javascript es que el código es

ejecutado en el servidor, generando HTML y enviándolo al cliente. El cliente recibirá el

resultado de ejecutar el script, aunque no se sabrá el código subyacente que era. El

servidor web puede ser configurado incluso para que procese todos los ficheros HTML

con PHP, por lo que no hay manera de que los usuarios puedan saber qué se tiene

debajo de la manga.

Lo mejor de utilizar PHP es su extrema simplicidad para el principiante, pero a su vez

ofrece muchas características avanzadas para los programadores profesionales. No

sienta miedo de leer la larga lista de características de PHP. En unas pocas horas podrá

empezar a escribir sus primeros scripts.

COMO SE DECLARAN VARIABLES EN PHP

Las variables en PHP empiezann con el signo de pesos ( $ )

Los nombres de las variables pueden contener letras, numeros o el guion bajo.

Los nombres de las variables no pueden empezar con un numero pero si por el

guion bajo ( _ ).

Ejemplo: Nombres de variables

$variable ; // nombre correcto

$_variable ; // nombre correcto

$5variable ; // nombre incorrecto

$_5variable ; // nombre correcto

Ejemplo: Declarar una variable

$texto = "variable de texto"; // string

$num = 5; // integer

$doble = 5.0021; // double

$valor = true; // boleana

Page 3: Taller de Php Mysql

3.COMO ES ENVIAN DATOS EN PHP

Método GET y POST

Existen tres formas de dar valor a variables en PHP en páginas web. Formularios,

enlaces HTML y sesiones.

Formularios

La primera forma es crear un formulario, el cuál utiliza los métodos GET y POST.

$_GET y $_POST son dos de las variables superglobales que vimos antes. Por

tener ámbito global, los valores que se incluyan mediante estos dos métodos

estarán disponibles en la página siguiente. Mediante estos métodos podemos

pasar determinados valores de una pagina a otra.

El método que se desee usar se indica en la propiedad "Method", y la página a la

cual deseo enviar la información se indica en la propiedad "Action" del formulario.

Es importante recordar que $_GET y $_POST son arreglos que tienen posiciones

asociativas, es decir, cada posición en el arreglo tiene un nombre, y ese nombre

es el mismo que tiene cada campo del formulario.

Page 4: Taller de Php Mysql

4.PARA QUE SIRVEN EL METODO GET

Método GET

Este método envia las variables dentro de la propia URL (dirección) de la página,

concatenadas(unidas) por ampertands(&) quedando algo así:

1 http://www.mipagina.com/index.php?page=mia&variable2=valor2&variable3=v

5.PARA QUE SIRVEN EL METO POST.

Método POST

Este método sólo se puede usar con formularios, y la información no se envía por

la URL sino que es invisible al usuario (eso en teoría porque usando firebug

podríamos ver que se envía en realidad).

¿Para qué sirve POST?

pues para enviar grandes campos de texto, subir imágenes, para no distorcionar

nuestra URL amigable con un colección de variables.

¿Cómo las envío?

Pues así:

1

2

3

<form name="miformulario" action="mipagina.php" method="POST">

<input type="text" size="20" name="mivariable1">

</form>

Page 5: Taller de Php Mysql

6. CREACION BASE DE DATOS CON MYSQL

Ya tengo creada mi base de datos - miweb - usando phpMyAdmin

Page 6: Taller de Php Mysql

El siguiente paso va a ser crear un usuario para poder crear los diferentes objetos que

necesitemos como tablas, índices, etc. con nuestra base de datos seleccionada

pinchamos sobre - Privilegios -, aparecerá una lista de usuarios que ya existen en nuestra

base de datos, como podéis ver en la imagen, para crear un nuevo usuario pinchamos

sobre - Agregar un nuevo usuario -

Aparece la página siguiente para que introduzcamos los valores para nuestro nuevo

usuario, en nombre de usuario introducimos por ejemplo - user_miweb -, una password, la

volvemos a escribir y por último los privilegios que va a tener nuestro usuario, para los

que empezáis con MySQL os recomiendo que marquéis - Grant all privileges on database

" miweb " - para que no os metáis en errores continuos de - El usuario miweb no tiene

privilegio para esto o lo otro -, sino podéis marcar los privilegios que queráis en el cuadro -

Privilegios globales - , pulsamos el botón - Continuar -

Ya tenemos creado con phpMyAdmin nuestro nuevo usuario para la base de datos

MySQL y con los privilegios que hayamos decidido, en este ejemplo, el usuario que

hemos creado tendrá todos los privilegios.

Page 7: Taller de Php Mysql

7.CREACION DE TABLAS COM MYSQL

Las bases de datos organizan la información en tablas. El primer paso que vamos

a dar es crear una tabla donde introducir algunos datos a modo de ejemplo.

Pinchamos sobre el nombre de la base de datos y la pantalla que se nos muestra

a continuación nos permite crear una tabla en dicha base de datos (si no te

aparece esta opción pulsa en la pestaña “Operaciones”). Nosotros vamos a

suponer que queremos almacenar el nombre, apellidos, dirección, teléfono, edad y

altura de personas. Para ello crearemos una tabla que llamaremos <<agenda>>

con 6 columnas. Por tanto escribimos como nombre “agenda”, número de

columnas 6 y pulsamos continuar.

Page 8: Taller de Php Mysql

El siguiente paso es indicar los nombres y tipos de las columnas.

Los nombres de columnas que pondremos serán: nombre, apellidos, direccion,

telefono, edad y altura (escribimos estos nombres sin tildes). En tipo elegimos

VARCHAR para todos las columnas de tipo cadena de caracteres. El significado

de VARCHAR podemos verlo como “texto de longitud variable”. En vez de texto de

longitud variable podríamos haber escogido otro tipo de datos como números

enteros, números autoincrementados de uno en uno para los campos tipo

identificador, fechas, etc. El campo edad lo ponemos de tipo número entero (INT),

mientras que el campo altura lo ponemos de tipo número decimal (FLOAT). De

momento no nos interesa saber más y, por tanto, con las cuatro columnas tipo

VARCHAR, una columna tipo entero y otra columna tipo flotante, es más que

suficiente para nuestro objetivo (en este curso no vamos a tratar MySQL más que

en aspectos básicos para comprender cómo interacciona con PHP). Como

longitud/valores para los tipos de datos VARCHAR pondremos 100 que será la

longitud máxima en caracteres que podrán ocupar las columnas.

Page 9: Taller de Php Mysql

En resumen, al introducir estos datos hemos declarado que vamos a crear una

tabla con seis columnas, denominadas nombre, apellidos, direccion, telefono,

edad y altura. El número de filas no está determinado. Además los datos que se

almacenen no podrán tener más de 100 caracteres de longitud para los tipos

VARCHAR.

Para finalizar la creación de la tabla 'agenda', pulsamos sobre Guardar y

finalizaremos el proceso. La tabla creada podemos verla como algo similar a esto:

nombre apellidos direccion telefono edad altura

Como vemos ahora la tabla está vacía porque todavía no hemos introducido

ningún dato.

Una vez creada la tabla 'agenda' introduciremos algunos datos de prueba. Para

ello, pulsaremos sobre el nombre de la tabla (fíjate que en el lateral izquierdo de

phpMyAdmin existe una especie de navegador que nos permite elegir la tabla a la

que queremos ir). Una vez seleccionada una tabla, veremos que hay varias

pestañas (Estructura, SQL, Insertar, Exportar, Importar, Operaciones). Fíjate en la

parte de arriba y verás que te indica el nombre de la base de datos y la tabla en

que te encuentras. Pulsaremos sobre la pestaña 'Insertar' para acceder a

introducir los datos para una fila de nuestra tabla.

Nos aparecerá una imagen similar a la siguiente. Nos indica un nombre de

columna y los valores para una fila (nombre, apellidos, direccion, telefono).

Añadiremos algunos datos de prueba como: nombre “Manuel Jesús”, apellidos

“López de la Rosa”, dirección “C/Juan Bautista Nº 3”, telefono “658954875”, edad

Page 10: Taller de Php Mysql

32 y altura 1.80. Añadiremos también otros datos como nombre “María”, apellidos

“Manzano Cabezas”, direccion “C/Arco del triunfo Nº 7”, telefono 695001002, edad

19 y altura 1.99.

Después pulsaremos sobre continuar y ya tendremos los datos guardados en la

tabla. Ahora la tabla tendrá este aspecto:

nombre apellidos direccion telefono edad altura

Manuel

Jesús

López de la

Rosa

C/Juan Bautista Nº

3

658954875 32 1.80

María Manzano

Cabezas

C/Arco del triunfo

Nº 7

695001002 19 1.99

Page 11: Taller de Php Mysql

8.SENTENCIAS SQL (INSER, SELECT,UPDATE , DELETE, FROM, WHERE)

Insert

La instrucción INSERT permite crear o insertar nuevos registros en una tabla,

veamos su sintaxis con un ejemplo práctico, la inserción de un registro en la tabla

ALUMNOS:

Código: Seleccionar todo

insert into ALUMNOS (ID_ALUMNO , NOMBRE , APELLIDOS , F_NACIMIENTO)

values (1 , 'Pablo' , 'Hernandaz Mata' , '1995-03-14')

Donde cada dato de la lista VALUES se corresponde y se asigna a cada campo de la

tabla en el mismo orden de aparición de la sentencia INSERT. Cabe mencionar que si la

clave primaria que identifica el registro que se pretende insertar ya la usa un registro

existente el SGBD rechazaría la operación y devolvería un error de clave primaria

duplicada.

Así que cuando usted rellena un formulario en Internet por ejemplo, y los datos son

almacenados en una BD, en algún momento del proceso se realizará una instrucción

INSERT con los datos que usted a cumplimentado

SELECT nos permite consultar los datos almacenados en una tabla de

la base de datos.

El formato de la sentencia select es:

SELECT [ALL | DISTINCT ]

<nombre_campo> [{,<nombre_campo>}]

Page 12: Taller de Php Mysql

FROM <nombre_tabla>|<nombre_vista>

[{,<nombre_tabla>|<nombre_vista>}]

[WHERE <condicion> [{ AND|OR <condicion>}]]

[GROUP BY <nombre_campo> [{,<nombre_campo >}]]

[HAVING <condicion>[{ AND|OR <condicion>}]]

[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]

[{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]

UPDATE se utiliza para modificar valores en una tabla.

La sintaxis de SQL UPDATE es:

UPDATE nombre_tabla

SET columna1 = valor1, columna2 = valor2

WHERE columna3 = valor3

La cláusula SET establece los nuevos valores para las columnas indicadas.

La cláusula WHERE sirve para seleccionar las filas que queremos modificar.

Ojo: Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas

las filas de la tabla.

Ejemplo del uso de SQL UPDATE

nombre apellido1 apellido2

ANTONIO PEREZ GOMEZ

LUIS LOPEZ PEREZ

ANTONIO GARCIA BENITO

PEDRO RUIZ GONZALEZ

Page 13: Taller de Php Mysql

DELETE A veces podemos desear deshacernos de los registros de una

tabla. Para ello, utilizamos el comando DELETE FROM. La sintaxis para esto es,

DELETE FROM "nombre_tabla"

WHERE "condición";

Es más fácil utilizar un ejemplo. Por ejemplo, digamos que actualmente tenemos la

siguiente tabla:

Tabla Store_Information

Store_Name Sales Txn_Date

Los Angeles 1500 05-Jan-1999

San Diego 250 07-Jan-1999

Los Angeles 300 08-Jan-1999

Boston 700 08-Jan-1999

y decidimos no mantener ninguna información sobre Los Ángeles en esta tabla.

Para lograrlo, ingresamos el siguiente SQL:

DELETE FROM Store_Information

WHERE Store_Name = 'Los Angeles';

WHERE se usa para extraer sólo los registros que cumplan con una

condición. Funciona como un filtro.

Sintaxis de la sentencia SQL WHERE

SELECT column_name,column_name

FROM table_name

WHERE column_name operator value;

Page 14: Taller de Php Mysql

FROM Se utiliza para realizar una operación en una tablan especifica por

ejemplo

Select nombre FROM usuarios

9.CONEXIONES A BASE DE DATOS MEDIANTE PHP

Conectarse a una base de datos MySql desde PHP es sencillo. En un pequeño

ejemplo vamos a ver cómo hacerlo.

1- Creamos un primer archivo llamado por ejemplo “conexion.php”.

2- Incluimos en “conexion.php” el siguiente código.

1 <?

2 $link=mysql_connect("localhost", "usuario", "clave");

3 mysql_select_db("nombrebd",$link) OR DIE ("Error: No es posible establecer la conexión");

4 ?>

Localhost: Indíca a donde se conecta con la DB. Si la conexión es en el mismo

servidor, este es el valor que debe ir. Si la conexión se da en otro servidor,

debemos incluir la Ip del servidor. En este último caso, el servidor deberá tener las

conexiones remotas abiertas.

Usuario: Es el usuario de la base de datos. En general lleva el siguiente formato

usuariocpanel_usuariodb

Clave: Es la clave que se corresponde con ese usuario.

Nombrebd: Se corresponde con el nombre de la base de datos.

Page 15: Taller de Php Mysql

3- Finalmente para incluir la conexión en cualquier archivo desde el que

querramos conectarnos, sólo se debe incluir el siguiente código.

1 <?

2 include("conexion.php");

3 ?>

10.OPERADORES LOGICOS EN PHP

Nombre Ejemplo Resultado

Mayor que $a > $b true si $a es mayor que $b

false en caso contrario

Menor que $a < $b true si $a es menor que $b

false en caso contrario

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

false en caso contrario

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

false en caso contrario

Diferente

$a <> $b

ó

$a != $b

true si $a es diferente a $b

false en caso contrario

Page 16: Taller de Php Mysql

Idéntico o estrictamente igual $a ===

$b

true si $a es igual a $b y son del mismo

tipo

false en caso contrario

No idéntico o estrictamente

distinto $a ¡== $b

true si $a no es igual a $b o no son del

mismo tipo

false en caso contrario

Igual $a == $b true si $a es igual a $b

false en caso contrario

Los operadores lógicos, nos permiten crear condiciones para las distintas

estructuras en PHP, tanto en estructuras condicionales como en estructuras

repetitivas. Los operadores lógicos más importantes son and (en español: y) y or

(en español: o)

Nombre Ejemplo Resultado

and ó && $a and $b true si $a es true y $b es true

false en caso contrario

or ó || $a or $b true si $a o $b es true, o ambos

false en caso contrario

xor $a xor $b true si $a o $b es true, pero no ambos

false en caso contrario

not ó ! !$a true si $a no es true

false en caso contrario

Page 17: Taller de Php Mysql

Una condición puede ser tan larga como se quiera o necesite y usar tantos

operadores lógicos como se quiera o necesiten. El uso de los paréntesis otorgará

la prioridad de la ejecución de unas operaciones y otras (como en matemáticas).

Las expresiones donde se utilizan operadores lógicos y relacionales devuelven un

valor booleano, es decir, verdadero (true) o falso (false). Por ejemplo si $a = 7 y $b

= 5 la expresión $a < $b devuelve false (es falsa). Si $a = true y $b = false la

expresión $a && $b devuelve false (es falsa porque no se cumple que $a y $b

sean verdaderas). Si $a = true y $b = false la expresión $a || $b devuelve true

porque uno de los dos operandos es verdadero. Si $a = true la expresión !a

devuelve false (el opuesto o contrario).

El operador || se obtiene en la mayoría de los teclados pulsando ALT GR + 1, es

decir, la tecla ALT GR y el número 1 simultáneamente.

Los operadores && y || se llaman operadores en cortocircuito porque si no se

cumple la condición de un término no se evalúa el resto de la operación. Por

ejemplo: ($a == $b && $c != $d && $h >= $k) tiene tres evaluaciones: la primera

comprueba si la variable a es igual a b. Si no se cumple esta condición, el

resultado de la expresión es falso y no se evalúan las otras dos condiciones

posteriores.

En un caso como ( $a < $b || $c != $d || $h <= $k) se evalúa si a es menor que b.

Si se cumple esta condición el resultado de la expresión es verdadero y no se

evalúan las otras dos condiciones posteriores.

El operador ! recomendamos no usarlo hasta que se tenga una cierta destreza en

programación. Una expresión como (!$esVisible) devuelve false si ($esVisible ==

true), o true si ($esVisible == false). En general existen expresiones equivalentes

que permiten evitar el uso de este operador cuando se desea.

OPERADOR DE NEGACIÓN APLICADO SOBRE NÚMEROS O TEXTO

Si $a = true su negación !$a devuelve false. ¿Pero qué ocurre si $a es un número

o un texto? Si $a es un número se considera que equivale a false si su valor

numérico es 0, o que equivale a true si su valor numérico es distinto de cero.

Seguidamente se aplica la negación. Por tanto si $a = 7, a se considera

Page 18: Taller de Php Mysql

equivalente a true y !$a es false. Si $a = 0, a se considera equivalente a false y !$a

es true.

Para cadenas de texto, la cadena vacía se considera equivale a false y cualquier

otra cadena se considera que equivale a true. Si $texto1 = "" (cadena vacía)

entonces !$texto1 vale true.

ORDEN DE PRIORIDAD, PRELACIÓN O PRECEDENCIA

Los operadores lógicos y matemáticos tienen un orden de prioridad o precedencia.

Este es un esquema general que indica el orden en que deben evaluarse en la

mayoría de los lenguajes de programación:

Una expresión como $A+$B == 8 && $A-$B == 1 siendo $A = 3 y $B = 5 supondrá

que se evalúa primero $A+$B que vale 8, luego se evalúa $A-$B que vale -2.

Luego se evalúa si se cumple que la primera operación es cierta y luego si la

segunda también es cierta, resultando que no, por lo que la expresión es falsa.

COMPARACIÓN DE CADENAS DE TEXTO CON OPERADORES

RELACIONALES

Dos cadenas de texto se pueden comparar resultando que se comparan letra a

letra por el valor del equivalente numérico de cada letra. Cada letra tiene un

número asociado: por ejemplo la a es el número 97, la b el 98, etc.

Si comparamos "avellana" < "sandia" obtenemos true.

Sin embargo, los códigos numéricos pueden generar resultados no previstos. Por

ejemplo, ¿qué código numérico es menor, el de la a ó el de la A? Aún más, resulta

que todos los códigos numéricos de mayúsculas son menores que los de

minúsculas, con lo cual podemos obtener que „Zulú‟ < „avellano‟ devuelve true

(cosa que a priori nos resultará ciertamente extraña).

Page 19: Taller de Php Mysql

Para comparar cadenas en base a un orden alfabético necesitaremos usar

entonces otras técnicas que comentaremos más adelante.

EJEMPLO

Escribe este código en un editor como Notepad++ y guárdalo con un nombre de

archivo como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza

el resultado.

<?php

$a = 3;

$b = 9;

$result = ($a <= 3 and $b <> 9);

if ( $result == true) {

echo "Se cumple la condición";

}else {

echo "No se cumple la condición";

}

?>

Page 20: Taller de Php Mysql

11.METODOS PARA ENCRIPTAR LA CONTRASEÑA EN PHP

¿Qué función hash debo usar?

Las funciones hash md5() y sha1() hasta hace poco fueron un estándar, pero por la

rapidez en la extracción de datos por fuerza bruta, dictionary o rainbow tables ya no se

recomiendan para la codificación de contraseñas. El mismo creador de MD5 ha escrito en

su blog que “la codificación md5() no es segura” y opten por algoritmos como SHA-2.

La función hash que utilizaremos será crypt() que soporta de forma nativa varios

algoritmos. Por defecto usa la codificación MD5 pero por razones de seguridad usaremos

Blowfish.

Verificando si mi versión de PHP soporta Blowfish

El algoritmo Blowfish está disponible a partir de la versión 5.3 de PHP. Si quieres

comprobar que tienes soporte para Blowfish puedes colocar este código en un archivo

PHP:

<?php

if(defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {

echo "Wiii, tengo CRYPT_BLOWFISH!";

}

?>

Si podemos usar Blowfish pasaremos a codificar la contraseña, en el caso de que no,

tendremos que instalar la última versión de PHP.

Codificando la contraseña

Como decía antes, la función hash que utilizaremos para codificar nuestra contraseña

será crypt(). Por defecto, crypt() usaba el algoritmo DES aunque en las últimas versiones

de PHP paso a MD5.

crypt( string que queremos hacerle el hash, salt)

Para forzar que crypt() utilice el algoritmo Blowfish debemos colocar un salt especial, si la

función no reconoce el salt que escribimos, el hash resultante estará codificado en MD5.

Page 21: Taller de Php Mysql

El salt para Blowfish debe ser escrito de la siguiente manera: $2a$, $2x$ o $2y$ +

2 números de iteración entre 04 y 31 + 22 caracteres que pueden ser

./1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.

Ejemplo: $2x$07$./f4af7kJi1jdaxlswE34$

Para que nuestra contraseña sea más segura, vamos a crear una función que realice un

salt aleatorio. El valor que se generará aleatoriamente para cada hash serán los últimos

22 caracteres.

function crypt_blowfish_bydinvaders($password, $digito = 7) {

$set_salt =

'./1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

$salt = sprintf('$2a$%02d$', $digito);

for($i = 0; $i < 22; $i++)

{

$salt .= $set_salt[mt_rand(0, 22)];

}

return crypt($password, $salt);

}

Para crear el hash con la función que recién creamos solamente tenemos que escribirlo

de la siguiente manera

$password = crypt_blowfish_bydinvaders('stringdondeestaralacontraseña');

¿Y cómo compruebo la contraseña?

Cuando el usuario se registra se guarda en la base de datos su nombre de usuario y su

contraseña encriptada. Cuando éste va a loguearse completará el campo nombre de

usuario y contraseña, si el hash de esta contraseña ingresada en el formulario de login

coincide con el hash asociado al nombre de usuario guardado en la base de datos en el

momento del registro, el usuario iniciará sesión.

Con la función crypt() reconocemos que el hash en la base de datos fue creado con

Blowfish.

$passwordenBD =

'$2a$07$yMoJrJpwEPrmVnZx4KIyNuOAiOMQksjkV1EW0YRgVe33eYe/yT60y';

if( crypt('micontraseña', $passwordenBD) == $passwordenBD) {

Page 22: Taller de Php Mysql

echo 'Es igual';

}

¿Qué es salt y para que sirve?

Salt en resumen sería una linea de texto que se añade — en este caso — a una

contraseña para que sea más compleja de descifrar. Les dejo un ejemplo simple así les

queda más gráfico:

$salt = '34a@$#aA9823$';

$password = 'dinvaders1234';

$password = hash('sha256', $salt . $password);

El resultado sería un hash que contiene el salt que creamos más la contraseña.