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.