Recoger datos de un formulario en el servidor con PHP

En este artículo voy a explicar como se recogen los datos de diferentes tipos de controles (radio, checkbox, select, etc.) de un formulario enviados a través de los métodos POST y GET con PHP.

Pues bien, para empezar lo primero es tener un formulario con los campos que queremos enviar. Pondremos un campo de cada tipo:

<form method="post" action="enviar.php">
	<div>
		<strong>Campo de texto</strong>
		<input type="text" name="campoTexto">
	</div>
	<div>
		<strong>Campo contraseña</strong>
		<input type="password" name="campoPassword">
	</div>
	<div>
		<strong>Campo checkbox</strong>
		<input type="checkbox" name="campoCheckbox" value="un_valor">
	</div>
	<div>
		<strong>Campo con varios checkbox</strong>
		Opción 1<input type="checkbox" name="camposCheckbox[]" value="1" checked>
		Opción 2<input type="checkbox" name="camposCheckbox[]" value="2">
		Opción 3<input type="checkbox" name="camposCheckbox[]" value="3">
	</div>
	<div>
		<strong>Campo oculto</strong>
		<input type="hidden" name="campoOculto" value="valor_oculto">
	</div>
	<div>
		<strong>Campo SELECT</strong>
		<select name="campoSelect">
			<option value="1">Opción 1</option>
			<option value="2">Opción 2</option>
			<option value="3" selected>Opción 3</option>
		</select>
	</div>
	<div>
		<strong>Campo SELECT Multiple</strong><br/>
		<select name="campoSelectMultiple[]" multiple>
			<option value="1" selected>Opción 1</option>
			<option value="2">Opción 2</option>
			<option value="3" selected>Opción 3</option>
		</select>
	</div>
	<div>
		<strong>Campo TEXTAREA</strong><br/>
		<textarea name="campoTextarea"></textarea>
	</div>
	<div>
		<input type="submit" value="Enviar">
	</div>
</form>

El formulario ser vería así:

Formulario con distintos tipo de controlesAhora veremos como recogemos todos los datos enviados.  Si vemos la etiqueta <form> tiene 2 atributos, method que indica si los parámetros se pasan por POST o por GET, y action que indica la url o  página recibe los datos y los gestiona.

Cuando se envían datos desde un formulario a PHP, PHP las guarda en un array asociativo con claves que coinciden con el atributo name de cada control del formulario. Este array asociativo será $_POST si la petición es por POST o $_GET si es por GET. En el ejemplo anterior la petición es a través de POST.

Ahora creamos el archivo enviar.php especificado en el atributo action del formulario, el cual recoge los datos. En los comentarios esta todo explicado.

<?php
//enviar.php

/*
Primero comprobamos que la variable $_POST este inicializada
ya que podrían no haberse enviado datos (por ejemplo si se
accede a /enviar.php directamente desde el navegador).
*/
if(isset($_POST)){
	echo "Campo de texto enviado: ".$_POST["campoTexto"]."<br/>";

	echo "Campo de contraseña enviado: ".$_POST["campoPassword"]."<br/>";

	if(isset($_POST["campoCheckbox"])){
		echo "Campo de checkbox enviado: ".$_POST["campoCheckbox"]."<br/>";
	}else{
		echo "El campo de checkbox no ha sido activado. Por lo tanto, no
		se ha recibido ningún valor de este.<br/>";
	}

	if(isset($_POST["camposCheckbox"])){
		echo "Campos de checkbox enviados:";
		/*
		Los distintos valores se enviar en un array, ya que los 3 checkbox
		tienen el nombre camposCheckbox[] que hace referencia a un array en el cual
		se guardan los valores de los checkbox activados en una posición numerica.
		Con foreach recorremos el array de la primera a la última posición.
		*/
		foreach($_POST["camposCheckbox"] as $valorCheckbox){
			echo " ".$valorCheckbox;
		}
		echo "<br/>";
	}else{
		echo "Ninguno de los 3 checkbox ha sido activado.";
	}

	echo "Campo oculto enviado: ".$_POST["campoOculto"]."<br/>";

	echo "Campo SELECT enviado: ".$_POST["campoSelect"]."<br/>";

	if(isset($_POST["campoSelectMultiple"])){
		echo "Campos de SELECT Multiple enviados:";
		/*
		Es un array como los checkbox, y  funciona exactamente igual.
		*/
		foreach($_POST["campoSelectMultiple"] as $valorSelectMultiple){
			echo " ".$valorSelectMultiple;
		}
		echo "<br/>";
	}else{
		echo "Ninguno de las 3 opciones de la lista han sido seleccionadas.";
	}

	echo "Campo TEXTAREA enviado: ".$_POST["campoTextarea"]."<br/>";
}else{
	echo "No se han enviado datos por POST.";
}

Si la petición fuese a través del método GET sería exactamente igual, pero utilizando la variable $_GET en lugar de $_POST.

Todo el código ha sido creado y testeado por mí.

2 respuestas a “Recoger datos de un formulario en el servidor con PHP

  1. Anónimo 29/09/2015 / 02:52

    Saludos mi problema es que en el html que agradece por mandar formulario ahi sí aparecen impresos mis productos, pero en el mail que llega a usuario, solo aparece el último de los productos que seleccionó, como puedo mandar la misma lista que ya recoge, pero al conrreo con el resto de la info?
    gracias

  2. Miss Kakko 03/03/2015 / 07:07

    Muy buen post, muy bien explicado. Me será muy útil, muchas gracias.

Deja un comentario