elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Como hago lo siguiente..
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como hago lo siguiente..  (Leído 4,988 veces)
elpirata15hd

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Como hago lo siguiente..
« en: 30 Abril 2011, 00:49 am »

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 Desconectado

Mensajes: 278

Me encanta Joomla y lo que puedo hacer con el


Ver Perfil WWW
Re: Como hago lo siguiente..
« Respuesta #1 en: 30 Abril 2011, 01:20 am »

Hola,

tienes que añadir un else y ponerle un return:
Código:
<?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.php

Saludos!


En línea

PHP Web Developer
Joomla, jQuery, MySQL, CSS, etc...

Android APP Developer http://android-dev.tumblr.com/
elpirata15hd

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Como hago lo siguiente..
« Respuesta #2 en: 30 Abril 2011, 01:32 am »

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

Código:
<?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 Desconectado

Mensajes: 278

Me encanta Joomla y lo que puedo hacer con el


Ver Perfil WWW
Re: Como hago lo siguiente..
« Respuesta #3 en: 30 Abril 2011, 01:53 am »

Ok, no lo probe jaja, pero entonces que te parece algo así:

Código:
<?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

PHP Web Developer
Joomla, jQuery, MySQL, CSS, etc...

Android APP Developer http://android-dev.tumblr.com/
elpirata15hd

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Como hago lo siguiente..
« Respuesta #4 en: 30 Abril 2011, 09:32 am »

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 Desconectado

Mensajes: 278

Me encanta Joomla y lo que puedo hacer con el


Ver Perfil WWW
Re: Como hago lo siguiente..
« Respuesta #5 en: 30 Abril 2011, 17:29 pm »

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:
Código:
<?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

PHP Web Developer
Joomla, jQuery, MySQL, CSS, etc...

Android APP Developer http://android-dev.tumblr.com/
elpirata15hd

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: Como hago lo siguiente..
« Respuesta #6 en: 1 Mayo 2011, 11:24 am »

a esto te refieres?¿ http://www.miguelmanchego.com/2009/subir-archivos-usando-ajax-jquery/ es bastante complicado,casi que prefiero hacer funcionar el limitar con el que estabamos jajaja en que linea tengo que añadir el ultimo codigo para que funcione el limitador?
En línea

merolhack

Desconectado Desconectado

Mensajes: 278

Me encanta Joomla y lo que puedo hacer con el


Ver Perfil WWW
Re: Como hago lo siguiente..
« Respuesta #7 en: 1 Mayo 2011, 15:58 pm »

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:
Código:
<?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

PHP Web Developer
Joomla, jQuery, MySQL, CSS, etc...

Android APP Developer http://android-dev.tumblr.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como utilizo el siguiente codigo?
Java
DrUbLiC 5 3,501 Último mensaje 25 Marzo 2008, 23:18 pm
por DrUbLiC
Como realizar lo siguiente con GD
PHP
multi-media asdfg 7 3,628 Último mensaje 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 4,845 Último mensaje 2 Septiembre 2011, 23:59 pm
por Tinkipinki
¿Como se hace en excel lo siguiente?
Dudas Generales
Fox_Neo 4 3,133 Último mensaje 22 Julio 2013, 18:35 pm
por Fox_Neo
[Resuelto] Como hago lo siguiente en una index
Desarrollo Web
WIитX 6 2,691 Último mensaje 8 Marzo 2015, 20:10 pm
por WIитX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines