6
« en: 11 de Octubre de 2013, 19:17:03 pm »
Muy buenas!
Llevo poco tiempo profundizando el PHP, ya me he visto los típicos tutoriales que empiezan con variables/consonantes, estructuras condicionales, bucles, funciones, etc...y ahora he ido directo a un formulario (que por cierto necesito utilizar) para entender su funcionamiento.
El caso es que no se si he dado un salto muy largo, ya que hay cosas que no entiendo...
Antes que nada pego el código del formulario:
<?php
/*
NOTA:
este archivo debe estar acompañado de una carpeta
con el nombre "archivos" en donde se copiaran los
archivos. Esta carpeta debe tener chmod 777.
*/
//CONFIGURACION
$maximo_tamano= '600000'; //tamaño maximo de los archivos. 100000 equivale a 100kb.
$direccion_envio= 'mi@email.com'; //la direccion a la que se enviara el email.
$url= 'http://www.tragatapas.com/landing/05'; //la URL donde esta publicado el formulario. SIN la barra al final
//FIN CONFIGURACION
?>
<?PHP
//proceso del formulario
// si existe "enviar"...
if (isset ($_POST['enviar'])) {
//recogemos las variables
$nombre=$_POST['nombre'];
$email=$_POST['email'];
$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;
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="<br />- Formato de archivo no permitido.";}
if ($tamano > $maximo_tamano) {$error_archivo="<br />- El tamaño de su archivo supera el máximo permitido.";}
}
//comprobamos si todos los campos fueron completados
if ($nombre!='' && $email!='' && $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>'.$nombre.'</strong>';
$contenido .= '<p>Email: <strong>'.$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>';
// si todos los campos fueron completados enviamos el mail
mail ($direccion_envio, "Contacto desde el formulario", $contenido, "From: $nombre\nContent-Type: text/html; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit");
$flag='ok';
$mensaje='<div id="ok">Su archivo ha sido cargado con éxito<br /> Gracias por Contactarnos</div>';
} else {
//si no todos los campos fueron completados se frena el envio y avisamos al usuario
$flag='err';
$mensaje='<div id="error">- Los Campos Marcados Con * Son Requeridos. '.$error_archivo.'</div>';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Contactenos - v2</title>
<style>
body {
font: 1em Lucida Grande, 'Trebuchet MS', verdana, sans-serif;
font-size: 76%;}
#form {
border: 3px double #eaeaea;
background-color: #FFC;
padding: 1em;
width: 30em;
margin: auto;}
#form h2{
font-size: 2em;
margin: 0 0 0.5em 0;
padding: 0;}
#form .campo {
border: 1px solid #999;
padding: 0.3em;
font-size: 1.5em;}
#form .error {
border: 1px solid #F00;
padding: 0.3em;
font-size: 1.5em;}
#form .com {
border: 1px solid #999;
padding: 0.3em;
font-size: 1.5em;
width:18em;
height: 10em;
font: 1.5em Lucida Grande, 'Trebuchet MS', verdana, sans-serif;}
#form .com-error {
border: 1px solid #F00;
padding: 0.3em;
font-size: 1.2em;
width:18em;
height: 10em;
font: 1.5em Lucida Grande, 'Trebuchet MS', verdana, sans-serif;}
#form .boton {
border: 2px solid #999;
padding: 0.3em;
font-size: 1.2em;
width: 4em;}
#error {
border: 1px dashed #F00;
background-color: #FFF;
padding: 5px;}
#ok {
border: 1px dashed #060;
background-color:#FFF;
padding: 5px;}
</style>
</head>
<body>
<div id="form">
<h2>Formulario de Contacto v2</h2>
<p>Ejemplo del formulario de contacto con envío de archivo</p>
<? echo $mensaje; /*mostramos el estado de envio del form */ ?>
<? if ($flag!='ok') { ?>
<form action="<?php echo $PHP_SELF;?>" method="post" enctype="multipart/form-data">
<p>Nombre* <br />
<input <? if (isset ($flag) && $_POST['nombre']=='') { echo 'class="error"';} else {echo 'class="campo"';} ?> type="text" name="nombre" value="<? echo $_POST['nombre'];?>" /></p>
<p>Email* <br />
<input <? if (isset ($flag) && $_POST['email']=='') { echo 'class="error"';} else {echo 'class="campo"';} ?> type="text" name="email" value="<? echo $_POST['email'];?>" /></p>
<p>Subir Archivo*<br />(Formatos permitidos: .gif, .jpg, .png, .zip) <br />
<input <? if (isset ($flag) && $ext=='error' || $tamano > $maximo_tamano) { echo 'class="error"';} else {echo 'class="campo"';} ?> type="file" name="archivo" value="<? echo $_FILE['archivo'];?>" /></p>
<p>Comentario* <br />
<textarea <? if (isset ($flag) && $_POST['comentario']=='') { echo 'class="com-error"';} else {echo 'class="com"';} ?> name="comentario"><? echo $_POST['comentario'];?></textarea></p>
<p><input class="boton" type="submit" name="enviar" value="enviar" /></p>
</form>
<? } ?>
</div> <!-- end form-->
</body>
</html>
Hasta los formatos de archivos no tengo problema, he tenido que investigar que era un switch y he podido entender para que será el uso en el formulario, pero cuando llego a:
$aleatorio = rand();
$nombreoriginal= explode ('.', $_FILES['archivo']['name']);
$tamano=$_FILES['archivo']['size'];
$nuevonombre=$nombreoriginal[0].'-'.$aleatorio.'.'.$ext;
Aquí me pierdo, el explode supuestamente divide un string (algo que también me ha liado, he buscado y mas o menos he entendido).
El caso es que estoy escribiendo el código en otro archivo desde 0 para ir haciéndolo yo, pero no entiendo esta parte ni como se arma.
Más adelante entiendo bastante, la función mail la entiendo porque la he investigado.
Uff, esto del php está siendo más duro de lo que pensaba...siento que me falta más tutoriales, pero todos los que vi explican 4 cosas y hace un formulario en el que parece que falta más tutorial por medio, como que me faltan cosas por saber antes de realizarlo.
Bueno sigo investigando, podría hacer un formulario más sencillo pero es el único que vi con envío de imágenes a un ftp.
Aún así no pierdo la esperanza, quiero progresar y hacer cosas más complejas!!
Saludos y gracias!!