formulario php

  • Autor Autor ismaelroldan
  • Fecha de inicio Fecha de inicio
I

ismaelroldan

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
buenas, me gustaria saber que codigo php necesito para que mi formulario me permita recibir los documentos tipo file de mi formulario html.

muchas gracias y es urgente!!
 
html
HTML:
<form action="formulario.php" method="post">
	<input type="file" name="archivo" /><br />
	<input type="submit" value="Enviar"/>
</form>

formulario.php
PHP:
<?php
	$filename = basename($_FILES['archivo']['name']);					//Nombre del archivo (ejemplo: mi_archivo.txt)
	$size = $_FILES['archivo']['size'];									//Tamaño del archivo en bytes
	$tmp_name = $_FILES['archivo']['tmp_name'];							//Ruta temporal del archivo
	$type = $_FILES['archivo']['type'];									//Tipo de archivo (ejemplo: image/jpeg)
	$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));	//Extencion (ejemplo: txt)
?>

Saludos!!
 
Última edición:
lo pego tal cual o tengo que sustituir algun campo?¿ es que lo he pegado tal cual y sigue sin llegarme ningun archivo
 
lo pego tal cual o tengo que sustituir algun campo?¿ es que lo he pegado tal cual y sigue sin llegarme ningun archivo

tal cual está te debe de funcionar, claro también poniendo los mismo datpos que estan ahi del html a tu formulario ya que archivo es el nombre del input:file del formulario en el ejemplo que puse y con ese mismo nombre lo tienes que recibir en el php.
 
<?php
//recogemos los datos

//la funcion recogedato comprueba si se ha recibido un dato y recoge su valor.
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$comentario = $_POST['comentario'];
$ciudad = $_POST['ciudad'];
$filename = basename($_FILES['archivo']['name']); //Nombre del archivo (ejemplo: mi_archivo.txt)
$size = $_FILES['archivo']['size']; //Tamaño del archivo en bytes
$tmp_name = $_FILES['archivo']['tmp_name']; //Ruta temporal del archivo
$type = $_FILES['archivo']['type']; //Tipo de archivo (ejemplo: image/jpeg)
$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));

$algunerror = FALSE;




//ponemos los datos obligatorios nombre y archivo.y mostramos un texto sino se cumple
if($nombre==""){
$algunerror = TRUE;
echo "<p class=\"erroneo\">No ha introducido su nombre.</p>\n";
}


if ($algunerror){
echo "<p>&nbsp;</p>\n";
echo "<p>No se ha podido enviar el mensaje por los errores que se detallan arriba.</p>\n";
echo "<p>Por favor, vuelve a rellenar el formulario.</p>\n";
echo "<p><a href=\"Formulario.html\">Volver al formulario</a></p>\n";
}else{
$para="ismael.menendez@hotmail.es";
$asunto="Contacto ZIG-ZAG - consulta sobre".$Nombre;
$mensaje="Datos del formulario de contacto:\n".
"nombre: ".$nombre." \n".
"apellidos: ".$apellidos." \n".
"telefono: ".$telefono."\n".
"email: ".$email." \n".
"comentario: ".$comentario." \n";
"archivo: ".$filename." \n";

mail($para, $asunto, $mensaje);
echo "<p>Su mensaje se ha enviado correctamente. Gracias por contactar nosotros.</p>\n";
echo "<p>Me pondré en contacto lo antes posible con usted.</p>\n";
echo "<p><a href=\"index.html\">Volver a la pagina</a></p>\n";
}
?>
</body>
</html>
 
Échale un vistazo a este artículo:
Formulario de contacto: Añadiendo el adjunto | Emilio Cobos-CMC

Básicamente el contenido relevante es este:

PHP:
	if( isset($_FILES['adjunto']) && $_FILES['adjunto']['error'] === 0) {
		$hay_adjunto = true;
		$adjunto = $_FILES['adjunto'];
		$boundary = md5(time());

		// Indicamos una separación
		$data .= "--".$boundary. "\r\n";

		// Y el comienzo del HTML
		$data .= "Content-Type: text/html; charset=\"utf-8\"\r\n";
		$data .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
	}
// ...

		if( $hay_adjunto ) {
			$cabeceras .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"";

			// Si hay archivo
			// También añadimos al cuermo del mensaje un separador 
			$data .= "\r\n";
			$data .= "--" . $boundary . "\r\n";
			// Y el archivo con su correspondiende Content-Type (octet-stream para aplicaciones) y nombre
			$data .= "Content-Type: application/octet-stream; name=\"".$adjunto['name']."\"\r\n";
			$data .= "Content-Transfer-Encoding: base64\r\n";

			// Indicamos que es un adjunto
			$data .= "Content-Disposition: attachment\r\n\n\r";

			// Vamos con el adjunto: chunk_split transforma la cadena en base64 en estandar
			$data .= chunk_split(base64_encode(file_get_contents($adjunto['tmp_name']))) . "\r\n";

			// Acabamos el mensaje
			$data .= "--" . $boundary . "--";
		} else {
			// Si no lo hay nos bastará con decir que es un mensaje HTML
			$cabeceras .= "Content-type: text/html; charset=utf-8\r\n";
		}

Es decir: se transforma el archivo a base64 y se aplica la función chunk_split para que la cadena base64 coincida con la semántica del RFC 2045 (Vamos, para que sea legible por todos los correos).

El boundary es una cadena aleatoria usada para separar los contenidos de diferente content-type dentro del mensaje.
 
algo mas facilito?¿ porque entre tanto codigo no me entero soy muy novato
 
algo mas facilito?¿ porque entre tanto codigo no me entero soy muy novato

La verdad no, los codigos que te pasaron son sencillos pero deberías aprender un poco al menos la estructura si quieres manejar estos codigos. De lo contrario te recomiendo que pidas ayuda a un user a que te instale el formulario. Yo podría hacerlo sin costo ni nada, mandame pm. Saludos
 
Nadie te dio la respuesta que corresponde, la primera esta casi bien, pero sigue estando mal, jaja
Para poder recibir el/los archivos ingresados en el formulario, en el mismo hay que definir el enctype de la siguiete forma, si no nunca se enviara el archivo:

HTML:
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

El enctype es la parte importante aca.

Despues si desde php vas a tener acceso como te dijeron

PHP:
 <?php
    $filename = basename($_FILES['archivo']['name']);                    //Nombre del archivo (ejemplo: mi_archivo.txt)
    $size = $_FILES['archivo']['size'];                                    //Tamaño del archivo en bytes
    $tmp_name = $_FILES['archivo']['tmp_name'];                            //Ruta temporal del archivo
    $type = $_FILES['archivo']['type'];                                    //Tipo de archivo (ejemplo: image/jpeg)
    $ext = strtolower(substr($filename, strrpos($filename, '.') + 1));    //Extencion (ejemplo: txt)
?>

Ese codigo php debe estar en el archivo donde apunta el form, en el ejemplo que puse seria en "upload_file.php"
 
Para poder recibir el/los archivos ingresados en el formulario, en el mismo hay que definir el enctype de la siguiete forma, si no nunca se enviara el archivo

Cierto, es que yo me fui mas a como recibirlo (que es lo que preguntaba) y suponiendo que el formulario ya lo tenia solo lo puse como ejemplo para que viera el nombre del file y se me olvido poner eso 😀

Saludos!!
 
esto si lo entiendo el formulario html esta hecho con el enctype y eso lo entiendo bien. El problema es que en el codigo php lo pongo tal cual me lo dices o tengo que sustituir algun nombre? te lo digo porqie el "name" en el html no coincide con el nombre de ninguna variable php!!

gracias compi🙂
 
Todo en bandeja?? :S

En el ejemplo, o a la propiedad name del input file le pones "archivo" y usas el codigo PHP como esta o dejas el form como esta y en el codigo PHP reemplazas en todo lugar donde dice "archivo" por "file"
 
Que raro, yo ya le habia conetstado diciendolo basicamente lo mismi, pero parace que cmo por obra del espiritu santo desaparecio mi comentario :ambivalence:
 
REVIVO este Tema porque quiero hacerles una pregunta...
Hay alguna forma de personalizar el correo que envia? ya sea por tablas, html, css?

Por lo que veo este formulario solo enviara los datos en texto plano.

Gracias

html
HTML:
<form action="http://forobeta.com/formulario.php" method="post">
	<input type="file" name="archivo" /><br />
	<input type="submit" value="Enviar"/>
</form>

formulario.php
PHP:
<?php
	$filename = basename($_FILES['archivo']['name']);					//Nombre del archivo (ejemplo: mi_archivo.txt)
	$size = $_FILES['archivo']['size'];									//Tamaño del archivo en bytes
	$tmp_name = $_FILES['archivo']['tmp_name'];							//Ruta temporal del archivo
	$type = $_FILES['archivo']['type'];									//Tipo de archivo (ejemplo: image/jpeg)
	$ext = strtolower(substr($filename, strrpos($filename, '.') + 1));	//Extencion (ejemplo: txt)
?>

Saludos!!
 
Que necesitas hacer?
 
por lo menos que le llegue con un logo o una imagen desde el formulario. Personalizarlo un poco mas...
 
Atrás
Arriba