Tutorial de PHP y MySQL2

download Tutorial de PHP y MySQL2

of 39

Transcript of Tutorial de PHP y MySQL2

  • 7/24/2019 Tutorial de PHP y MySQL2

    1/39

    1/39

    Tutorial de PHP y MySQL

    Profesor Javier Andrs G.

    I.E.S. THDER

    Versin 2.0

    1. Sintaxis en PHP

    o Mi primer script

    o Variables y Operadores

    o Sentencias de Control

    o Las Tablas

    o Las Funciones

    o Include() y require()

    o Tiempo y fecha

    2. Formularios

    o Los Formularios

    o Uploads de archivos desde un formulario

    3. Comenzando con MySQL

    o Funciones PHP de acceso a MySQL

    o Conectar a MySQL desde PHP

    o Creacin de una Base de Datos en MySQL

    o Mostrar los datos de una consulta

    4. Operaciones con registros

    o Aadir registros

    o Modificar registros

    o Borrar registros

  • 7/24/2019 Tutorial de PHP y MySQL2

    2/39

    2/39

    1.Sintaxis en PHP

    Mi primer script

    Una vez que ya tenemos instalados PHPy MySQL, y el servidor Apache configurado para usarlos, podemos comenzar a escribir nuestro primer script enPHP.

    Ejemplo script php

    Una vez escrito esto lo salvamos en un fichero con la extensin php(la nuevaversin de PHP, la 4, utiliza la extensin php), y lo colocamos en nuestro servidor,http://localhost/test.php. Ahora si ponemos esta URL en nuestro navegadorveremos una lnea con el texto "Hola. Este es mi primer script en PHP".

    Lo primero que apreciamos en el script son sus delimitadores. En la primeralnea del script vemos para indicar el final del script. Hay que destacar que todaslas lneas que se encuentre entre estos delimitadores deben acabar en punto ycoma, excepto las sentencias de control (if, swicht, while, etc.).

    Como en toda programacin, es importante poner muchos comentarios, para locual si queremos comentar una sola lnea tenemos que poner al principio de la lnea

    //, si lo que queremos es comentar varias utilizaremos los delimitadores /* - */.Para que el servidor envi texto utilizaremos la instruccin echo, aunque tambinpodemos utilizar printfde uso similar al del Co Perl.

    Finalmente, vemos que la palabra myvar comienza con el signo dlar ($).Este smbolo le indica a PHPque es una variable. Nosotros le hemos asignado untexto a esta variable, pero tambin pueden contener nmeros o tablas (arrays). Esimportante recordar que todas las variables comienzan con el signo dlar.Tambin habris observado que el texto que le asignamos a la variable termina con\n, esto no se imprime sirve para indicarle al navegador una nueva lnea.

  • 7/24/2019 Tutorial de PHP y MySQL2

    3/39

    3/39

    Variables y operadores

    Variables:

    Como vimos antes todas la variables deben precedidas por signo dlar($), yle asignamos contenido con el signo igual(=). Con las variables, PHP distingue entre maysculas y minsculas, por lo que no es lo mismo $myvarque $Myvar,stas son dos variables totalmente distintas.

    Como veis he utilizado dos formas de escribir echo, en maysculas y enminsculas, para indicaros que PHP no las distinguea la hora de usar funciones osentencias del lenguaje.

    El uso de la barra invertida, como en \n, no es obligatorio, pero ayuda a ladepuracin del cdigo que enviamos al navegador, adems del \n existen otrosusos:

    \" Carcter dobles comillas\\ Carcter barra invertida\n Nueva lnea\r Retorno de carro\t Tabulador horizontal

    Constantes:

    Las constantes son similares a las variables, con la salvedad de que no llevan elsigno dlar delante, y slo la podemos asignar una vez. Para definir una constantesusaremos la funcin definecomo sigue:

  • 7/24/2019 Tutorial de PHP y MySQL2

    4/39

    4/39

    PHP crea diversas constantes al arrancar, como PHP_VERSION que contiene laversin de PHP, TRUE que le asigna 1 o FALSE que le asigna 0.

    Operadores Aritmticos:

    $a + $b Suma$a - $b Resta$a * $b Multiplicacin$a / $b Divisin$a % $b Resto de la divisin de $a por $b$a++ Incrementa en 1 a $a$a-- Resta 1 a $a

    Operadores de Cadenas:

    El nico operador de cadenas que existen es el de concatenacin, el punto.Pero no os asustis, PHP dispone de toda una batera de funciones que ospermitirn trabajar cmodamente con las cadenas.

    $a = "Hola "; // Un espacio blanco detrs de la a$b = $a . "Mundo"; // Ahora $b contiene "Hola Mundo"

    En este punto hay que hacer una distincin, la interpretacin que hace PHPde las simples y dobles comillas. En el segundo caso PHP interpretar el contenidode la cadena.

    $a = "Mundo";echo = 'Hola $a'; //Esto escribir "Hola $a"echo = "Hola $a"; //Esto escribir "Hola Mundo

    Operadores de Comparacin:

    $a < $b $a menor que $b$a > $b $a mayor que $b$a = $b $a mayor o igual que $b$a == $b $a igual que $b$a != $b $a distinto que $b

    Operadores Lgicos:

    $a AND $b Verdadero si ambos son verdadero$a && $b Verdadero si ambos son verdadero$a OR $b Verdadero si alguno de los dos es verdadero$a !! $b Verdadero si alguno de los dos es verdadero$a XOR $b Verdadero si slo uno de los dos es verdadero!$a Verdadero si $a es falso, y recprocamente

  • 7/24/2019 Tutorial de PHP y MySQL2

    5/39

    5/39

    Operadores de Asignacin:

    $a = $b Asigna a $a el contenido de $b$a += $b Le suma a $b a $a$a -= $b Le resta a $b a $a$a *= $b Multiplica $a por $b y lo asigna a $a$a /= $b Divide $a por $b y lo asigna a $a$a .= $b Aade la cadena $b a la cadena $a

    Sentencias de control

    Las sentencias de control permiten ejecutar bloque de cdigos dependiendode unas condiciones. Para PHP el 0 es equivalente a Falso y cualquier otro nmeroes Verdadero.

    IF...ELSE

    La sentencia IF...ELSE permite ejecutar un bloque de instrucciones si lacondicin es Verdadera y otro bloque de instrucciones si sta es Falsa. Esimportante tener en cuenta que la condicin que evaluemos ha de estar encerradaentre parntesis (esto es aplicable a todas las sentencias de control).

    if (condicin) {

    Este bloque se ejecuta si la condicin es VERDADERA

    } else {

    Este boque se ejecuta si la condicin es FALSA}

    Existe una forma sencilla de usar la sentencia IF cuando no tenemos que usar elELSE y solo tenemos que ejecutar una lnea de cdigo.

    if ($a > 4) echo "$a es mayor que 4";

    IF...ELSEIF...ELSE

    La sentencia IF...ELSEIF...ELSE permite ejecuta varias condiciones en cascada.Para este caso veremos un ejemplo, en el que utilizaremos los operadores lgicos.

  • 7/24/2019 Tutorial de PHP y MySQL2

    6/39

    6/39

    SWITCH...CASE...DEFAULT

    Una alternativa a IF...ELSEIF...ELSE, es la sentencia SWITCH, la cul evala y

    compara cada expresin de la sentencia CASE con la expresin que evaluamos, sillegamos al final de la lista de CASE y encuentra una condicin Verdadera, ejecutael cdigo de bloque que haya en DEFAULT. Si encontramos una condicin verdaderadebemos ejecutar un BREAK para que la sentencia SWITCH no siga buscando en lalista de CASE. Veamos un ejemplo.

    WHILE

    La sentencia WHILE ejecuta un bloque de cdigo mientras se cumpla unadeterminada condicin.

  • 7/24/2019 Tutorial de PHP y MySQL2

    7/39

    7/39

    $num++;

    }

    ?>

    Podemos romper un bucle WHILE utilizando la sentencia BREAK.

    DO...WHILE

    Esta sentencia es similar a WHILE, salvo que con esta sentencia primeroejecutamos el bloque de cdigo y despus se evala la condicin, por lo que elbloque de cdigo se ejecuta siempre al menos una vez.

    FOR

    El bucle FOR no es estrictamente necesario, cualquier bucle FOR puede sersustituido fcilmente por otro WHILE. Sin embargo, el bucle FOR resulta muy tilcuando debemos ejecutar un bloque de cdigo a condicin de que una variable seencuentre entre un valor mnimo y otro mximo. El bucle FOR tambin se puederomper mediante la sentencia BREAK.

  • 7/24/2019 Tutorial de PHP y MySQL2

    8/39

    8/39

    echo "Aqu nos salimos \n";

    break;

    }

    }

    ?>

    Las tablas

    Las tablas (o array en ingls), son muy importantes en PHP, ya quegeneralmente, las funciones que devuelven varios valores, como las funcionesligadas a las bases de datos, lo hacen en forma de tabla.

    En PHP disponemos de dos tipos de tablas. El primero sera el clsico, utilizandondices:

    Esta es una forma de asignar elementos a una tabla, pero una forma msformal es utilizando la funcin array.

    Sino se especifica, el primer ndice es el cero, pero podemos utilizar el operador=>para especificar el ndice inicial.

    $ciudad = array(1=>"Pars", "Roma", "Sevilla", "Londres");

    Un segundo tipo, son las tablas asociativas, en las cules a cada elemento se leasigna un valor (key) para acceder a l.

  • 7/24/2019 Tutorial de PHP y MySQL2

    9/39

    9/39

    Para entenderlo, que mejor que un ejemplo, supongamos que tenemos unatabla en al que cada elemento almacena el nmero de visitas a nuestra web porcada da de la semana.

    Utilizando el mtodo clsico de ndices, cada da de la semana se representarapor un entero, 0 para lunes, 1 para martes, etc.

    $visitas[0] = 200;

    $visitas[1] = 186;

    si usamos las tablas asociativas sera

    $visitas[lunes] = 200;

    $visitas[martes] = 186;

    Ahora bien, recorrer una tabla y mostrar su contenido es sencillo utilizando losndices, pero cmo hacerlo en las tablas asociativas?. La manipulacin de las tabasasociativas se a hace travs de funciones que actan sobre un puntero internoque indica la posicin. Por defecto, el puntero se sita en el primer elementoaadido en la tabla, hasta que es movido por una funcin:

    current- devuelve el valor del elemento que indica el puntero.pos - realiza la misma funcin que current.reset- mueve el puntero al primerelemento de la tabla.end - mueve el puntero al ltimoelemento de la tabla.next- mueve el puntero al elemento siguiente.

    prev- mueve el puntero al elemento anterior.count- devuelve el nmero de elementos de una tabla.

    Veamos un ejemplo de las funciones anteriores:

    Recorrer una tabla con las funciones anteriores se hace un poco lioso, para ellose recomienda utilizar la funcin each().

  • 7/24/2019 Tutorial de PHP y MySQL2

    10/39

    10/39

    La funcin each()devuelve el valor del elemento actual, en este caso, el valordel elemento actual y su clave, y desplaza el puntero al siguiente, cuando llega alfinal devuelve FALSO, y termina el bucle while().

    Tablas multidimensionales

    Las tablas multidimensionales son simplemente tablas en las cuales cadaelemento es a su vez otra tabla.

    La funcin list()es ms bien un operador de asignacin, lo que hace es asignarvalores a unas lista de variables. En este caso los valores son extrados de unatabla por la funcin each().

    Las funciones

    Muchas veces, cuando trabajamos en el desarrollo de una aplicacin, nos surgela necesidad de ejecutar un mismo bloque de cdigo en diferentes partes denuestra aplicacin. Una Funcin no es ms que un bloque de cdigo al que lepasamos una serie de parmetros y nos devuelve un valor. Como todos loslenguajes de programacin, PHP trae una gran cantidad de funciones para nuestro

  • 7/24/2019 Tutorial de PHP y MySQL2

    11/39

    11/39

    uso, pero las funciones ms gran cantidad de funciones para nuestro uso, pero lasfunciones ms importantes son las que nosotros creamos.

    Para declara una funcin debemos utilizar la instruccin function seguido delnombre que le vamos a dar, y despus entre parntesis la lista de argumentosseparados por comas, aunque tambin habr funciones que no recojan ningn

    argumento.

    function nombre_de_funcion (arg_1, arg_2, ..., arg_n)

    {

    bloque de cdigo

    }

    Cualquier instruccin vlida de PHP puede aparecer en el cuerpo (lo que anteshemos llamado bloque de cdigo) de una funcin, incluso otras funciones ydefiniciones de clases.

    En PHP no podemos redefinir una funcin previamente declarada, y adems en

    PHP, las funciones deben definirse siempre antes de que se invoquen, en PHP4 esterequerimiento ya no existe.

    La instruccin RETURN

    Cuando invocamos una funcin, la ejecucin del programa pasa a ejecutar laslneas de cdigo que contenga la funcin, y una vez terminado, el programacontina su ejecucin desde el punto en que fue llamada la funcin.

    Existe una manera de terminar la ejecucin de la funcin aunque an hayacdigo por ejecutar, mediante el u haya cdigo por ejecutar, mediante el uso de la

    instruccin returnterminamos la ejecucin del cdigo de una funcin y devolvemosun valor. Podemos tener varios return en nuestra funcin, pero por lo general,cuantos ms returntengamos menos reutilizable ser nuestra funcin.

    Aunque quedara mejor:

  • 7/24/2019 Tutorial de PHP y MySQL2

    12/39

    12/39

    } else {

    $msg = $y." es mayor que ".$x;

    }

    return $msg;

    }

    ?>

    Con la instruccin returnpuede devolverse cualquier tipo de valor, incluyendotablas y objetos. PHP solo permite a las funciones devolver un valor, y parasolventar este pequeo problema, si queremos que nuestra funcin devuelva variostenemos que utilizar una tabla (array).

    Parmetros de las funciones

    Existen dos formas de pasar los parmetros a una funcin, por valor o por

    referencia.

    Cuando pasamos una variable por valora una funcin, ocurra lo que ocurra ensta en nada modificar el contenido de la variable. Mientras que si lo hacemos porreferencia, cualquier cambio acontecido en la funcin sobre la variable lo harpara siempre.

    En PHP, por defecto, las variables se pasan por valor. Para hacerlo porreferencia debemos anteponer un ampersand(&) a la variable.

    Si queremos que un parmetro de una funcin se pase siempre por referenciadebemos anteponer un ampersand (&) al nombre del parmetro en la definicin dela funcin.

    En PHP podemos definir valores por defecto para los parmetroS de una

    funcin. Estos valores tienen que ser una expresin constante, y no una variable omiembro de una clase. Adems cuando usamos parmetros por defectos, stos

  • 7/24/2019 Tutorial de PHP y MySQL2

    13/39

    13/39

    deben estar a la derecha de cualquier parmetro sin valor por defecto, de otraforma PHP nos devolver un error.

    Si ejecutamos esta funcin nos dara error, ya que hemos dado a $xel valor 1por defecto y la hemos colocado a la izquierda de un parmetro que no tiene valorpor defecto. La forma correcta es:

    Cabe destacar que PHP no soporta un nmero variables de parmetros, peroPHP4 s.

    Llegados a este punto, damos un paso atrs y volvemos a las variables, paradistinguir entre variables estticas (static) y globales (global). Las variablesestticas se definen dentro de una funcin, la primera vez que es llamada dichafuncin la variable se inicializa, guardando su valor para posteriores llamadas.

    Las variables globales, no se pueden declarar dentro de una funcin, lo quehacemos el llamar a una variable que ya ha sido declarada, tomando el valor quetenga en ese momento, pudiendo se modificado en la funcin.

  • 7/24/2019 Tutorial de PHP y MySQL2

    14/39

    14/39

    {

    global $a;

    echo $a."
    ";// imprimir el valor de $a

    $a += 1;// sumamos 1 a $a

    }echo ver_a();// imprimir 1

    echo ver_a();// imprimir 2

    $a = 7;

    echo ver_a();// imprimir 7

    echo ver_a();// imprimir 8

    ?>

    Funciones Variable

    PHP soporta el concepto de funciones variables, esto es significa que si unavariable tiene unos parntesis aadidos al final, PHP buscar un funcin con elmismo nombre que el contenido de la variable, e intentar ejecutarla.

  • 7/24/2019 Tutorial de PHP y MySQL2

    15/39

    15/39

    Cmo ahorramos lneas de cdigo

    Por lo general, todos nuestros script tienen partes de cdigo iguales, las

    funciones include() y require() nos van ahorrar muchas de estas lneas decdigo. Ambas funciones hacen una llamada a un determinado fichero pero de dosmaneras diferentes, con include(), insertamos lo que contenga el fichero quellamemos de manera literal en nuestro script, mientras que con require(), ledecimos que el script necesitar parte de cdigo de se encuentra en el fichero quellama require().

    Como todo esto es un poco lioso, veamos unos ejemplos que nos lo aclarar.

    Si tenemos en cuenta que el fichero header.inccontiene:

    y el fichero footer.inccontiene:

    Nuestro script sera equivalente a:

    Ahora veamos el script de ejemplo para la funcin require():

  • 7/24/2019 Tutorial de PHP y MySQL2

    16/39

    16/39

    Donde el ficheroconfig.inctendra algo como esto:

    Ejemplo de librera sera el siguiente:

    Ficherolibreramatemtica.php:

    Y el fichero PHP que llamara a la librera matemtica sera:

  • 7/24/2019 Tutorial de PHP y MySQL2

    17/39

    17/39

    Tiempo y fecha

    time

    Devuelve el nmero de segundos transcurridos desde el 1 de Enero de 1970. A estaforma de expresar fecha y hora se le denomina timestamp.

    date(formato, timestamp)

    La funcin datedevuelve una cte(formato, timestamp)La frunci datedevuelve una cadena formateada segn los cdigo de formato. Sino le pasamos la variable timestamp nos devuelve la cadena formateada para lafecha y la hora actual.Los cdigos de formato para la funcin date son:

    CODIGODESCRIPCINa am o pm

    A AM o PM

    d Da del mes con ceros

    D Abreviatura del da de la semana (ingls)

    F Nombre del mes (ingls)

    h Hora en formato 1-12

    H Hora en formato 0-23

    i Minutos

    j Da del mes sin ceros

    l Dia de la semanam Nmero de mes (1-12)

    M Abreviatura del mes (ingls)

    s Segundos

    y Ao con 2 dgitos

    Y Ao con 4 dgitos

    z Dia del ao (1-365)

    Para ver algunos ejemplos supongamos que ahora es el 7 de abril de 200Para ver algunos ejemplos supongamos que ahora es el 7 de abril de 2000 a las 14horas 30 minutos y 22 segundos:

    date("d-m-Y") -> 07-04-2000

    date("H:i:s") -> 14:30:22

    date("Y") -> 2000

    date("YmdHis") - > 20000407143022

    date("d/m/y H:i a") -> 07/04/00 14:30 pm

    date(d-m-Y H:i, time()) -> el momento actual

    mktime(hora, min, seg, mes, dia, ao)

  • 7/24/2019 Tutorial de PHP y MySQL2

    18/39

    18/39

    La funcin mktime devuelve una variable de tipo timestamp a partir de lascoordenadas dadas. La principal utilidad de esta funcin es la de aadir o quitar unadeterminada cantidad de fecha u horas a una dada.

    chekdate (mes, dia, ao)

    La funcin chekdatecomprueba si una fecha es vlida, si es as devuelve TRUEy si no lo es FALSE. Una fecha se considera vlida si el ao est entre 1900 y32767, el mes entre 1 y 12, y el da es menor o igual que nmero de das total delmes en cuestin.

    Para el ejemplo anterior nos dara que la fecha es incorrecta, febrero nuncatiene un da 31.

  • 7/24/2019 Tutorial de PHP y MySQL2

    19/39

    19/39

    Funciones de Cadena

    PHP provee de muchas funciones interesantes para trabajar con cadenas,veremos solo algunas:

    strlen - Devuelve la longitud de una cadena (numero de caracteres)explode, split - Parte una cadena de acuerdo a un carcter separador, y devuelveun vector con dichas divisiones.chop , rtrim-Elimina los espacios finales de una cadena, as como sus saltos delineastrpos - Busca una cadena dentro de otra y devuelve su posicin.str_replace- Reemplaza una cadena por otra.

    Otras funciones de cadenas son:

    trim()

    La funcin Trim()se usa asi: Su finalidad es eliminarespacios en las puntas de la cadena. Tambin existe rtrim() y ltrim() para eliminarsolo espacios a la derecha o a la izquierda respectivamente de una cadena pasadacomo argumento

    Veamos un corto ejemplo:

    Sale esto... (se eliminaron esos espacios de ms)hola que tal

  • 7/24/2019 Tutorial de PHP y MySQL2

    20/39

    20/39

    strtolower()y strtoupper()

    La sintaxis de estas funciones es similar a las anteriores y Estas funciones convierten todos los caracteres de la cadena a

    minsculas o maysculas. Ejemplo:

    Sale esto...

    estamos aprendiendo funciones basicasESTAMOS APRENDIENDO FUNCIONES BASICAS

    substr

    La sintaxis de esta funcione es Esta funcinproduce una extraccin de subcadenas. n1es un numero entero, y ser a partir del

    cual se comience la extraccin (parmetro obligatorio) n2es un numero entero, yen caso de estar, la extraccin se detendr en ese caracter. (parmetro NOobligatorio) Un ejemplo de esto:

    Sale esto...

    adena comun y corrienten y corrienteuna cadena comun y corrienteadena comun

    na comun y corrie

    Como se ve, se corta la cadena que pasamos a la funcin en el primernumero, y se comienza la extraccin. Si no hay segundo numero, se produce hasta

  • 7/24/2019 Tutorial de PHP y MySQL2

    21/39

    21/39

    el final de la cadena (3 primeros casos). Si existe el segundo nmero, al llegar aese carcter, se detiene la extraccin.

    2.

    Formularios

    Los formularios

    Los Formularios no forman parte de PHP, sino del lenguaje estndar deInternet, HTML, pero como stos van a aparecer muchas veces durante el curso,vamos a dedicar esta algunas lneas a ellos. Lo que viene a continuacin es HTML yno PHP.

    Todo formulario comienza con la etiqueta . Con ACTION indicamos elscript que va procesar la informacin que recogemos en el formulario, mientras queMETHOD nos indica si el usuario del formulario va ha enviar datos (post) o

    recogerlos (get). La etiqueta indica el final del formulario.

    A partir de la etiqueta vienen los campos de entrada de datos quepueden ser:

    Cuadro de texto:

    Cuadro de texto con barras de desplazamiento:

    Es de colorrojo

    Casilla de verificacin:

    Botn de opcin:

    Men desplegable:

  • 7/24/2019 Tutorial de PHP y MySQL2

    22/39

    22/39

    Campo oculto:

    Este ltimo tipo de campo resulta especialmente til cuando que remos pasardatos ocultos en un formulario.

    Como habrs observado todos lo tipos de campo tienen un modificador llamadoname, que no es otro que el nombre de la variable con la cual recogeremos losdatos en el script indicado por el modificador ACTIONde la etiqueta FORM, convalueestablecemos un valor por defecto.

    A continuacin veamos un ejemplo, para lo cual crearemos un formulario enHTML como el que sigue y lo llamaremos formulario.htm:

    Tu nombre

    Tu sistema favorito

    Linux

    Unix

    MacintoshWindows

    Te gusta el futbol ?

    Cual es tu sexo?

    Hombre

    Mujer

    Aficiones

    Y ahora creemos el script PHP llamado desde le formulario mis_datos.php:

  • 7/24/2019 Tutorial de PHP y MySQL2

    23/39

    23/39

    if ($_POST) {

    $nombre=$_POST[nombre];

    $sexo=$_POST[sexo] ;

    $edad=$_POST[edad] ;$sistema=$_POST[sistema];

    $futbol=$_POST[futbol];

    $aficiones=$_POST[aficiones];

    echo "Hola " . $nombre . " que tal ests
    \n";

    echo "Eres " . $sexo . "
    \n";

    echo "Tienes " . $edad . "
    \n";

    echo "Tu sistema favorito es " . $sistema . "
    \n";

    if ($futbol) {

    echo "Te gusta el ftbol
    \n";

    } else {

    echo "NO te gusta el ftbol
    \n";

    }

    if ($aficiones != "") {

    echo "Tus aficiones son:
    \n";

    echo nl2br($aficiones);

    } else {

    echo "NO tienes aficiones
    \n";

    }

    }echo "VOLVER AL FORMULARIO"

    ?>

    Una vez rellenados los datos del formulario, pulsamos el botn Enviar datos,con lo que le campo enviar toma lo que su etiqueta value indica, es decirenviar="Enviar datos". En nuestro script lo primero que evaluamos es que sehaya enviado el formulario, y para ello nada mejor que comprobar que la variablede sistema $_POSTno est vaca.

    Tambin podemos fusionar el cdigo de ambos fichero, nos ahorraramos uno.

  • 7/24/2019 Tutorial de PHP y MySQL2

    24/39

    24/39

    Linux

    Unix

    Macintosh

    Windows

    Te gusta el futbol ?

    Cual es tu sexo?

    Hombre

    Mujer

    Aficiones

  • 7/24/2019 Tutorial de PHP y MySQL2

    25/39

    25/39

    La variable de entorno $_SERVER[PHP_SELF], es una variable de entornoque nos devuelve el nombre del script que estamos ejecutando. Y por ltimo, hacer

    notar el uso de la funcin nl2br(),con la cul sustituimos los retornos de carro deltexto, los cules no reconocen los navegadores, por la etiqueta
    .

    Descarga de archivos

    Envo de archivos con el mtodo POST

    PHP es capaz de recibir envos de archivo de cualquier navegador que cumpla la normaRFC-1867 (entre los que se incluyen Netscape Navigator 3 o posterior, Microsoft InternetExplorer 3 con un parche o posterior sin ste). sta caracterstica permite que los usuarios

    enven archivos de texto y binarios. Mediante la autentificacin y funciones de manejo dearchivos de PHP, es posible un control total de quin puede enviar archivos y que se hacecon stos una vez recibidos.

    Es importante destacar que PHP tambin soporta el mtodo PUT para envo de archivostal y como lo utiliza Netscape Composer y el cliente Amaya de W3C. Consulte Soporte delmtodo PUTpara ms detalles.

    Una pgina de envo de archivos se puede crear mediante un formulario parecido a ste:

    Send this file:

    La _URL_ debe tener como destino un script PHP. El input oculto MAX_FILE_SIZE debe

    encontrarse antes del input de tipo "file" para indicar el tamao mximo de archivo que sepuede enviar en bytes

    Aviso

    MAX_FILE_SIZE debe ser consultado por el navegador; aun as es sencillo saltarse estemximo por lo tanto no se debe presuponer que el navegador siempre lo respetar. En

    contrapartida, la configuracin de PHP relativa al tamao mximo no puede ser obviada.

    Las variables definidas para los archivos enviados varan en funcin de la versin y

    configuracin de PHP que se utilice. Las variables de las que hablamos a continuacin serndefinidas en la pgina destino despus de una recepcin de fichero correcta. El array$_FILESse inicializar.

  • 7/24/2019 Tutorial de PHP y MySQL2

    26/39

    26/39

    $_FILEScontienen la informacin sobre el fichero recibido.

    A continuacin se describe el contenido de $_FILES. Se ha tomado el nombre

    'userfile' para el fichero recibido tal y como se usaba en el script de ejemplo anterior:

    $_FILES['userfile']['name']

    El nombre original del fichero en la mquina cliente.

    $_FILES['userfile']['type']

    El tipo mime del fichero (si el navegador lo proporciona). Un ejemplo podra ser"image/gif".

    $_FILES['userfile']['size']

    El tamao en bytes del fichero recibido.

    $_FILES['userfile']['tmp_name']

    El nombre del fichero temporal que se utiliza para almacenar en el servidor el archivorecibido.

    Por defecto, los ficheros sern almacenados en el directorio temporal por defecto del

    servidor a no ser que se especifique otra localizacin con la directiva upload_tmp_direnphp.ini. El directorio temporal por defecto del servidor puede ser modificado cambiando el

    valor de la variable de entorno TMPDIR en el contexto en que se ejecuta PHP La

    configuracin de las variables de entorno no se puede realizar en PHP a travs de la funcinputenv(). Esta variable de entorno puede ser utilizada tambin para asegurarnos que otrasoperaciones con archivos recibidos estn funcionando correctamente.

    Los siguientes ejemplos son validos para versiones de PHP 4 superiores a la 4.0.2. Veanselas funciones is_uploaded_file()y move_uploaded_file().

    El script PHP que recibe el fichero, debe implementar la lgica necesaria para

    determinar que debe ser realizado con el fichero. Se puede utilizar, por ejemplo, lavariable $_FILES['userfile']['size'] para descartar los ficheros demasiado chicos o

  • 7/24/2019 Tutorial de PHP y MySQL2

    27/39

    27/39

    demasiado grandes; por otro lado, se puede usar la variable $_FILES['userfile']['type']

    para descartar los que no se ajusten a algn criterio de tipo. Cualquiera que sea lalgica que utilicemos, se debe borrar o mover el archivo del directorio temporal.

    El archivo ser borrado del directorio temporal al final de la peticin si no se

    ha movido o renombrado.

    3.Comenzando con MySQL

    Funciones PHP de acceso a MySQL

    mysql_affected_rows

    int mysql_affected_rows(int [link_identifier] );

    mysql_affected_rows devuelve el nmero de filas afectado en el ltimo SELECT,UPDATE o DELETE pregunta en el servidor asociado con el identificador de conexinespecificado. Si no se e especifica un identificador de conexin, se asume le de laltima conexin abierta.

    mysql_close

    int mysql_close(int [link_identifier] );

    Devuelve: TRUE si se ha cerrado correctamente, FALSE en caso de error.

    La funcin mysql_close closes la conexin de la base de datos MySQL asociada alidenficador de conexin especificado. Si no se e especifica un identificador deconexin, se asume le de la ltima conexin abierta.

    mysql_connect

    int mysql_connect(string [hostname] , string [username] , string [password] );

    Devuelve: un identificador de conexin, o FALSE en caso de error.

    La funcin mysql_connect establece una conexin a un servidor de MySQL.Todos los argumentos son optativos, y si no se especifican, los valores por defectoson (' el localhost', nombre del usuario del usuario que posee el proceso delservidor, la contrasea vaca). La cadena hostname tambin puede incluir unnmero del puerto, "hostname:port".

    En caso de realizar una segunda llamada a mysql_connect con los mismosargumentos, no se establecer ninguna nueva conexin, sino se devolver elidentificador de conexin de la ya existente.

  • 7/24/2019 Tutorial de PHP y MySQL2

    28/39

    28/39

    La conexin al servidor se cerrar en cuanto la ejecucin del script acabe, amenos que la cerremos antes con la funcin mysql_close.

    mysql_create_db

    int mysql_create_db(string database name, int [link_identifier] );La funcin mysql_create_db intenta crear una nueva base de datos en el

    servidor asociado con el identificado de conexin especificado.

    mysql_db_query

    int mysql_db_query(string database, string query, int link_identifier);

    Devuelve: un identificador de conexin, o FALSE en caso de error.

    Ejecuta una consulta en una base de datos. Si el identificador no se especifica,

    la funcin intenta encontrar una conexin abierta con el servidor.

    mysql_drop_db

    int mysql_drop_db(string database_name, int [link_identifier] );

    Devuelve: TRUE si toda ha ido bien, y FALSE en caso de error.

    Elimina una base de datos del servidor asociado al identificador de conexin.

    mysql_error

    string mysql_error();

    Devuelve el texto asociado al error producido en la ltima operacin realizada por labase de datos.

    mysql_fetch_array

    array mysql_fetch_array(int result);

    Devuelve un array con la informacin correspondiente al resultado de unaconsulta especificado por su identificador o 'false' si ya no hay ms filas.

    Es una versin extendida de mysql_fetch_row ( ). Adems de almacenar losdatos a travs de ndices numricos del array, tambin lo hace a travs de ndicesasociativos, utilizando los nombres de los campos como claves.Si dos o ms columnas del resultado tienen el mismo nombre de campo, la ltimaes la que tiene preferencia. Para acceder a las dems es necesario utilizar el ndicenumrico o construir un alias para la columna:select t1.f1 as foo t2.f1 as bar from t1, t2as foo t2.f1 as bar from t1, t2

    Esta funcin no es ms lenta que 'mysql_fetch_row( )'.Example 1. mysql fetch array

  • 7/24/2019 Tutorial de PHP y MySQL2

    29/39

    29/39

    mysql_insert_id

    int mysql_insert_id(void);

    Esta funcin devuelve el ID (identificador) generado para los camposautonumricos (AUTO_INCREMENTED). El ID devuelto es el correspondiente al dela ltima operacin INSERT.

    mysql_list_dbs

    int mysql_listdbs(void);

    Devuelve un puntero que contiene las bases de datos disponibles para el servidoractual (msql daemon). Este valor se utiliza con la funcin mysql_dbname( ).

    mysql_list_tables

    int mysql_list_tables(string database, , int [link_identifier]);

    Devuelve un identificar, el cual pasaremos a la funcin mysql_tablename paraextraer el nombre de las tablas de la base de datos especificada.

    mysql_query

    int mysql_query(string query, int [link_identifier] );

    Ejecuta una consulta a la base de datos activa en el servidor asociado alidentificador de conexin. Si no se especifica, se utiliza la ltima conexin abierta,se utiliza la ltima conexin abierta. Si no hay conexiones abiertas la funcinintenta establecer una.

    Esta funcin devuelve TRUE o FALSE para indicar si las operaciones UPDATE,INSERT o DELETE han tenido xito. Para la operacin SELECT devuelve un nuevoidentificador de resultado.

    mysql_select_db

    int mysql_select_db(string database_name, int [link_identifier] );

  • 7/24/2019 Tutorial de PHP y MySQL2

    30/39

    30/39

    Devuelve: true on success, false on error

    Establece la base de datos activa en el servidor. Si no se especificaidentificador de conexin se utiliza la ltima conexin abierta. Si no hay conexionesanexin abierta. Si no hay conexiones activas, la funcin intenta establecer una. Apartir de la llamada a mysql_select_db las llamadas a mysql_query( ) actan sobre

    la nueva base de datos activa.

    Conectar a MySQL desde PHP

    Ya tenemos datos en nuestra Base de Datos (BD), as que con el siguientescript nos conectaremos a la BD del servidor MySQLpara obtener los datos de unregistro.Conexin a MySQL

    En la primera lnea del script nos encontramos con la funcinmysql_connect(), que abre una conexin con el servidor MySQL en el Host

    especificado (en este caso la misma mquina en la que est alojada el servidorMySQL, localhost). Tambin debemos especificar un usuario (nobody, root, etc. ),y si fuera necesario un password para el usuario indicado(mysql_connect("localhost", "root", "clave_del_root")). Si la conexin hatenido xito, la funcin mysql_connect() devuelve un identificar de dichaconexin (un nmero) que es almacenado en la variable $conexion, sino hatenido xito, devuelve 0(FALSE).

    Con mysql_select_db()PHP le dice al servidor que en la conexin $conexion nos queremos conectar a la base de datos base. Podramos establecer distintasconexiones a la BD en diferentes servidores, pero nos conformaremos con una.La siguiente funcin mysql_query(), es la que hace el trabajo duro, usando el

    identificador de la conexin ($conexion), enva una instruccin SQL al servidor

  • 7/24/2019 Tutorial de PHP y MySQL2

    31/39

    31/39

    MySQL para que ste la procese. El resultado de sta operacin es almacenado enla variable $res.

    Finalmente, mysql_fetch_array()es usado para mostrar los valores de loscampos devueltos por la consulta ($res). En este ejemplo mostramos los valoresdel registro 0, que es el primer registro 0, que es el primer registro, y mostramos elvalor de los campos especificados.

    MySQL

    1. Instalando MySQL

    Instalar MySQL en su versin para Windows, e ir haciendo pruebas antes de subirnuestras pginas, es bastante sencillo. En la seccin Programas podis encontrarlopara bajarlo.

    Simplemente haced doble click en el programa de instalacin, responded a lastpicas preguntas de dnde lo quieres instalar, etc., y ya est.

    Ahora hay que ponerlo en marcha. Para ello, siempre debe estar ejecutndose(estar en segundo plano) el programa mysqld.exe, situado en el subdirectorio bindel directorio en el que se haya instalado el programa. Con este programa enmarcha, ejecutaremos mysql.exe para ver cmo entrar sentencias SQL, odirectamente podremos probar scripts PHP que conecten con el servidor MySQL.

    Como PHP lleva soporte interno para MySQL, nicamente hemos de acordarnos detener en memoria el programa mysqld.exe, el resto lo hace l solo, como iremosviendo en los siguientes captulos.

    2. Ejecutando acciones desde MySQL

    Una vez instalado y en marcha el programa mysqld.exe, vamos a ver algunasacciones de ejemplo que podemos realizar bajo el entorno de MySQL. Para ello,ejecutamos el programa mysql.exe (tambin en el subdirectorio bin), y entraremos,viendo algo como esto:

    Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1 to server version: 3.23.24-beta-debug

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer

    mysql> _

    Un mensaje de bienvenida, y el prompt del sistema, que ha cambiado por mysql>.Vamos a ver cmo crear una base de datos. La sintaxis ser CREATE DATABASENombreBD, por ejemplo:

    mysql> CREATE DATABASE Prueba;Query OK, 1 row affected (0.72 sec)

    mysql> _

    Con esto, acabamos de crear la base de datos Pruebas, que se habr grabado en el

    subdirectorio data del programa, dentro de un directorio llamado como la base de

  • 7/24/2019 Tutorial de PHP y MySQL2

    32/39

    32/39

    datos, es decir, Pruebas. Podemos ver las bases de datos que existen en Mysql, sinms que hacer:

    mysql> SHOW DATABASES;+----------+

    | Database |+----------+| Prueba || mysql || test |+----------+3 rows in set (0.55 sec)

    mysql> _

    Ahora que sabemos qu bases de datos existen (no borris las otras dos, porqueson propias del programa), vamos a elegir una con la que trabajar, escribiendo

    esto:

    mysql> USE Prueba;Database changedmysql> _

    Con la base de datos que vamos a usar activa, crearemos una tabla, haciendo esto:

    mysql> CREATE TABLE USUARIOS(-> USUARIO VARCHAR(30) NOT NULL,-> EMAIL VARCHAR(50) NOT NULL,-> NOMBRE VARCHAR(20) NOT NULL,

    -> APELLIDOS VARCHAR(40) NOT NULL,-> ICONO INTEGER,-> PRIMARY KEY(USUARIO));

    Query OK, 0 rows affected (0.83 sec)

    mysql> _

    Por claridad, he escrito cada campo en una lnea. Como an no haba escrito elpunto y coma terminador de sentencia SQL, al darle a ENTER l ha puesto la flecha-> y la indentacin.

    Y ahora que hemos creado la tabla, vamos a borrarla para ello, haremos:

    mysql> DROP TABLE USUARIOS;Query OK, 0 rows affected (0.11 sec)

    mysql> _

    Llevad cuidado cuando borris una tabla, pues no quedar ni rastro de ella, as queluego no podris recuperar los datos que hubiera. Hay que estar muy seguro deque se quiere borrar una tabla para hacerlo.

    Y, puestos a borrar, vamos a borrar la base de para lo que haremos:

  • 7/24/2019 Tutorial de PHP y MySQL2

    33/39

    33/39

    mysql> DROP DATABASE Prueba;Query OK, 0 rows affected (0.11 sec)

    mysql> _

    Hemos borrado la base de datos entre otras cosas porque era un ejemplo y

    tampoco era demasiado til O;-)

    Vamos a salir del programa, ejecutando exit.

    Ya sabemos crear la base de datos, elegirla de entre unas cuantas, crear tablas...insertar registros tampoco ser nada complicado, sin embargo, estara bien poderpensar cmo ser la base de datos, escribir en algn fichero los comandos aejecutar, y pasar ese script a MySQL, incluso, con algunas inserciones de registros,si es necesario. Bien, pues de eso es de lo que vamos a ver ahora un ejemplo.

    Con cualquier editor de texto, nos creamos un fichero como este (yo lo he llamadoScriptEjemplo.sql):

    CREATE DATABASE REGISTRO;

    USE REGISTRO;

    CREATE TABLE USUARIOS(USUARIO VARCHAR(30) NOT NULL,EMAIL VARCHAR(50) NOT NULL,NOMBRE VARCHAR(20) NOT NULL,APELLIDOS VARCHAR(40) NOT NULL,ICONO INTEGER,PRIMARY KEY(USUARIO) );

    La extensin no es importante, simplemente ser para recordarnos que ese archivocontiene comandos SQL, pero a MySQL le dar igual que pongas esa, otra oninguna extensin. Lo que le importar es que el fichero exista, y que contengacomandos escritos correctamente y en el orden correcto (por ejemplo, no se puedecrear una tabla antes de elegir la base de datos).

    Lo grabamos donde queramos, y luego ejecutamos:

    mysql < UNIDAD:\RUTA\ScriptEjemplo.sql

    Si todo ha ido bien, MySQL habr hecho todo lo que estuviera escrito en el fichero.Si algo ha fallado, dir qu error ha sucedido. Con la base de datos del ejemplo delscript, volvemos a entrar en MySQL. Escribimos USE Registro; para seleccionar esabase de datos, y vamos a insertar un registro, tal que este (por ejemplo):

    mysql> INSERT INTO USUARIOS(USUARIO,EMAIL,NOMBRE,APELLIDOS,ICONO)-> VALUES(-> 'MADDY',-> '[email protected]',-> 'MADDY',-> 'MADDY',-> 1);

    Query OK, 1 row affected (0.33 sec)

  • 7/24/2019 Tutorial de PHP y MySQL2

    34/39

    34/39

    mysql> _

    Si queremos realizar ahora una consulta, ser tan sencillo como escribir losiguiente:

    mysql> SELECT USUARIO FROM USUARIOS;

    +---------+| USUARIO |+---------+| MADDY |+---------+1 row in set (0.55 sec)

    mysql> _

    Por ltimo, vamos a ver una accin que nos resultar til cuando no nos acordemosde cmo estaba definida una tabla, qu campos tena, de qu tipo, etc., se trata deSHOW COLUMNS FROM tabla. Lgicamente, para ello debemos tener seleccionada

    una base de datos ;-)

    mysql> SHOW COLUMNS FROM USUARIOS;+-----------+-------------+------+-----+---------+-------+---------------------------------+| Field | Type | Null | Key | Default | Extra | Privileges |+-----------+-------------+------+-----+---------+-------+---------------------------------+| USUARIO | varchar(30) | | PRI | | | select,insert,update,references|| EMAIL | varchar(50) | | | | | select,insert,update,references || NOMBRE | varchar(20) | | | | | select,insert,update,references |

    | APELLIDOS | varchar(40) | | | | | select,insert,update,references || ICONO | int(11) | YES | | NULL | | select,insert,update,references|+-----------+-------------+------+-----+---------+-------+---------------------------------+5 rows in set (0.60 sec)

    Y aqu tenemos la informacin que queramos

    Mostrar los datos de una consulta

    Mostrar los datos de una consulta con paginacin.Para ello debe existir una base de datos en mysql con los campos Nombre,Apellidos, Edad, Dni.

  • 7/24/2019 Tutorial de PHP y MySQL2

    35/39

    35/39

    {$pagina=$_GET['pagina'];}else{$pagina=0;

    }$inicio=$pagina * $LongitudDePagina;$cadenasql="select * from personas limit $inicio,$LongitudDePagina";

    $r=mysql_query($cadenasql,$conexion);

    echo "NombreApellidosEdadDNI";

    while ($fila=mysql_fetch_array($r,MYSQL_ASSOC)){echo "{$fila['Nombre']}

    {$fila['Apellidos']}{$fila['Edad']}{$fila['Dni']}

  • 7/24/2019 Tutorial de PHP y MySQL2

    36/39

    36/39

    4.Operaciones con registros

    Aadir registros

    En esta leccin vamos ver como podemos aadir nuevos registros a nuestraBD. La recogida de datos la vamos a hacer a travs de un interfaz de web. Enprimer lugar vamos a crear una pgina web con un simple formulario, con loscampos que deseamos.

    Veamos el siguiente ejemplo.

    Formulario de insercin de datos en PHP

  • 7/24/2019 Tutorial de PHP y MySQL2

    37/39

    37/39

    }?>

    Como se puede ver, se ha creado en el mismo fichero la parte del formulariocon la parte de cdigo de PHP para almacenar los datos del formulario, esta formade trabajar da ms integridad.

    Modificar registros en MySQL

    Primero, para modificar hay que tener permiso para ello en el servidor deBD, el resto nos viene de corrido. Primero seleccionamos el registro que deseamosmodificar, y luego, mandamos una consulta con las modificaciones, o ambas cosasa la vez. Suponemos que las modificaciones las recogemos en un formulario, el

    campo que se debe rellenar forzosamente es el DNI ya que se considera clave.Como en el caso anterior, no se va a detallar el control de errores hasta ese nivel.

    Formulario de modificacin de datos en PHP

  • 7/24/2019 Tutorial de PHP y MySQL2

    38/39

    38/39

    if (!empty($nombre)){

    $asigna.= nombre=$nombre ;}

    if (!empty($edad))

    {$asigna.= ,edad= $edad ;

    }

    if (!empty($apellidos)){

    $asigna.= ,apellidos=$apellidos ;}

    }$cadenasql="update personas

    $asigna

    where dni= $DNI"; //DETALLE de construir la expresin

    $r=mysql_query($cadenasql,$conexion);

    if ($r){echo "Actualizacin realizada";}else{echo "Error bases de datos";

    }}?>

    Nota: para saber si la operacin ha modificado algo, debes usar el

    mysql_affected_rows

    Borrar registros

    El proceso de borrar un registro es idntico al de modificar, solo que en vezde utilizar UPDATE utilizamos DELETE en la sentencia SQL. Por tanto el script

    quedara como sigue.

    Borrado registros de BD por el Dni:

    Formulario de borrado de datos en PHP

  • 7/24/2019 Tutorial de PHP y MySQL2

    39/39