Como subir arquivos ao servidor en PHP

HTML, PHP No Comments »

Para poder enviar arquivos entre os datos que dende un formulario HTML se envían ao servidor web, compre facer algun cambio no formulario e ter en consideración varias cousas na parte PHP.

  • No formulario, temos que engadir un novo atributo á etiqueta form, que é enctype, que debe ter o valor “multipart/form-data” (enctype=”multipart/form-data”) para que o formulario sexa quen de enviar os arquivos.
  • O método de envío do arquivo ten que ser POST
  • Podemos engadir antes do campo para seleccionar o arquivo (input de tipo file), un campo oculto de nome MAX_FILE_SIZE que conteña como valor un número indicando o tamaño máximo, en bytes, que o navegador debe admitir como tamaño do arquivo seleccionado. É importante que o nome esté escrito en maiúsuculas e antes do campo de selección do arquivo.
  • <form enctype="multipart/form-data" action="paxina2.php" method="post">
      <input type="hidden" name="MAX_FILE_SIZE" value="50000" />
      <input type="file" name="ficheiro" />
      <input type="submit" value="Enviar arquivo" />
    </form>
    

    Na páxina escrita en PHP, os datos do arquivo NON están na matriz superglobal $_POST, senon na matriz $_FILES, nun elemento con índice igual ao atributo name do campo do formulario HTML onde se seleccionou o arquivo. Ese elemento en $_FILES é de novo un array que contén os seguintes elementos:

  • $_FILES['ficheiro']['name']: O nome que tiña o arquivo subido no ordenador do usuario
  • $_FILES['ficheiro']['type']: O tipo MIME do arquivo subido
  • $_FILES['ficheiro']['size']: O tamaño en bytes do arquivo subido
  • $_FILES['ficheiro']['tmp_name']: O nome temporal que ten o arquivo no servidor web antes de movelo á súa ubicación definitiva (o nome mentras está gardado na carpeta temporal)
  • $_FILES['ficheiro']['error']: Un código de erro asociado o proceso de subida do arquivo, que indica o que pasou nese proceso.
  • Cando o arquivo esté subido á carpeta temporal do servidor, e se fixeran as comprobacións de tipo de arquivo, tamaño, …, que se consideren oportunas, pódese mover a ubicación definitiva coa instrucción move_uploaded_file que verifica antes de copiar o arquivo ao seu destino definitivo que é un arquivo que foi subido. Tamén se pode empregar is_uploaded_file() para comprobar se o arquivo xa está subido á ubicación temporal.

    move_uploaded_file($_FILES['ficheiro']['tmp_name'], "ruta_completa_destino_definitivo");
    

    Máis información na axuda oficial: http://es.php.net/manual/es/features.file-upload.php

    Recuperación de campos con valores múltiples

    HTML, PHP No Comments »

    Nas listas (select) pódense seleccionar varias das opcións (varios valores para un campo SELECT) se dito campo foi creado como de selección multiple (se ten o atributo multiple). Nese caso, os valores das opcións seleccionadas na lista recuperase dende PHP accedendo ao array de elementos do elemento de nome igual ao atributo name do campo SELECT do formulario HTML (e dicir, no elemento de nome igual ao campo do formulario HTML no array superglobal, en lugar de atopar un valor, atopamos un array cos distintos valores, máis de un, seleccionados).

    <form method="GET" action="paxina2.php">
    <select name="lista[]" multiple="multiple"  size="1">
    <option value="valor1">Opcion 1</option>
    <option value="valor2">Opcion 2</option>
    <option value="valor3">Opcion 3</option>
    </select>
    </form>
     foreach ($_GET['lista'] as $elemento)
                echo $elemento;
    

    Hai que ter en conta:

  • Que o nome do campo SELECT no formulario HTML debe rematar en [ ] como se ve no exemplo anterior, para indicar que se envía un array de valores
  • Para recuperar os valores en PHP, onde no caso dos valores simples tiñamos o valor enviado dende o campo ($_GET['nome_campo'] ou $_POST['nome_campo']), ahora temos un array con varios valores ($_GET['nome_campo'][0], $_GET['nome_campo'][1], … tantos como elementos se envíen dende o campo SELECT). E para recuperalos percorremos ese array cun foreach
  • Recuperación de campos segundo o seu tipo

    HTML, PHP No Comments »

    Imos ver que hai que ter en conta á hora de recuperar campos dun formulario dende PHP, segundo o tipo de campo:

  • Nos campos de texto (input text, password, hidden, e textarea) o valor introducido no campo de texto recuperase dende PHP accedendo ao elemento de nome igual ao atributo name do campo do formulario HTML. Se non se introduciu texto no campo, o valor do elemento da matriz superglobal é a cadea baleira. Como xa se dixo, accédese á matriz superglobal que contén os datos con $_GET ou $_POST (segundo o método empregado), ou con $_REQUEST
    <form method="GET" action="paxina2.php">
    <input type="text" name="nome_campo">
    </form>
     echo $_GET['nome_campo'];
  • Nos botóns de opción ou activación (input radio), o valor do botón seleccionado recupérase dende PHP accedendo ao elemento de nome igual ao atributo name do campo do formulario HTML. Só se envia un valor, que será o do elemento seleccionado. Hai que ter en contar que todos os botón do grupo teñen o mesmo nome (o mesmo atributo name), pero distinto valor (para diferencialos).
    <form method="GET" action="paxina2.php">
    <input type="radio" name="nome_campo" value="valor1">Opcion 1
    <input type="radio" name="nome_campo" value="valor2">Opcion 2
    <input type="radio" name="nome_campo" value="valor3">Opcion 3
    </form>
     echo $_GET['nome_campo'];
  • Nos botóns ou casillas de verificación (input checkbox), se o campo foi seleccionado o valor do campo recupérase dende PHP accedendo ao elemento de nome igual ao atributo name do campo do formulario HTML, e se non foi seleccionado non haberá dito elemento na matriz, polo que o que hai que facer e comprobar se dito elemento existe ou non na matriz superglobal para saber se o elementos checkbox foi ou non seleccionado.
    <form method="GET" action="paxina2.php">
    <input type="checkbox" name="nome_campo" value="valor"> SI/NON
    </form>
     if (is_set($_GET['nome_campo']))
               echo $_GET['nome_campo'];
  • Nas listas (select) o valor do elemento seleccionado na lista recuperase dende PHP accedendo ao elemento de nome igual ao atributo name do campo SELECT do formulario HTML.
    <form method="GET" action="paxina2.php">
    <select name="lista" size="1">
    <option value="valor1">Opcion 1</option>
    <option value="valor2">Opcion 2</option>
    <option value="valor3">Opcion 3</option>
    </select>
    </form>
     echo $_GET['lista'];
  • Recuperando os campos do formulario dende PHP

    HTML, PHP No Comments »

    En PHP dispoñemos de dúas matrices superglobales que son $_GET e $_POST, que conteñen os datos enviados dende un formulario segundo o método empregado fose GET ou POST. Polo tanto se o método foi GET os datos enviados dende o formulario estarán na matriz $_GET e se o método foi POST os datos estarán na matriz $_POST. Hai que ter en conta que hai unha terceira matriz que é $_REQUEST que contén os datos, foran estos enviados por GET ou por POST, pero o seu emprego non se recomenda por razóns de seguridade.

    Dado que son matrices, para acceder aos datos dun campo concreto do formulario, empregaremos $_GET['nome_campo'] ou $_POST['nome_campo'] onde nome_campo e o atributo name do campo en HTML.

    <form method="GET" action="paxina2.php">
    <input type="text" name="nome">
    </form>
    
    echo $_GET['nome']; //Imprime o valor que o usuario escribise no campo nome do formulario anterior
    

    E que podo enviar no formulario: campos dos formularios

    HTML No Comments »

    As etiquetas HTML para crear campos dentro dos formularios, que nos server para enviar distintos tipos de información, son as seguintes:

  • etiquetas input de tipo text: Crean unha caixa de texto, na que se pode introducir o texto desexado nunha liña de texto. Pódese indicar o seu nome (atributo name), o valor inicial (atributo value) que será o que se vexa inicialmente dentro do campo de texto, o seu tamaño (atributo size) que será o ancho da caixa de texto, o seu tamaño máximo (atributo maxlength) que será o número máximo de caracteres que se pode escribir nesa caixa de texto.
    <input type="text" name="nome" size="10" maxlength="7" value="valor inicial" />
    
  • etiquetas input de tipo password: Igual que o anterior, xera unha caixa de texto, pero neste o seu contido vese sustituído por * ou outro caracter que impide ver o contido. Empréganse para campos nos que non se quere que o usuario vexa o contido que se escribe como é o caso de campos nos que se introduce un contrasinal.
    <input type="password" name="nome" size="10" maxlength="7" value="valor inicial" />
    
  • etiquetas input de tipo hidden: Igual que as anteriores, pero a caixa de texto permanece oculta, co que o usuario non pode vela nin modificar o seu contido. Empréganse para enviar información no formulario de xeito oculto
    <input type="hidden" name="nome" value="valor inicial" />
    
  • etiquetas input de tipo radio: Crea un botón de opción (ou tamñen chamados de activación), que son aqueles nos que se pode elexir entre varias opciones, seleccionando un pequeno círculo sitado a súa esquerda. Emprégase para escoller unha entre varias opcións prefixadas. Como normalmente van en grupos de máis de un (para ter diversas opción para escoller), é importante saber, que todos os radio-button dun grupo teñen que ter o mesmo nome (atributo name) pero valores distintos (atributo value)
    <input type="radio" name="nome" value="valor 1" /> Opción 1
    <input type="radio" name="nome" value="valor 2" /> Opción 2
    <input type="radio" name="nome" value="valor 3" /> Opción 3
    
  • etiquetas input de tipo checkbox: Crean unha casilla de verificación, empregada cando hay que seleccionar si se cumpre ou non algo.
    <input type="checkbox" name="nome" value="valor" /> SI/NON
    
  • etiquetas input de tipo file: Crean unha caixa de texto e máis un botón para seleccionar un arquivo do noso equipo para enviar ao servidor. Hai que destacar que aínda que ten valor (atributo value), este non se pode establecer en código por cuestións de seguridade, é dicir, non se lle pode asignar a un campo file un valor de xeito estático na creación da páxina. Se fora posible, poderíase crear unha páxina cun campo file co seu valor establecido a un nome de arquivo determinado e sen intervención do usuario enviar dito arquivo ao servidor, todo isto sen que o usuario o soubese nin fixese nada, o que claramente constitúe un problema de seguridade. Para evitar isto, non está permitido darlle valor a este control na etiqueta HTML.
    <input type="file" name="nome" size="50" value="" />
    
  • etiquetas input de tipo submit: Crea un botón de tipo submit, que é un boton que cando se pulsa nel envía de xeito automático os datos dos campos do formulario ao servidor facendo unha petición á páxina indicada no atributo action da etiqueta form. Neste caso o valor indicado no atributo value é o texto que se verá enriba do botón (dentro del).
    <input type="submit" name="nome" size="50" value="Texto do botón" />
    
  • etiquetas input de tipo reset: Crea un botón de tipo reset, que é un botón que canso se pulsa nel baleira o contido de todos os campos do formulario (resetea os campos).
    <input type="reset" name="nome" size="50" value="Texto do botón" />
    
  • etiquetas textarea: Crea un cadro de texto de máis dunha liñá. Esta etiqueta ten etiqueta de peche, e entre a de apertura e peche vai o texto que é o contido que se pode ver no interior do cadro inicialmente. Ten varios atributos, para indicar o nome (atributo name), o número de filas (atributo rows) e o número de columnas (atributo cols)
    <textarea name="nome" cols="50" rows="5">Contido da area de texto</textarea>
    
  • etiquetas select: Permite escoller entre unha lista de opcións. Este etiqueta ten etiqueta de peche, e entre a de apertura e a de peche vai a lista de opcións. Cada unha das opcións crease coa etiqueta option que tamén ten etiqueta de peche. Entre a de apertura e a de peche vai o texto da opción, e no atributo value da opción o valor desa opción. Pódense indicar varios atributos da lista, como son o seu nome (atributo value), o número de opcións visibles na lista (atributo size), e se admite seleción multiple out non (atributo multiple).
    <select name="nome" size="1">
    <option value=""></option>
    <option value="valor1">Opcion 1</option>
    <option value="valor2">Opcion 2</option>
    <option value="valor3">Opcion 3</option>
    </select>
    
  • etiquetas button: Crea un botón sen función asignada, de forma que o pulsar nel non fai nada por defecto.
  • Enviar datos a un servidor web: os formularios

    HTML No Comments »

    Para poder enviar información ao servidor web, e necesario ter un formulario HTML dende onde se envía a información ao servidor. Para definir un formulario en HTML hai que empregar a etiqueta <form>que indica o comezo e final do formulario. Todo o contido no seu interior será enviado ao servidor web cando se envíe o formulario (cando se faga submit do formulario). A etiqueta <form> ten dous atributos necesarios:

  • action que indica a páxina web (normalmente escrita nunha linguaxe de servidor capaz de interpretar os datos enviados, por exemplo en linguaxe PHP) onde se van mandar os datos dos formulario.
  • method que indica o método para enviar esos datos, e que pode ser GET ou POST
  • <form method="POST" action="paxina2.php">
     ....
    </form>
    

    Temos que ter en conta a hora de empregar un método ou outro as características de cada un deles:

  • Co método GET os datos do formulario son enviados na dirección (na URL) da páxina solicitada, polo que os datos son visibles a calquera que vexa dita dirección
  • Co método POST os datos son enviados nas cabeceiras da petición, e polo tanto son menos visibles
  • O tamaño dos datos enviados por GET está limitado polo tamaño máximo das direccións URL de cada navegador, pero en toda caso é un tamaño bastante limitado. Esta limitación non existe na información enviada por POST
  • Se se quere enviar arquivos e obrigatorio empregar o método POST
  • Os datos enviados por GET seguen o formato nome_campo=valor separados uns dos outros polo símbolo & a continuación do nome da páxina e separados desta polo símbolo ? (por exemplo se enviamos os datos a paxina2.php e os nomes dos campos enviados son campo1 e campo2 e os seus valores valor1 e valor2, se facemos a petición e envío de datos por GET a dirección solicitada será paxina2.php?campo1=valor1&campo2=valor2)
  • Como escribir PHP nun arquivo HTML

    HTML, PHP No Comments »

    Nunha páxina que conteña código HTML, podese incluir código PHP que se excutará no servidor antes de enviar dita páxina HTML o navegador do usuario.

    Para incluir dito código PHP temos que ter en conta as seguintes recomendacións:

    - O servidor web, ten que ser quen de interpretar páxinas con código PHP. Para iso deberemos ter instalado no servidor web un módulo (ou cgi) que interprete dito código (podese descargar de balde de http://www.php.net/downloads.php)

    - Temos que cambiarlle a extensión o arquivo que contén dito código, que pasará de ser .html ou .htm a .php (ou a extensión que o servidor web teña asociada co código PHP pois isto é configurable).

    - Temos que incluir na páxina web o código PHP dentro das etiquetas <?php e ?>. Admitense outras etiquetas para indicar que esa parte é codigo PHP pero dependen da configuración do PHP, por iso estas son as recomendadas.

    <?php
         ... codigo PHP ...
    ?>
    

    Todo isto podese ver con máis detalle na axuda oficial:
    http://es.php.net/manual/es/language.basic-syntax.phpmode.php

    Comenzemos polo principio, un pouco de HTML

    HTML No Comments »

    Antes de comezar co PHP, temos que saber algo de HTML, para iso podemos acudir a algun dos moitos manuais que hai en Internet, ou directamente o estandar de W3C.

    Así a especificación da última versión de HTML ata o momento, a HTML 4.01 podemos atopala en
    http://www.w3.org/TR/html401/ (inglés)
    http://html.conclase.net/w3c/html401-es/cover.html#minitoc (castelán)

    A lista de elementos (etiquetas) válidos en dita especificación
    http://www.w3.org/TR/1999/REC-html401-19991224/index/elements
    http://html.conclase.net/w3c/html401-es/index/elements.html (castelán)

    A especificación da versión actual de XHTML, digamos que un HTML baseado en XML no lugar de en SGML, que é a XHTML 1.0
    http://www.w3.org/TR/xhtml1/

    As diferenzas entre HTML 4.01 e XHTML 1.0 máis importantes
    http://www.w3.org/TR/xhtml1/#diffs

    E por último, o validador do W3C que nos dirá se a nosa paxina se axusta ou non a un estandar, e cales son os erros que contén
    http://validator.w3.org/


    Deseñado por Norick - WPMU Theme pack by WPMU-DEV.
    Entries RSS Comments RSS Iniciar sesión