UNIVERSITARIA DE COLOMBIA TALLER DE PHP MYSQL John Jairo Peña Empresas y Negocios On-Line" y Diseño Web
UNIVERSITARIA DE COLOMBIA
TALLER DE PHP MYSQL
John Jairo Peña
Empresas y Negocios On-Line" y Diseño Web
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
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.
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>
6. CREACION BASE DE DATOS CON MYSQL
Ya tengo creada mi base de datos - miweb - usando phpMyAdmin
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.
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.
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.
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
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
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>}]
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
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;
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.
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
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
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
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).
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";
}
?>
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.
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) {
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.