Foros del Web » Programando para Internet » PHP »

Quitar obligatoriedad de adjuntar archivo

Estas en el tema de Quitar obligatoriedad de adjuntar archivo en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 11/03/2012, 19:47
 
Fecha de Ingreso: noviembre-2005
Mensajes: 889
Antigüedad: 18 años, 5 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.
  #2 (permalink)  
Antiguo 12/03/2012, 03:08
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: Quitar obligatoriedad de adjuntar archivo

Cambia

Código PHP:
Ver original
  1. //comprobamos si todos los campos fueron completados
  2.     if ($_POST['email']!='' && $_POST['nombre']!='' && $_POST['comentario']!='' && $error_archivo=='') {
por

Código PHP:
Ver original
  1. //comprobamos si todos los campos fueron completados
  2.     if ($_POST['email']!='' && $_POST['nombre']!='' && $_POST['comentario']!='') {
__________________
Fere libenter homines, id quod volunt, credunt.

Etiquetas: adjuntar, formulario, html, variables, usuarios
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 12:43.