Foros del Web » Programando para Internet » Javascript »

Mirar en la base de datos antes de subir una foto

Estas en el tema de Mirar en la base de datos antes de subir una foto en el foro de Javascript en Foros del Web. Muy buenas a todos, miren tengo el siguiente problema: voy a ser lo más breve posible. Resulta que tengo un form que envia una foto, ...
  #1 (permalink)  
Antiguo 17/06/2004, 10:25
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
Mirar en la base de datos antes de subir una foto

Muy buenas a todos, miren tengo el siguiente problema:
voy a ser lo más breve posible. Resulta que tengo un form que envia una foto, al dar al submit la sube al servidor, compruebo en una BD si existe, y si existe devuelvo error el archivo existe y si no lo guardo en Bd y en su carpeta.

Funciona perfectamente, pero resulta que como dispongo de muchas fotos, pues casi seguro que existe y me gustaría ahorrarle ese tiempo de espera al usuario que colabora subiendome una foto. Porque ha de esperar a que suba el tamaño (varios cientos de KB) para despues recibir el archivo existe.

Para eso yo había pensado en subir primero el nombre de la foto, comprobarlo en la BD y si existe, el mensaje de que existe será mas rápido y si no existe, pues entonces que suba la foto. Pero tal y como tengo hecho el form, no se puede ya que manda la foto .

y mi pregunta es: ¿como podría mandar primero sólo el nombre de la foto?
este es parte del form que utilizo:

<form action="insert.asp" method="post" enctype="multipart/form-data" onsubmit="return Validator(this)" name="Form1">
<td>Archivo :</font></td>
<td><input type="file" name="file" size="38"></td></tr>
<td>Nick :</font></td>
<td><input type="text" name="name" size="35" value="nick"></td>
<td><p align="right"><select name="tipo" style="font-size: 9pt">
<option value="audio">Audio</option>
.........................
............................
<option selected value="cero"> - Tipo -</option>
</select></p></td></tr>
<td> </td><td colspan="2"><br>
<p align="center">
<input type="submit" value="Enviar" name="B1">
</form>

Se puede hacer que mire en la BD en el script del validator para que devuelva true o false antes de enviar la foto???

Gracias de antemano
salu2
__________________
Colaborador de
www.alicun.com

Última edición por eusol; 17/06/2004 a las 14:55
  #2 (permalink)  
Antiguo 17/06/2004, 10:31
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Podrías hacer un primer paso en el que se compruebe sólo el nombre, y si es correcto, redirija a la pág que tienes, en la que se inserta la imagen.

espero haberte ayudado

COMPARTIENDO, MEJORAMOS TODOS
  #3 (permalink)  
Antiguo 17/06/2004, 12:43
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
hazlo igual que la foto, pero guarda en otro campo de la BD el nombre
  #4 (permalink)  
Antiguo 19/06/2004, 05:20
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
Bueno despues de muchas vueltas la cosa quedó asi:
archivo comprueba.html
Código PHP:
<script Language="JavaScript">
function 
Validator(theForm)
{
  if (
theForm.file.value == "")
  {
    
alert("Por favor seleccione un archivo.");
    
theForm.file.focus();
    return (
false);
  }  
  if (
theForm.name.value == "")
  {
    
alert("Escriba un Nick (nombre).");
    
theForm.name.focus();
    return (
false);
  }  
  if (
theForm.tipo.value == "cero")
  {
    
alert("Por favor seleccione el tipo de portada.");
    
theForm.tipo.focus();
    return (
false);
  }   
  return (
true);
}
function 
verificar(){
  var 
= (screen.width)-600;
  var 
= (screen.height)-400;
  var 
posicion "left="+X+",top="+Y;
  var 
ruta document.formulario.file.value;
  var 
nombre ruta.split('\\');
  var 
nombre nombre[nombre.length-1];
  var 
tipo document.formulario.tipo.value;
  var 
direccion 'comprueba.asp?nombre=' nombre '&tipo=' tipo ''
  
var referenciaVentana window.open(direccion,'Preg','toolbar=no,location=no,directories=no,status=no, menubar=no,scrollbars=no,resizable=no,width=350,height=150,'+posicion);
}
function 
borrar(){
  
document.formulario.archivo.value "";
  return 
false;
}
</script>
<title>Subir portadas</title>    
<form name="formulario" action="insert.asp" method="get" enctype="multipart/form-data" onsubmit="return Validator(this)">    
    <td><font color="#729DF0">Archivo :</font></td>
    <td style="padding: 0" colspan="2"><input type="file" name="file"  onchange="return verificar()" onKeyDown="return borrar()" onKeyUp="return borrar()" size="38"></td></tr>
    <td><font color="#729DF0">Nick :</font></td>
    <td><input type="text" name="name" size="35" value=""></td>
    <td><p align="right"><select name="tipo" style="font-size: 9pt">
    <option value="audio">Audio</option> 
    <option value="vhs">Vhs</option> 
    <option value="dvd">Dvd</option> 
    <option value="divx">Divx</option> 
    <option value="carteles">Carteles</option> 
    <option value="ps1">Ps1</option> 
    <option value="ps2">Ps2</option> 
    <option value="xbox">Xbox</option> 
    <option value="dream">Dreamcast</option> 
    <option value="gamecube">Gamecube</option> 
    <option value="pcplay">Juegos Pc</option> 
    <option value="pcsoft">Software</option>
    <option selected value="cero"> - Tipo -</option> 
</select></p></td></tr>
<input type="hidden" name="fecha" value="<%=date()%>">        
<input type="hidden" name="url" value="/public/uploaded/">        
<td> </td><td colspan="2"><br>
<p align="center">  
<input type="submit" value="Enviar" name="Submit" disabled> 
<input type="reset" value="Restablecer" name="B2"> 
</form> 
archivo comprueba.asp
Código PHP:
<%
'tipo = Request.QueryString("tipo")
fileName = Request.QueryString("nombre")
    Dim Conexion,Tabla 
Set Conexion = Server.CreateObject("ADODB.Connection") 
Set Tabla = Server.CreateObject("ADODB.Recordset") 
Conexion.Open "Driver={Microsoft Access Driver (*.mdb)}; " & "Dbq=" & Server.MapPath("/mdb-database/portadas.mdb") 
 Dim Temp 
 Temp="Select * From "& Request.QueryString("tipo") &" Where pal='" & fileName & "'"
 Tabla.Open Temp,Conexion        
accion = ""
mensaje = ""
if NOT tabla.EOF Then
mensaje = "<center><font size='
1' face='VerdanaArialHelveticasans-serif'>"
mensaje = mensaje & "El Archivo <b><br>" & fileName & "</b><br> ya existe en la BBDD<br><br>"
mensaje = mensaje & "<input type='
button' name='Submit' value='Cerrar' onclick='javascript:window.close()></font></center>"
response.write mensaje
else
accion = "
correcto()"
End if
Tabla.Close
%>
<html>
<head>
<title>Verificando...</title>
<script language="
JavaScript">
function correcto(){
opener.document.formulario.Submit.disabled = false;
window.opener.focus();
window.close();
}
</script>
</head>
<body OnLoad="
<%= accion %>">
<%= mensaje %>
</body>
</html> 
Si el usuario pincha primero en tipo, funciona, pero si le da primero a seleccionar archivo, falla porque el nombre de tabla va escrito en tipo.
¿Hay alguna forma de que si le da primero a seleccionar archivo le salga un alert diciendole que escriba algo en tipo?.

OK salu2
__________________
Colaborador de
www.alicun.com
  #5 (permalink)  
Antiguo 19/06/2004, 05:43
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Para eso no hace falta alert, simplemente diseña el formulario de modo que vaya todo por orden y explica al usuario el proceso "Primero, haga usted esto; Segundo, esto otro; ..."
  #6 (permalink)  
Antiguo 19/06/2004, 06:05
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola a todos:

eusol: puedes tener el campo "disabled" y habilitarlo con el cambio del select...

<input type="file" name="file" onchange="return verificar()" onKeyDown="return borrar()" onKeyUp="return borrar()" size="38" "disabled">

<select name="tipo" style="font-size: 9pt" onchange="file.disabled = false">

Creo que sería mejor con un chequeo del value (que no sea "cero")

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #7 (permalink)  
Antiguo 19/06/2004, 06:15
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
pues no se pone en disabled el file (examinar), deja mirar en el pc y sale disparado al error por no llevar el tipo

no le faltará algo aquí:

<input type="file" name="file" onchange="return verificar()" onKeyDown="return borrar()" onKeyUp="return borrar()" size="38" "disabled">
__________________
Colaborador de
www.alicun.com

Última edición por eusol; 19/06/2004 a las 06:16
  #8 (permalink)  
Antiguo 19/06/2004, 06:22
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
Creo que ya está,, le quite las comillas a disabled

¿puede ser?

Bueno despues de terminarlo todo y subirlo a la web, me encontré con un problema gordo.
resulta que el window.open (pop up) lo corta casi todo el mundo con los programas que todos conocemos, y no me vale.

Se puede hacer lo mismo sin pop up o con otro sistema?

gracias
salu2
__________________
Colaborador de
www.alicun.com

Última edición por eusol; 19/06/2004 a las 10:05
  #9 (permalink)  
Antiguo 19/06/2004, 10:11
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
Además del codigo de arriba, en el insert.asp lleva además de la comprobación en la base de datos, esto:
Código PHP:
........................
else
accion "correcto()"
............
<
script language="JavaScript">
function 
correcto(){
opener.document.formulario.Submit.disabled false;
window.opener.focus();
window.close();
}
</script>
</head>
<body OnLoad="<%= accion %>"> 
espero que tenga solución con el curro que lleva..
__________________
Colaborador de
www.alicun.com
  #10 (permalink)  
Antiguo 22/06/2004, 10:54
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
Alguien me puede ayudar o lo olvido?
O lo posteo denuevo con lo ultimo que falta?

gracias
__________________
Colaborador de
www.alicun.com
  #11 (permalink)  
Antiguo 22/06/2004, 14:27
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Te hago un planteamiento, a ver si te sirve;

Página con tu formulario de envío, pero en vez de uno, tienes dos:

uno con dos campos de tipo hidden y de nombre form1


<form name="form1" id="form1" method="post" action="verifica.asp">
<input type="hidden" name="archivo" />
<input type="hidden" name="tabla" />
</form>


Y el otro, que es el que yá tienes (nótese que ahora se llama form2) y que el botón yá no es un submit si no un button al que se le ha añadido un onclick que llama a una función javascript.


<form action="insert.asp" method="post" enctype="multipart/form-data" name="form2" id="form2" onsubmit="return enviar2()">
<td><font color="#729DF0">Archivo :</font></td>
<td style="padding: 0" colspan="2"><input type="file" name="file" onkeydown="return borrar()" onkeyup="return borrar()" size="38"></td></tr>
<td><font color="#729DF0">Nick :</font></td>
<td><input type="text" name="name" size="35" value=""></td>
<td><p align="right"><select name="tipo" style="font-size: 9pt">
<option value="audio">Audio</option>
<option value="vhs">Vhs</option>
<option value="dvd">Dvd</option>
<option value="divx">Divx</option>
<option value="carteles">Carteles</option>
<option value="ps1">Ps1</option>
<option value="ps2">Ps2</option>
<option value="xbox">Xbox</option>
<option value="dream">Dreamcast</option>
<option value="gamecube">Gamecube</option>
<option value="pcplay">Juegos Pc</option>
<option value="pcsoft">Software</option>
<option selected value="cero"> - Tipo -</option>
</select></p></td></tr>
<input type="hidden" name="fecha" value="<%=date()%>">
<input type="hidden" name="url" value="/public/uploaded/">
<td> </td><td colspan="2"><br>
<p align="center">
<input type="button" name="Submit" value="Enviar" onclick="Validator(this.form)" />

</form>



ok, debajo del segundo formulario (o donde te dé la gana) colocas un iframe oculto

<iframe name="pepe" style="visibility:hidden;display:none">&nbsp;</iframe>



Y por javascript pones esto (incluye lo que yá tenías)


<script language="JavaScript" type="text/javascript">
var envia = false
function verifica(donde){
document.form1.archivo.value = donde.file.value.split("\\")[donde.file.value.split("\\").length-1]
document.form1.tabla.value = donde.tipo.value
document.form1.target = "pepe"
document.form1.submit()

}
function enviar(){
document.form2.submit()
}
function enviar2(){
return envia
}

//******
function borrar(){
document.formulario.archivo.value = "";
return false;
}

function Validator(theForm)
{
if (theForm.file.value == "")
{
alert("Por favor seleccione un archivo.");
theForm.file.focus();
return (false);
}
if (theForm.name.value == "")
{
alert("Escriba un Nick (nombre).");
theForm.name.focus();
return (false);
}
if (theForm.tipo.value == "cero")
{
alert("Por favor seleccione el tipo de portada.");
theForm.tipo.focus();
return (false);
}
verifica(theForm);
}

</script>


y creas un nuevo archivo asp de nombre verifica.asp que sea algo parecido a esto:

Código:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>

<body>
<%
Dim Conexion,rs
Set Conexion = Server.CreateObject("ADODB.Connection") 
Conexion.Open "Driver={Microsoft Access Driver (*.mdb)}; " & "Dbq=" & Server.MapPath("/mdb-database/portadas.mdb") 
cad = "select * from " & request.form("tabla") & " where pal='" & request.form("archivo") & "'"

set rs = Conexion.execute(cad)
if NOT rs.EOF then
%>
<script language="JavaScript" type="text/javascript">
parent.envia = false
parent.alert('La imagen yá existe!')
</script>
<%
else
%>
<script language="JavaScript" type="text/javascript">
parent.envia = true
parent.enviar()
</script>
<%
end if
Conexion.close
set rs = nothing
set Conexion  = nothing
%>
</body>
</html>

Espero no haber metido la pata al cambiar los datos por los tuyos, dado que obviamente las pruebas las hice con otra base de datos (aprovechando una que tenía por ahí) pero creo que está bien.

A mi me ha funcionado.

La idea es:

Al dar intro a un campo no hace submit, hay que darle al botón de enviar
el botón enviar envía a la función que tienes para verificar que estén todos los campos rellenos
Si todo está ok se copian los datos necesarios al formulario oculto y éste se envía al asp nuevo y el resultado carga en el iframe oculto
El asp nuevo verifica si el nombre existe en la bd. Si existe, al cargarse en el iframe envía una alerta advirtiendo que el archivo yá existe.

Si no existe, al cargar el asp nuevo en el iframe envía la orden de que el otro formulario (el form2) se envíe.

Y eso.

Yá me contarás

Saludos.....

Última edición por tunait; 22/06/2004 a las 15:08
  #12 (permalink)  
Antiguo 22/06/2004, 16:32
 
Fecha de Ingreso: junio-2004
Mensajes: 35
Antigüedad: 19 años, 10 meses
Puntos: 0
Bien, bien.
que te voy a decir tunait que tu no sepas...........
Lo probé tal como está y va de maravilla, mñn lo adaptare a la web y si me surge algo , ya te aviso.
Sólo me queda una duda, y es que es lo que hace esto? onkeydown="return borrar()" onkeyup="return borrar()"

ok.. ah.. y antes que se me olvide: muchas gracias (todas las que quieras)

salu2
__________________
Colaborador de
www.alicun.com

Última edición por eusol; 22/06/2004 a las 16:33
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




La zona horaria es GMT -6. Ahora son las 16:46.