Foros del Web » Programando para Internet » Javascript »

Como hacer que el boton input file sea submit?

Estas en el tema de Como hacer que el boton input file sea submit? en el foro de Javascript en Foros del Web. Me gustaria saber como puedo hacer para que un boton de tipo <input type="file" name="archivo"> pudiera ser submit para despues desde una rutina php pueda ...
  #1 (permalink)  
Antiguo 07/02/2008, 10:42
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Como hacer que el boton input file sea submit?

Me gustaria saber como puedo hacer para que un boton de tipo <input type="file" name="archivo"> pudiera ser submit para despues desde una rutina php pueda hacer esto

<?php
if($_POST["archivo"])
{
//INSTRUCCIONES PHP
}
?>
  #2 (permalink)  
Antiguo 07/02/2008, 10:57
 
Fecha de Ingreso: junio-2003
Ubicación: Cali
Mensajes: 80
Antigüedad: 21 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

mira en esta pagina http://www.w3schools.com/php/php_file_upload.asp, ahi te explica como hacer para que puedas verificar si alguien subio o no un archivo.

Cuando el $_FILES["file"]["error"] es 0 es porque subieron un fichero.
Prueba a imprimir el $_FILES con print_r($_FILES) en el fichero .php para que veas todo lo que tiene.

Última edición por carceron; 07/02/2008 a las 11:04
  #3 (permalink)  
Antiguo 07/02/2008, 10:59
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 23 años, 1 mes
Puntos: 61
Re: Como hacer que el boton input file sea submit?


<form action="javascript:alert('pepe')">
<input type="file" onchange="this.form.submit();" />
</form>
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #4 (permalink)  
Antiguo 07/02/2008, 11:21
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

Lo que puso Karlankas ya lo logre hacer.

ARCHIVO: formulario.php

<script language="javascript">
function submit(boton)
{
document.Individuos.boton.action = "previsor.php";
document.Individuos.boton.submit();
}
</script>

<input type="file" size="23" name="imagen"
style="border: 1px solid #FFFFFF; background:#9CBADE;
font-family: Arial; font-size: 12px; color: white" onChange="submit(this)"/>

ARCHIVO: previsor.php

echo $_FILES["imagen"]["name"];

lo que esta como de color rojo no me funciona

a ver si me pueden ayudar
  #5 (permalink)  
Antiguo 07/02/2008, 11:24
 
Fecha de Ingreso: junio-2003
Ubicación: Cali
Mensajes: 80
Antigüedad: 21 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

le has puesto a la etiqueta FORM lo siguiente?:

ENCTYPE="multipart/form-data"

ejem:
<form action="upload_archivo.cgi" method="post" ENCTYPE="multipart/form-data">


ahh!!! olvidaba decirte, no te recomiendo hacer aquello de que cuando el usuario seleccione el archivo que se envie el formulario, por cuestiones de usabilidad, hay mucha gente que se equivoca seleccionando los ficheros y lo peor que les puede pasar es que tras seleccionar mal el fichero el formulario se les envie sin darles opcion de corregir. "No todos los usuarios manejan el computador bien como tu". Ten eso presente.
  #6 (permalink)  
Antiguo 07/02/2008, 11:26
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

claro que si
  #7 (permalink)  
Antiguo 07/02/2008, 11:34
Avatar de KarlanKas
Moderador extraterrestre
 
Fecha de Ingreso: diciembre-2001
Ubicación: Madrid
Mensajes: 6.987
Antigüedad: 23 años, 1 mes
Puntos: 61
Re: Como hacer que el boton input file sea submit?

Y si cambias el $_FILES por $HTTP_POST_FILES?

Depende del php.ini que admita o no el $_FILES..
__________________
Cómo escribir

No hay pregunta tonta, sino tonto que quiere seguir en la ignorancia.
  #8 (permalink)  
Antiguo 07/02/2008, 11:37
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Hola:

Si tienes posibilidad para subirlo y poderlo checkear podría facilitar la ayuda.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #9 (permalink)  
Antiguo 07/02/2008, 11:47
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

ARCHIVO: formulario.php

<script language="javascript">
function submit(boton)
{
document.Individuos.boton.action = "previsor.php";
document.Individuos.boton.submit();
}
</script>
<form action="formulario_datos.php?Sexo=<?=$_GET["Sexo"]?>" method="post" name="Individuos" onSubmit="return Valida(this);" enctype="multipart/form-data">

<input type="file" size="23" name="imagen"
style="border: 1px solid #FFFFFF; background:#9CBADE;
font-family: Arial; font-size: 12px; color: white" onChange="submit(this)"/>

<iframe src="previsor.php" id="ver" name="ver" style="display: block;
margin: auto; border-width: 2px; width: 250px; height: 172px;">
</iframe>
<input name="EnviarI" type="submit" value="Enviar"
style="border: 1px solid #FFFFFF; background:#9CBADE;
font-family: Arial; font-size: 12px; color: black">
<input name="Reestablecer" type="reset" value="Limpiar"
style="border: 1px solid #FFFFFF; background:#9CBADE;
font-family: Arial; font-size: 12px; color: black"></td>

</form>


El formulario que tengo es el que esta arriba el tiene su boton submit para enviar sus datos y tambien el input file que tengo hice que hiciera el evento submit pero que me redirecciona al archivo previsor.php y ahi me gustaria recepcionar los datos del input file para visualizar la imagen como preview a trraves de un iframe que esta en el archivo que contiene el formulario algo parecido a lo que tiene caricatos.

ARCHIVO: previsor.php

echo $_FILES["imagen"]["name"]; //imprimir el nombre del archivo para prueba
  #10 (permalink)  
Antiguo 07/02/2008, 11:51
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Hola:

El action y el submit son cosas del formulario, así que se te coló un "boton"...

function submit(boton)
{
document.Individuos.action = "previsor.php";
document.Individuos.submit();
}

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #11 (permalink)  
Antiguo 07/02/2008, 11:57
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Hola:

Por cierto, ese boton que pasas como parámetro (me acabo de dar cuenta) son el "input file", entonces para usarlo sería:
boton.form.action ="previsor.php"

O podías pasar como parámetro todo el formulario:
onchange="submit(this.form)"

Otra cosilla... no te acostumbres a usar esos nombres para las funciones (submit()) que te pueden dar algún dolor de cabeza.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #12 (permalink)  
Antiguo 07/02/2008, 12:04
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

ok muchisimas gracias caricatos te lo agredesco y espero que puedas seguir ayudandome en cualquier momento
  #13 (permalink)  
Antiguo 07/02/2008, 13:26
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

ya me envia los datos con la funcion
<script language="javascript">
function enviar()
{
document.Individuos.action = "previsor.php";
document.Individuos.submit();
}
</script>
pero el problema es que no quedan en el que es lo que quiero y se van directamente a la pagina previsor.php
<iframe src="previsor.php" id="ver" name="ver" style="display: block;
margin: auto; border-width: 2px; width: 250px; height: 172px;">
</iframe>
  #14 (permalink)  
Antiguo 07/02/2008, 16:47
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Cita:
Iniciado por javsoft Ver Mensaje
ya me envia los datos con la funcion
<script language="javascript">
function enviar()
{
document.Individuos.action = "previsor.php";
document.Individuos.submit();
}
</script>
pero el problema es que no quedan en el que es lo que quiero y se van directamente a la pagina previsor.php
<iframe src="previsor.php" id="ver" name="ver" style="display: block;
margin: auto; border-width: 2px; width: 250px; height: 172px;">
</iframe>
Exacto, el formulario envía bien los datos... y el secreto está en la sesión php... la primera línea es session_start(), y luego tanto la imagen (el contenido binario) como su tipo (para asignar la cabecera de imagen) se guardan en variables de sesión que luego recibe el fichero que muestra la imagen...
Si crees que la parte en cliente (javascript/html) está controlado, danos un aviso para que algún moderador mueva el tema a php, que evidentemente es lo que resta (tambiín puedes reportarlo tú mismo)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #15 (permalink)  
Antiguo 07/02/2008, 16:53
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

hola fijate que tengo un problema ahora con IE y OPERA pero me gustaria saber si me puedes enviar el codigo fuente y asi pueda acoplarlo a mi necesidad
  #16 (permalink)  
Antiguo 07/02/2008, 17:03
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Hola:

El código es exactamente el que está en el artículo: Revisar las imágenes antes de subirlas, pero en ese código debes suprimir lo referente al chequeo... $onload...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #17 (permalink)  
Antiguo 07/02/2008, 17:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Hola:

javsoft: acabo de ver el comentario que pusiste en el artículo, así que en principio intenta que te funcione, que es como realmente se aprende, y mañana (hoy ya es demasiado tarde) preparo el zip que propones... aunque como puse antes no es más que cortar y pegar... no sabría decirte si la configuración del server también habría que considerar...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #18 (permalink)  
Antiguo 08/02/2008, 10:42
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

hola caricatos mira segun tu ejemplo yo tengo 3 archivos

check_form.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head><title>Formulario</title>

<script type="text/javascript">
function actuar(peso, anchura, altura) {
this.peso.value = peso;
this.ancho.value = anchura;
this.alto.value = altura;
}

function ini() {
document.forms.formu.actualizar = actuar;
window.frames.ver.location.href = "previsor.php";
document.forms.formu.actualizar(0, 0, 0);

}

function validar(f) {
enviar = /\.(gif|jpg|png)$/i.test(f.archivo.value);
if (!enviar) alert("seleccione imagen");
return enviar;
}

function limpiar() {
document.forms.formu.actualizar(0, 0, 0);
f = document.getElementById("archivo");
nuevoFile = document.createElement("input");
nuevoFile.id = f.id;
nuevoFile.type = "file";
nuevoFile.name = "archivo";
nuevoFile.value = "";
nuevoFile.onchange = f.onchange;
nodoPadre = f.parentNode;
nodoSiguiente = f.nextSibling;
nodoPadre.removeChild(f);
(nodoSiguiente == null) ? nodoPadre.appendChild(nuevoFile):
nodoPadre.insertBefore(nuevoFile, nodoSiguiente);
}

function checkear(f) {
function no_prever() {
alert("El fichero seleccionado no es válido...");
limpiar();
}
function prever() {
var campos = new Array("maxpeso", "maxalto", "maxancho");
for (i = 0, total = campos.length; i < total; i ++)
f.form[campos[i]].disabled = false;
actionActual = f.form.action;
targetActual = f.form.target;
f.form.action = "previsor.php";
f.form.target = "ver";
f.form.submit();
for (i = 0, total = campos.length; i < total; i ++)
f.form[campos[i]].disabled = true;
f.form.action = actionActual;
f.form.target = targetActual;
}

(/\.(gif|jpg|png)$/i.test(f.value)) ? prever() : no_prever();
}

function datosImagen(peso, ancho, alto, error) {
function mostrar_error() {
enviar = false;
mensaje = "Ha habido un error (error nº " + error + "):";
if (error % 2 == 1) // tipo incorrecto
mensaje += "\nel fichero no es válido";
error = parseInt(error / 2);
if (error % 2 == 1) // excede en peso
mensaje += "\nla imagen pesa mogollón (" + peso + ").";
error = parseInt(error / 2);
if (error % 2 == 1) // excede en anchura
mensaje += "\nla imagen excede en anchura (" + ancho + ").";
error = parseInt(error / 2);
if (error % 2 == 1) // excede en altura
mensaje += "\nla imagen excede en altura (" + alto + ").";
error = parseInt(error / 2);
alert (mensaje);
limpiar();
}
if (error == 0)
document.forms.formu.actualizar(peso, ancho, alto);
else
mostrar_error();
}
</script>
<style type="text/css">
html {
margin: 0;
}
body {
margin: auto;
background-color: #abcabc;
}
h1 {
text-align: center;
background: #eeeeee url(../dibujos/miemoticon.gif) no-repeat 1% 50%;
color: blue;
margin: 0;
height: 50px;
}
p {
margin: 0;
text-align: justify;
text-indent: 1cm;
}
#intro {
margin: .5cm;
padding: .5cm;
background-color: #defdef;
color: black;
}
</style></head><body onLoad="ini()">
<h1>
Formulario (chequeo de imágenes)
</h1>
<div id="intro">
<p>
En este formulario se puede elegir una imagen del tipo gif/png/jpg, y se mostrará
en un recuadro reservado para la previsualización. Si la extensión no fuera la deseada
se limpiará el campo y no podrá enviarse hasta que la imagen sea de la extensión correcta.
</p>
<p>
Existen también tres campos deshabilitados con las medidas permitidas para esa imagenes
(maxpeso, maxancho y maxalto)
</p>
</div>
<form target="" action="receptor.php" method="post" enctype="multipart/form-data" onSubmit="return validar(this)"
name="formu" style="margin: auto; text-align: center;">
<input name="archivo" id="archivo" type="file" onChange="checkear(this)">
<fieldset style="width: 80%;"><legend>Límites aceptados</legend>
peso máximo:
<input disabled="disabled" name="maxpeso" value="80000" type="text">
anchura máxima:
<input disabled="disabled" name="maxancho" value="640" type="text">
altura máxima:
<input disabled="disabled" name="maxalto" value="480" type="text">
</fieldset>
<fieldset style="width: 80%;"><legend>Valores actuales</legend>
peso actual:
<input readonly="readonly" name="peso" value="0" type="text">
anchura actual:
<input readonly="readonly" name="ancho" value="0" type="text">
altura actual:
<input readonly="readonly" name="alto" value="0" type="text">
</fieldset>
<textarea name="mensaje" style="width: 80%; height: 100px;">comentarios</textarea>
<br>
<button type="submit" id="bb" style="text-align: center;">enviar formulario (pruebas)</button>
</form>
<iframe src="previsor.php" id="ver" name="ver" style="border-width: 2px; margin: auto; display: block; width: 484px; height: 364px;">
</iframe>
<hr>
<p style="text-align: center; color: red; visibility: visible;" id="aviso">
Selecciones una imagen gif/png/jpg
</p>
<br /><div style="z-index:3" class="smallfont" align="center"><!-- google_ad_section_start(weight=ignore) -->LinkBacks Enabled by <a rel="nofollow" href="http://www.crawlability.com/vbseo/">vBSEO</a> 3.1.0<!-- google_ad_section_end --></div></body></html>

receptor.php

<?php
session_start();
$defecto = "webmaster.gif";
$Ok = isset($_FILES["archivo"]);
$url = ($Ok) ? $_FILES["archivo"]["tmp_name"] : $defecto;
list($anchura, $altura, $tipoImagen, $atributos) = getimagesize($url);
$error = (isset($atributos)) ? 0 : 1;
$los_tipos = array("gif", "jpg", "png");
$tipo = ($Ok) ? "image/".$los_tipos[$tipoImagen - 1] : "image/gif";
$fichero = ($Ok && ($error == 0)) ? $_FILES["archivo"]["name"] : $defecto;
$tam = filesize($url);
$OkTam = isset($_POST["maxpeso"]);
$OkAncho = isset($_POST["maxancho"]);
$OkAlto = isset($_POST["maxalto"]);
$maxTam = ($OkTam) ? (int) $_POST["maxpeso"]: 100000;
$maxAncho = ($OkAncho) ? (int) $_POST["maxancho"]: 640;
$maxAlto = ($OkAlto) ? (int) $_POST["maxalto"]: 480;
$error += ($tam <= $maxTam) ? 0 : 2;
$ancho = ($error == 1) ? 0 : $anchura;
$alto = ($error == 1) ? 0 : $altura;
$error += ($ancho <= $maxAncho) ? 0 : 4;
$error += ($alto <= $maxAlto) ? 0 : 8;
$datos = ($error == 0) ? $url : $defecto;
$onload = ($Ok) ? "onload='parent.datosImagen($tam, $ancho, $alto, $error)'": '';
$datos_imagen = fread(fopen($datos, "rb"), filesize($datos));
$_SESSION["cont"] = $datos_imagen;
$_SESSION["tipo"] = ($error == 0) ? $tipo : "image/gif";
?>
<html>
<head>
<style type="text/css" >
html {
margin: 0;
height: 100%;
}
body {
height: 100%;
background-image: url(previendo.php?dato=<?=$fichero;?>);
background-repeat: no-repeat;
background-position: center center;
}
</style>
</head>
<body <?=$onload;?>>

</body>
</html>

previsor.php

<?php
session_start();
$url = ($_SESSION["cont"] == "")
? fread(fopen("webmaster.gif", "rb"), filesize("webmaster.gif"))
: $_SESSION["cont"];
$tip = ($_SESSION["tipo"] == "")
? "image/gif"
: $_SESSION["tipo"];
header("Content-type: $tip");
echo $url;
session_destroy();
?>
  #19 (permalink)  
Antiguo 08/02/2008, 10:44
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

Entonces me gustaria saber si el codigo esta correcto. El servidor esta bien configurado
  #20 (permalink)  
Antiguo 08/02/2008, 17:09
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 10 meses
Puntos: 1284
Re: Como hacer que el boton input file sea submit?

Hola:

Voy a darte dos noticias, una buena y otra mala... voy a empezar por la buena, y es que probé el código que tienes (el que has pegado) en mi "localhost" con explorer, y funciona perfectamente... claro que hay una mala noticia, que supongo que te "cabreará"... y es que el fichero que has puesto como "receptor.php", debería ser el receptor normal que tienes, pero en la previsualización debería llamarse "previsor.php" y el que se llama "previsor.php" debería ser "previendo.php", o sea que con un par de cambios de nombre de ficheros consigues tu objetivo... y el que se llama receptor.php que sea el definitivo (bueno, los nombres debes decidirlo tú)...

Sobre subir un .zip, lo preparé y cuando lo iba a subir, descubrí que ya lo había hecho... el enlace es: check_form.zip... ¡Quién sabe cuando lo habré subido...!

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #21 (permalink)  
Antiguo 11/02/2008, 08:45
 
Fecha de Ingreso: junio-2006
Mensajes: 126
Antigüedad: 18 años, 7 meses
Puntos: 0
Re: Como hacer que el boton input file sea submit?

Gracias Caricatos te lo agradesco!!!!!! Mil gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:03.