Autor
|
Tema: Como hago lo siguiente.. (Leído 5,188 veces)
|
elpirata15hd
Desconectado
Mensajes: 18
|
Quisiera limitar el tamaño de los archivos a adjuntar y que saltase una venta de "exceso de tamaño" o algo asi.El codigo que utilice es el siguiente <?php function form_mail($sPara, $sAsunto, $sTexto, $sDe) { $bHayFicheros = 0; $sCabeceraTexto = ""; $sAdjuntos = ""; if ($sDe)$sCabeceras = "From:".$sDe."\n"; else $sCabeceras = ""; $sCabeceras .= "MIME-version: 1.0\n"; foreach ($_POST as $sNombre => $sValor) $sTexto = $sTexto."\n".$sNombre." = ".$sValor; foreach ($_FILES as $vAdjunto) { if ($bHayFicheros == 0) { $bHayFicheros = 1; $sCabeceras .= "Content-type: multipart/mixed;"; $sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n"; $sCabeceraTexto = "----_Separador-de-mensajes_--\n"; $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"; $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"; $sTexto = $sCabeceraTexto.$sTexto; } if ($vAdjunto["size"] > 0){ $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"; $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";; $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"; $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n"; $oFichero = fopen($vAdjunto["tmp_name"], 'r'); $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"])); $sAdjuntos .= chunk_split(base64_encode($sContenido)); fclose($oFichero); } } if ($bHayFicheros) $sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n"; return(mail($sPara, $sAsunto, $sTexto, $sCabeceras)); } //cambiar aqui el email if (form_mail(" poner_email@deDestino.com", $_POST[asunto], "Los datos introducidos en el formulario son:\n\n", $_POST[email])) echo "Su formulario ha sido enviado con exito"; ?> La linea que marque en rojo creo que es la que hay que modificar no?¿ pero lo que ya me pierdo,es el que salte un mensaje si se excede,yo creo que para adjuntar fotos,con 3 mb va bien no?¿ Gracias
|
|
|
En línea
|
|
|
|
merolhack
Desconectado
Mensajes: 278
Me encanta Joomla y lo que puedo hacer con el
|
Hola, tienes que añadir un else y ponerle un return: <?php function form_mail($sPara, $sAsunto, $sTexto, $sDe) { $bHayFicheros = 0; $sCabeceraTexto = ""; $sAdjuntos = "";
if ($sDe)$sCabeceras = "From:".$sDe."\n"; else $sCabeceras = ""; $sCabeceras .= "MIME-version: 1.0\n"; foreach ($_POST as $sNombre => $sValor) $sTexto = $sTexto."\n".$sNombre." = ".$sValor;
foreach ($_FILES as $vAdjunto) { if ($bHayFicheros == 0) { $bHayFicheros = 1; $sCabeceras .= "Content-type: multipart/mixed;"; $sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n"; $sCabeceraTexto = "----_Separador-de-mensajes_--\n"; $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"; $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"; $sTexto = $sCabeceraTexto.$sTexto; } if ($vAdjunto["size"] > 3000 ) { $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"; $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";; $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"; $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n"; $oFichero = fopen($vAdjunto["tmp_name"], 'r'); $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"])); $sAdjuntos .= chunk_split(base64_encode($sContenido)); fclose($oFichero); } else { return false; } } if ($bHayFicheros) $sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n"; return(mail($sPara, $sAsunto, $sTexto, $sCabeceras)); }
//cambiar aqui el email if (form_mail("poner_email@deDestino.com", $_POST[asunto], "Los datos introducidos en el formulario son:\n\n", $_POST[email])) { echo "Su formulario ha sido enviado con exito"; } else { echo "Su archivo excede los 3000"; } ?> podrías usar la función exit: http://php.net/manual/en/function.exit.phpSaludos!
|
|
|
En línea
|
|
|
|
elpirata15hd
Desconectado
Mensajes: 18
|
el exit te refieres para regresar al index?¿ yo lo tngo asi final del codigo para que regrese Pero una pregunta,este mensaje no saltaria si cuando le de a examinar y intenta cargar un archivo que sobrepasa el limite,salga un cuadro de aviso antes de darle a enviar verdad?¿ quedaria mucho mejor asi,que si se queda en la pantallla blannca de aviso de exceso,lo unico que no se que codigo es necesario PD:no anda bien el codigo que me dijo,se queda trabado,no tendria que ser asi esta linea = if ($vAdjunto["size"] > 0 < 3000)?¿ mi codigo con,el que uso para adjuntar y que va perfecto es el siguiente,el que puse primero,es el sin mdificar,lo pongo por si ayuda para poner la limitacion con ventana de alerta <?php function form_mail($sPara, $sAsunto, $sTexto, $sDe) { $bHayFicheros = 0; $sCabeceraTexto = ""; $sAdjuntos = "";
if ($sDe)$sCabeceras = "From:".$sDe."\n"; else $sCabeceras = ""; $sCabeceras .= "MIME-version: 1.0\n"; foreach ($_POST as $sNombre => $sValor) $sTexto = $sTexto."\n".$sNombre." = ".$sValor;
foreach ($_FILES as $vAdjunto) { if ($bHayFicheros == 0) { $bHayFicheros = 1; $sCabeceras .= "Content-type: multipart/mixed;"; $sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n";
$sCabeceraTexto = "----_Separador-de-mensajes_--\n"; $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"; $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n";
$sTexto = $sCabeceraTexto.$sTexto; } if ($vAdjunto["size"] > 0) { $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"; $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";; $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"; $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n";
$oFichero = fopen($vAdjunto["tmp_name"], 'r'); $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"])); $sAdjuntos .= chunk_split(base64_encode($sContenido)); fclose($oFichero); } }
if ($bHayFicheros) $sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n"; return(mail($sPara, $sAsunto, $sTexto, $sCabeceras)); }
//cambiar aqui el email if (form_mail("micorreo@gmail.com", $_POST[asunto], "Los datos introducidos en el formulario son:\n\n", $_POST[email])) header("Location: index.php?opc=1"); ?>
|
|
« Última modificación: 30 Abril 2011, 01:45 am por elpirata15hd »
|
En línea
|
|
|
|
merolhack
Desconectado
Mensajes: 278
Me encanta Joomla y lo que puedo hacer con el
|
Ok, no lo probe jaja, pero entonces que te parece algo así: <?php function form_mail($sPara, $sAsunto, $sTexto, $sDe) { $bHayFicheros = 0; $sCabeceraTexto = ""; $sAdjuntos = "";
if ($sDe)$sCabeceras = "From:".$sDe."\n"; else $sCabeceras = ""; $sCabeceras .= "MIME-version: 1.0\n"; foreach ($_POST as $sNombre => $sValor) $sTexto = $sTexto."\n".$sNombre." = ".$sValor;
foreach ($_FILES as $vAdjunto) { if ($bHayFicheros == 0) { $bHayFicheros = 1; $sCabeceras .= "Content-type: multipart/mixed;"; $sCabeceras .= "boundary=\"--_Separador-de-mensajes_--\"\n"; $sCabeceraTexto = "----_Separador-de-mensajes_--\n"; $sCabeceraTexto .= "Content-type: text/plain;charset=iso-8859-1\n"; $sCabeceraTexto .= "Content-transfer-encoding: 7BIT\n"; $sTexto = $sCabeceraTexto.$sTexto; } // Si el archivo es mayor a 0 bytes y menor que 30Kb // En caso de que el valor dea en bytes claro jaja if ($vAdjunto["size"] > 0 && $vAdjunto["size"] < 30000 ) { $sAdjuntos .= "\n\n----_Separador-de-mensajes_--\n"; $sAdjuntos .= "Content-type: ".$vAdjunto["type"].";name=\"".$vAdjunto["name"]."\"\n";; $sAdjuntos .= "Content-Transfer-Encoding: BASE64\n"; $sAdjuntos .= "Content-disposition: attachment;filename=\"".$vAdjunto["name"]."\"\n\n"; $oFichero = fopen($vAdjunto["tmp_name"], 'r'); $sContenido = fread($oFichero, filesize($vAdjunto["tmp_name"])); $sAdjuntos .= chunk_split(base64_encode($sContenido)); fclose($oFichero); } else { return false; } } if ($bHayFicheros) $sTexto .= $sAdjuntos."\n\n----_Separador-de-mensajes_----\n"; return(mail($sPara, $sAsunto, $sTexto, $sCabeceras)); }
//cambiar aqui el email if (form_mail("poner_email@deDestino.com", $_POST[asunto], "Los datos introducidos en el formulario son:\n\n", $_POST[email])) { echo "Su formulario ha sido enviado con exito"; } else { echo "Su archivo excede los 3000"; } ?> Si quieres que te lo diga al instante, lo tendrías que hacer con AJAX! Busca en google: AJAX +php +File uploader
|
|
|
En línea
|
|
|
|
elpirata15hd
Desconectado
Mensajes: 18
|
Ya estuve mirando lo que me dijiste y que va,es super complicado,es imposible hacer algo haci con un alert javascrit y php?¿
Gracias por el codigo,pero debe de seguir teniendo algo,porque cuando pesa menos de lo puesto,se envia y salta la pantalla blanca con que todo se envio bien,pero cuando intentas mandar algo superior a lo puesto,se queda ahi,como que lo intenta subir,no sale nada de qu epesa mucho,como que se queda bloqueado.
Enmede el "envio correcto" que tu has peusto para que salga la pantalla blanca,podria salir el header que yo puse?¿ porque esta configurado para que si se envia bien,regrese al index y salga una venta na de envio correcto
|
|
« Última modificación: 30 Abril 2011, 10:10 am por elpirata15hd »
|
En línea
|
|
|
|
merolhack
Desconectado
Mensajes: 278
Me encanta Joomla y lo que puedo hacer con el
|
ajaj no es con un simple alert, busca en Google: jQuery + AJAX +Upload File Y ahi vas a poder ver scripts parecidos al de Gmail, que con AJAX validan el archivo e inclusive lo suben al servidor sin necesidad de recargar la página. La función que te puse los que hace es que si el archivo pesa más, regresa un FALSE, es decir, que si le pones algo tipo: <?php if ( funcion(parametro1, parametro2)) { // Si es TRUE lo que haga va aqui echo "Los archivos pesan lo correcto, se han subido."; } else { // Si es FALSE lo que haga va aqui echo "Los archivos NO pesan lo correcto, NO se han subido."; } ?> Si en tu código no pones ese ELSE se va a quedar trabado por que recies respuesta pero no haces nada con ella... Saludos!
|
|
|
En línea
|
|
|
|
|
merolhack
Desconectado
Mensajes: 278
Me encanta Joomla y lo que puedo hacer con el
|
Es super sencillo subir archivos con jQuery, solo hay que saber programar... Haber te explico como funciona tu código: 1.- Tienes una función que envía por email el archivo seleccionado. 2.- Esa función regresa TRUE o FALSE dependiendo de 2 cosas: 2.1.- TRUE Si al final se envía el email 2.2.- FALSE Si el archivo es mayor a los bytes dados 2.3.- FALSE Si no se envia el email 3.- A esa función la llamas desde algo como: <?php if ( funcion(parametro1, parametro2)) { // Si es TRUE lo que haga va aqui echo "Los archivos pesan lo correcto, se han subido."; } else { // Si es FALSE lo que haga va aqui echo "Los archivos NO pesan lo correcto, NO se han subido."; } ?> Lo que puedes hacer es que antes de llamar a la función que envía el email, crea otra función para validar el tamaño del archivo, si devuelve TRUE esa función, entonces ahora si mandas el email.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como utilizo el siguiente codigo?
Java
|
DrUbLiC
|
5
|
3,821
|
25 Marzo 2008, 23:18 pm
por DrUbLiC
|
|
|
Como realizar lo siguiente con GD
PHP
|
multi-media asdfg
|
7
|
3,853
|
17 Agosto 2011, 16:32 pm
por multi-media asdfg
|
|
|
Como poner un BP en la siguiente instrucción con OllyScript?
« 1 2 »
Ingeniería Inversa
|
.:UND3R:.
|
10
|
5,341
|
2 Septiembre 2011, 23:59 pm
por Tinkipinki
|
|
|
¿Como se hace en excel lo siguiente?
Dudas Generales
|
Fox_Neo
|
4
|
3,411
|
22 Julio 2013, 18:35 pm
por Fox_Neo
|
|
|
[Resuelto] Como hago lo siguiente en una index
Desarrollo Web
|
WIитX
|
6
|
3,062
|
8 Marzo 2015, 20:10 pm
por WIитX
|
|