mailxmail - Cursos para compartir lo que sabes PHP y MySQL. Aplicaciones Web: programación PHP I (quinta parte) Autor: Johnny Zulca Mamani 1 mailxmail - Cursos para compartir lo que sabes Presentación del curso Programación de aplicaciones Web con PHP y MySQL. Ahora estudiaremos el Lenguaje de programación PHP. Aprende ahora las formas de escribir las etiquetas PHP. Estudiaremos los formularios Web y PHP, las variables, los tipos de datos de variables y el manejo de archivos. 2 mailxmail - Cursos para compartir lo que sabes 1. Librería Online. PHP y HTML, etiquetas PHP Lenguaje de programación PHP La Aplicación "Librería Online" Tenemos claro el funcionamiento de una página Web dinámica. La información se encuentra almacenada de manera ordenada en una base de datos conocida como MySQL. Sabemos que esta base de datos es la manera ideal de ordenar información, y en ella esta todo el contenido de nuestra página Web. Conoceremos las sentencias básicas de PHP, potente lenguaje del lado del servidor especialmente diseñado para la creación de páginas Web y que puede incluirse fácilmente dentro del código HTML. Por el lado del cliente tenemos un usuario que, vía Internet visita nuestra página Web. Para ello utiliza un navegador preparado para recibir páginas Web en HTML. El problema es en como hacer que se entiendan ambos. Sabemos que nuestra base de datos utiliza un lenguaje llamado SQL, que no tiene nada que ver con la página HTML estándar que nuestro explorador necesita para mostrar al usuario. Para intermediar entre ambos es para lo que esta PHP, diseñado para este propósito y que puede incluirse con suma sencillez dentro de código HTML. PHP y HTML, etiquetas PHP Para insertar un script PHP dentro de cualquier documento HTML, solo es necesario ingresar las etiquetas de PHP, todo lo que vaya entre estas etiquetas es código en PHP, y será interpretado por el servidor Web, devolviendo los resultados que deseamos, las instrucciones se separan con ";" <? etiquetas PHP que código será interpretado como código PHP y lo que esta fuera será interpretado como código HTML ?> Hay varias formas o modos de escribir las etiquetas de PHP: 1 . <? etiquetas cortas ?> el utilizado requiere, configurar en el archivo "config de php" 2. <?php etiquetas estilo XML?> 3. <script language='php'>etiquetas estilo script</script> 4. <% etiquetas estilo ASP %> Práctica 1: miprimerscript.php - Mi primer script <html> <head> <title>Ejemplo de PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php echo 'Mi primer script PHP'; ?> </body> 3 mailxmail - Cursos para compartir lo que sabes </html> 4 mailxmail - Cursos para compartir lo que sabes 2. Declaraciones y formularios web en PHP Declaraciones en PHP echo: imprime la cadena "string" en el navegador ( ; ) para separar declaraciones o bien llamado instrucciones en HTML los espacios fuera de las etiquetas no se toman en cuenta comentarios: - "/*" comentario multilínea "*/" - // comentario de una sola línea Formularios Web y PHP <form name="frmbusqueda" action="procesar.php" method="post"> cajas de texto, botones, listas, opciones </form> Vamos acceder a cada uno de los datos del formulario en el script de php por medio de una variable de cada objeto texto. Para reconocer las variables en PHP, anteponiéndole el signo de "$" seguido del nombre de la variable. $variable -> es una variable (estilo corto) Cuando accedemos a los datos de los campos de texto por medio de variables lo podemos hacer de dos modos: - (corto) utilizamos para la variable el mismo nombre de los campos de texto del formulario HTML, no necesitamos declarar las variables en el código por que son pasadas dentro del post-código (pasar las variable dentro de procedimientos) - (largo) mediante la recuperación de valores almacenados en Arrays y existen dos tipos dependiendo del método que hayamos usado para enviar el formulario si es el método POST o GET POST, iniciar una nueva secuencia GET, añadir dentro de una página ya existente los nuevos datos. 5 mailxmail - Cursos para compartir lo que sabes 3. Variables del modo largo Las variables del modo largo describen lo siguiente: $HTTP_POST_VARS[""], $HTTP_GET_VARS[""] $_POST, $_GET PHP es sensitiva a minúsculas y mayúsculas, se ejecuta mas rápido este modo de variables. Práctica 2: Formulario de envio de datos, procesar.php - Procesar orden formulariocontacto.html <form name="frmContacto" action="procesar.php" method="post"> <table> < t r > < t d c o l s p a n =" 2 " ><h 2 >In g rese sus datos</h2> </td> </tr > <tr><td>Nombres:</td> <td><input type="text" name="nombres" size="20"/></td></tr> <tr><td>Apellidos:</td> <td><input type="text" name="apellidos" size="20"/></td></tr> <tr><td>Comentario:</td><td></td></tr> <tr><td colspan="2"><textarea name="comentario" rows="4" cols="30"></textarea></td></tr> <tr><td colspan="2"><input type="reset" value="limpiar"/>&nbsp;&nbsp;<input type="submit" value="¡enviar ya!"/></td></tr> </table> </form> procesar.php <h4>Datos procesados con exito</h4> <? echo "<b>Su nombre es: </b>".$_POST["nombres"]."<br>"; echo "<b>Sus apellidos: </b>".$_POST["apellidos"]."<br>"; echo "<b>Su comentario es: </b>".$_POST["comentario"]."<br>"; ?> 6 mailxmail - Cursos para compartir lo que sabes 4. Variables y tipos de datos de variables Variables Una variable es un símbolo para recuperar otros datos que pueden estar en un campo de texto u otros datos el nombre de cada variable se llama identificadores (letras, números, _), no pueden empezar con un dígito, son case sensitive se declara una variable también cuando se inicializa la misma. $mivariable1; $mivariable2 = "texto de la variable 2" Existen 2 tipos de variables, las variable locales que solo pueden ser usadas dentro de funciones y las variables globales que tienen su ámbito de uso fuera de las funciones, podemos acceder a una variable global desde una función con las instrucción global nombre_variable;. Tipos de dato de variables De acuerdo a que datos se asignada a una variable se adapta a los tipos de datos siguientes: (integer, double, string, arrays, objetos "almacenar instancias de clases") - Tipo de dato boleano $activo = True; / $activo = False; expresa un valor de verdad - Tipo de dato Enteros $a = 1200; / $a = -125; numero decimales, numero negativos - Enteros punto Flotante $a = 1.254; o también llamados (double) - Cadenas $mensaje = "Esto es una prueba"; se especifican usando uno de dos tipos de delimitadores ( " ) , ( ` ) Algunos atributos más - typecase se utiliza para forzar a un tipo de dato una variable (tipo) - Los literales son datos por si mismo 7 mailxmail - Cursos para compartir lo que sabes 5. Variables predefinidas Variables Predefinidas PHP proporciona una gran cantidad de variables predefinidas a cualquier script que se ejecute. De todas formas, muchas de esas variables no pueden estar completamente documentadas ya que dependen de sobre que servidor se este ejecutando, la versión y configuración de dicho servidor: estas pueden ser: Superglobales: 8 mailxmail - Cursos para compartir lo que sabes 9 mailxmail - Cursos para compartir lo que sabes 6. Variables php yStrings. Constantes variables.php - algunas variables predefinidas <? echo "página actual <b>".$_SERVER["PHP_SELF"]."</b><br>"; echo "nombre del servidor <b>".$_SERVER["SERVER_NAME"]."</b><br>"; echo "documento raíz <b>".$_SERVER["DOCUMENT_ROOT"]."</b><br>"; echo "documento que me llamo <b>".$_SERVER["HTTP_REFERER"]."</b><br>"; echo "dirección IP que me esta viendo <b>".$_SERVER["REMOTE_ADDR"]."</b><br>"; echo "host <b>".$_SERVER["REMOTE_HOST"]."</b><br>"; echo "cabecera actual <b>".$_SERVER["HTTP_USER_AGENT"]."</b>"; ?> Strings (cadena de caracteres) Un string es una cadena de caracteres ya sea solo letras, números o en conjunto. En los strings se pueden hacer concatenaciones con el uso del operador "." (punto). Las cadenas de caracteres se pueden especificar usando uno de los dos tipos de delimitadores ( " ) y ( ` ). $a = "Hola"; $b = $a . "Mundo"; //$b contiene "Hola Mundo" Constantes Las constantes es un identificador que se utilizan para almacenar un valor simple y ese valor ya no se puede cambiar, solo se pueden definir como constantes valores escalares (bolean, integer, float, string). Para obtener el valor de una constante solo es necesario especificar su nombre, las constantes pueden ser accedidas sin tener en cuenta el alcance del ámbito y no pueden ser redefinidas o eliminadas después de establecerse. define("$nombre_var","Ha sido reemplazado"), ejemplo define("CONSTANTE","Hello World"); echo CONSTANTE; //el resultado es "Hello World" 10 mailxmail - Cursos para compartir lo que sabes 7. Operadores Operadores Operadores matemáticos: Operadores de comparación: Operadores lógicos: 11 mailxmail - Cursos para compartir lo que sabes 8. Sentencias condicionales Sentencias Condicionales Las sentencias condicionales nos permiten ejecutar o no ciertas instrucciones dependiendo del resultado de evaluar una condición. Las más frecuentes son la instrucción "if" y la instrucción "switch". Sentencia if ... else if(expresion) sentencias; //primera forma de escribirlo if(expresion) {sentencias;} //segunda forma de escribirlo if(expresion) { //tercera forma de escribirlo sentencias; }else{ sentencias; } Sentencias if ... elseif ... else if(expresion) { //cuarta forma de escribirlo sentencias; }elseif(expresion){ sentencias; }else{ sentencias; } Sentencias switch ... case switch(expresion){ case expresión1: sentencias1; break; case expresión2: sentencias2; break; } 12 mailxmail - Cursos para compartir lo que sabes 9. Uso de operadores, Sentencias condiciones y Switch. Práctica Práctica 3-4: Uso de Operadores, Sentencias Condicionales y Switch (Envío de datos de una orden de pedido calcular costo total pedido, tipo de cliente) miOrderform.htm: Formulario de orden de pedido <form action="procesarorden.php" method="post"> <table border=0 cellpadding="2" cellspacing="0"> <tr bgcolor=#cccccc> <td width=150>Libro</td><td align="center">Cantidad</td></tr> <tr> <td>ActionScript</td> <td align=center><input type="text" name="actionqty" size="3" maxlength="3"></td></tr> <tr> <td>Photoshop</td> <td align=center><input type="text" name="photoqty" size="3" maxlength="3"></td></tr> <tr> <td>Flash MX </td> <td align=center><input type="text" name="flashqty" size="3" maxlength="3"></td></tr> <tr> <td>¿Cómo nos conoció</td> <td><select name="find"> <option value = "a">Soy un cliente habitual</option> <option value = "b">Anuncios de Televisión</option> <option value = "c">Informaciones en internet</option> <option value = "d">Me lo aconsejó un amigo</option> </select> </td></tr> <tr> <td colspan="2" align=center><br><input type="submit" value="Enviar Pedido"></td></tr> </table> </form> procesarorden.php: script php que procesa orden de pedido 13 mailxmail - Cursos para compartir lo que sabes 10. Estructuras de control Estructuras de Control Los bucles o bien llamado estructuras de control nos permiten iterar conjuntos de instrucciones, es decir repetir la ejecución de un conjunto de instrucciones mientras se cumpla una condición. Sentencia while while(condicion) { instrucciones a ejecutar; } Ejemplo: $i = 0; while($i<10) { echo "El valor de i es " . $i . "<br>"; $i++; } Sentencias do ... while do { instrucciones a ejecutar; } while(condicion) Ejemplo: $i = 0; do { echo "El valor de i es " . $i . "<br>"; $i++; } while($i<10) Sentencias for for (inicial ; condicion; contador) { instrucciones a ejecutar; } Ejemplo: for ($i=0;$i<10;$i++) { 14 mailxmail - Cursos para compartir lo que sabes echo "l valor de i es " . $i . "<br>"; } 15 mailxmail - Cursos para compartir lo que sabes 11. Break, Continue. Manejo de archivos Break, Continue Estas dos instrucciones se introducen dentro de la estructura y nos sirven respectivamente para escapar del bucle o saltar a la iteración siguiente. Resulta práctico en algunas ocasiones. Exit: Nos permiten terminan el script php Práctica 5 - uso de las estructuras de control (bucles) bucle_while.php <h2>Lista de categorias (uso de while)</h2> <? $i = 1; echo "<select name=categorias>\n"; while($i<=5) { echo "<option value=$i>Categoria$i</option>\n"; $i++; } echo "</select>"; ?> bucle_for.php <h2>Cuadros de texto (uso de for)</h2> <? for($i=1;$i<=5;$i++) { echo "caja de texto $i <input type=\"text\" name=\"text$i\" value=\"\" size=\"25\" /><br>\n"; }? > Manejo de Archivos Posiblemente en nuestras tareas de programación nos surja la necesidad de obtener datos de un fichero o bien crear uno. PHP nos provee una extensa gama de funciones de acceso a ficheros. Aquí lo que veremos son las funciones básicas; abrir (fopen), cerrar (close), leer (fgets) y escribir (fputs). Esas 4 funciones nos serán útiles para la mayoría de problemas que necesitamos resolver con respecto al acceso de ficheros. 16 mailxmail - Cursos para compartir lo que sabes 12. Lenguaje PHP. Funciones básicas (primera parte) fopen(archivo. modoacceso) Con esta función abrimos el fichero, bien local o una dirección de Internet (http:// o ftp://). La función fopen nos devuelve un valor numérico (indicador de archivo) de tipo integer que nos servirá para hacer referencia al archivo abierto, con fopen podemos abrir ficheros de los siguientes modos: El código es el siguiente: if(!fopen("http://www.ciberaula.com/", "r")){ echo "El archivo no se puede abrir\n"; exit; } fgets (indicador_archivo, longitud) La función fgets nos devuelve una cadena con la longitud específica del fichero al que apunta el indicador de archivo. $archivo = fopen("data.txt", "r"); if($archivo) { while(!feof($archivo)) { $linea = fgets($archivo, 255); echo $linea; } } fclose($archivo); La funcion feof devuelve True si el puntero de lectura/escritura se encuentra al final del fichero y False en caso contrario. fputs(indicador_archivo, cadena) 17 mailxmail - Cursos para compartir lo que sabes fputs(indicador_archivo, cadena) La función fputs escribe una cadena en el fichero indicado. Para escribir en un archivo este debe haber sido previamente abierto. La función fputs devuelve True si se ha escrito con éxito, en caso contrario devuelve False. $archivo = fopen("data.txt", "w"); if($archivo){ fputs($archivo, "Hola Mundo"); } fclose($archivo); fclose(indicador_archivo) Con esta función cerramos el fichero que nos marca el indicador de archivo, devuelve True si el fichero se cierra correctamente y False sino se ha podido cerrar. 18 mailxmail - Cursos para compartir lo que sabes 13. Lenguaje PHP. Funciones básicas (segunda parte) file_exists(fichero) Esta función devuelve True si el archivo especificado existe y False en caso contrario. if(file_exists("data.txt")){ echo "El fichero existe"; }else{ echo "El fichero no existe"; } copy(origen, destino) La función copy copia un fichero de un lugar (origen) a otro (destino), devuelve True si la copia ha tenido éxito y False en caso contrario. if(copy("data.txt","/tmp/data.txt")) { echo "El fichero ha sido copiado con exito"; } else{ echo "El fichero no se ha podido copiar"; } filesize(fichero): Tamaño del archivo unlink(fichero): Elimina un archivo Práctica 6: - manejo de archivos; abrir leer y escribir en un archivo contador.phpimplementar un contador utilizando archivos <? $archivo = "contador.txt"; //abrir archivo como lectura y escritura y para sobre escribirlo $fp = fopen($archivo, "r"); $contador = fgets($fp, 16); fclose($fp); echo "Usted es el Vistante Nº ".$contador; $contador++; $fp = fopen($archivo, "w"); fwrite($fp, $contador, 16); fclose($fp); ?> 19 mailxmail - Cursos para compartir lo que sabes 14. Lenguaje PHP. Funciones básicas (tercera parte) Vamos a ver el caso de subir archivos desde un formulario. Para ello utilizaremos la etiqueta < i n p u t > del tipo <type ="file">. El formulario debe usar el método <method=" post"> de envío de datos y el atributo <enctype="multipart/form-data">, así por ejemplo. <form enctype="multipart/form-data" action="subirarchivo.php" method="post"> <input name="archivo" type="file"> <input type="submit" value="Subir Archivo"> </form> Cuando el formulario es enviado, PHP detectara automáticamente que se esta subiendo un archivo y lo colocara en un directorio temporal en el servidor. Dicho directorio será el que este indicado en el archivo php.ini, o en su defecto en el directorio temporal del sistema. Cuando PHP detecta que se esta subiendo un archivo crea varias variables con el prefijo del nombre del archivo pero con distintas terminaciones. La variable terminada en _name contiene el nombre original del archivo, la terminada en _size el tamaño en bytes de este y la variable terminada en _type nos indicará el tipo de archivo si este es ofrecido por el navegador. Si el proceso de subida no ha sido correcto la variable archivo tomara el valor none y _size será 0 y si el proceso ha sido correcto, pero la variable terminada en _size da 0, quiere decir que el archivo a subir supera el tamaño máximo indicado por MAX_FILE_SIZE en el archivo php.ini. Una vez subido el archivo, lo primero que debemos hacer es moverlo a otro lugar pues sino se hace nada con el, cuando acabe la ejecución de la pagina se borrara. Tipos de Archivos: "image/jpeg", "image/gif", "application/zip", "application/pdf", "application/msword", "application/vnd.ms-excel", "image/png", "text/plain", "text/php", "text/asp", "text/css", "image/pjpeg", "application/x-shockwave-flash" 20 mailxmail - Cursos para compartir lo que sabes 15. Subida de archivos al servidor. Práctica Aquí el ejemplo Práctica 7: - Subida de archivos al servidor subir_archivo.html - Formulario para subir archivos <form action="upload.php" method="post" enctype="multipart/form-data"> <b>Enviar un nuevo archivo: </b> <br> <br> <input name="userfile" type="file"> <br> <br> <input type="submit" value="Enviar"> </form> <? $folder="upload/"; //destino del archivo por ejemplo el directorio upload/ $nombre_File = $_FILES['userfile']['name']; $size_File = $_FILES['userfile']['size']; $tipo_File = $_FILES['userfile']['type']; $temp_File = $_FILES['userfile']['tmp_name']; echo "<h3>Datos del archivo a subir</h3>"; echo "Nombre Archivo ".$nombre_File."<br>"; echo "Tamaño Archivo ".$size_File."<br>"; echo "Tipo Archivo ".$tipo_File."<br>"; if(file_exists($folder)) { if(!move_uploaded_file($temp_File,$folder.$nombre_File)) { echo "Ocurrió algún error al subir el fichero. No pudo guardarse."; } else { echo "El archivo ha sido cargado correctamente."; } }? > - Subida de multiples archivos al servidor NOTA: Con este capítulo hemos llegado al final del curso. 21