Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2012, 19:47
JUMASOL
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 6 meses
Puntos: 8
Quitar obligatoriedad de adjuntar archivo

Hola.

Tengo un formulario para enviar mensajes por PHP. Incluye (y quiero que sea así) y adjuntador de archivos.

El problema es que está establecido como obligatorio. Es decir, es necesario adjuntar el archivo y necesito que sea optativo.

No domino este tema y me gustaría me pudieseis orientar.

El código es:

<?php

$maximo_tamano= '6000000';
$direccion_envio='[email protected]';
$url= 'http://www.myweb/formulario.php;

?>

<?PHP
//proceso del formulario
// si existe "enviar"...
if (isset ($_POST['enviar'])) {

// vamos a hacer uso de la clase phpmailer,
require("class.phpmailer.php");

$mail = new PHPMailer();

//recogemos las variables y configuramos PHPMailer
$mail->From = $_POST['email'];
$mail->FromName = $_POST['nombre'];
$mail->AddAddress($direccion_envio);
$mail->Subject = "Formulario de Solicitud de Empleo";
$mail->AddReplyTo($_POST['email'],$_POST['nombre']);
$mail->IsHTML(true);
$comentario=$_POST['comentario'];

//comprobamos si se adjunto un archivo, y si su tamano es menor al permitido
if (isset($_FILES['archivo']['tmp_name'])) {
$tipo=$_FILES['archivo']['type'];
//Formatos de archivo permitidos, si desean agregar mas, agregar un case para cada formato.
switch ($tipo) {
case "image/gif":
$ext="gif";
break;
case "image/pjpeg":
$ext="jpg";
break;
case "image/jpeg":
$ext="jpg";
break;
case "image/png":
$ext="png";
break;
case "application/zip":
$ext="zip";
break;
case "application/msword":
$ext="doc";
break;
case "application/pdf":
$ext="pdf";
break;
case "application/rtf":
$ext="rtf";
break;
case "application/octet-stream":
$extension_type= explode ('.', $_FILES['archivo']['name']);
$ext= end($extension_type);
if($ext!="rar") {$ext="error";}
break;
default:
$ext="error";
break;
}

$aleatorio = rand();
$nombreoriginal= explode ('.', $_FILES['archivo']['name']);
$tamano=$_FILES['archivo']['size'];
$nuevonombre=$nombreoriginal[0].'-'.$aleatorio.'.'.$ext;
}

if (isset ($nuevonombre)) {
if ($ext=="error") {$error_archivo="<h3>ERROR</h3><p>Debe adjuntarse un documento compatible con el formulario.</p>";}
if ($tamano > $maximo_tamano) {$error_archivo="<h3>ERROR</h3><p>El archivo adjunto supera en tamaño el máximo permitido.</p>";}
}

//comprobamos si todos los campos fueron completados
if ($_POST['email']!='' && $_POST['nombre']!='' && $_POST['comentario']!='' && $error_archivo=='') {

// copiamos el archivo en el servidor
copy($_FILES['archivo']['tmp_name'],'archivos/'.$nuevonombre);

//armamos el html
$contenido = '<html><body>';
$contenido .= '<h2>Contacto desde formulario</h2>';
$contenido .= '<p>Enviado el '. date("d M Y").'</p>';
$contenido .= '<hr />';
$contenido .= '<p>Nombre: <strong>'.$_POST['nombre'].'</strong>';
$contenido .= '<p>Email: <strong>'.$_POST['email'].'</strong>';
$contenido .= '<p>Archivo: <strong><a href="'.$url.'/archivos/'.$nuevonombre.'">'.$nuevonombre.'</a> (formato:'.$ext.' - '.$tamano.' bytes)</strong>';
$contenido .= '<p>Comentario: <strong>'.$comentario.'</strong>';
$contenido .= '<hr />';
$contenido .= '</body></html>';

$mail->Body = $contenido;
$mail->AddAttachment('archivos/'.$nuevonombre.'', $nuevonombre); // optional name
// si todos los campos fueron completados enviamos el mail

$mail->Send();

$flag='ok';
$mensaje='<div id="ok"><p id="p-ok">Mensaje de recepcion xxxxx.</p></div>';
} else {

//si no todos los campos fueron completados se frena el envio y avisamos al usuario
$flag='err';
$mensaje='<div id="error"><h3>ERROR</h3><p>Todos los campos han de ser rellenados para poder enviar el formulario.</p> '.$error_archivo.'</div>';

}
}
?>



Y después lo siguiente en entre el código html:

<? echo $mensaje; ?>
<? if ($flag!='ok') { ?>
<form action="<?php echo $PHP_SELF;?>" method="post" enctype="multipart/form-data">
<div id="nombre">
<p>Nombre y Apellidos</p>
<input <? if (isset ($flag) && $_POST['nombre']=='') { echo 'class="error"';} else {echo 'class="campo"';} ?> type="text" name="nombre" value="<? echo $_POST['nombre'];?>" />
</div>
<div id="e-mail">
<p>Dirección E-Mail</p>
<input <? if (isset ($flag) && $_POST['email']=='') { echo 'class="error"';} else {echo 'class="campo"';} ?> type="text" name="email" value="<? echo $_POST['email'];?>" />
</div>
<div id="FileUpload">
<input <? if (isset ($flag) && $ext=='error' || $tamano > $maximo_tamano) { echo 'id="BrowserHidden"';} else {echo 'id="BrowserHidden"';} ?> type="file" name="archivo" value="<? echo $_FILE['archivo'];?>" onchange="getElementById('FileField').value = getElementById('BrowserHidden').value;" />
<div id="BrowserVisible">
<input type="text" id="FileField" />
</div>
</div>
<div id="comentarios">
<p>Comentarios e Información Adicional</p>
<textarea <? if (isset ($flag) && $_POST['comentario']=='') { echo 'class="com-error"';} else {echo 'class="com"';} ?> name="comentario"><? echo $_POST['comentario'];?> </textarea>
</div>
<div id="controles">
<div id="fza">
<input type="submit" name="enviar" value="enviar" />
</div>
<div id="fzb">
<input type="reset" name="reset" value="reset" />
</div>
</div>
</form>
<? } ?>

Gracias por vuestra atención.