Вы находитесь на странице: 1из 11

Funciona de la siguiente manera, con mi cdigo subo un archivo via input_file en una forma y este se guarda automaticamente en el archivo

\\tmp del directorio de php del servidor, solamente mientras corres el codigo, porque despues el mismo servidor lo borra (por seguridad) cuando termina el cdigo; a este archivo le da un nombre temporal, asi que con codigo lo copio a mi directorio del sitio y le cambio el nombre. Esta es la forma: <form action=<?php echo$PHP_SELF ?> method=post enctype=multipart/formdata name=ubicaform2 id=ubicaform2> <input name=addubica type=submit id=addubica value=subir imagen> Imagen: <input name=upimagen type=file id=upimagen> </form>

Si te das cuenta, envio la forma a la misma pagina PHP pero esto lo puedes cambiar dirigindolo a otra pagina que procese la insercin a la base de datos, lo que si debes tomar mucho en cuenta, al menos para imgenes es el enctype=multipart/form-data Luego, al principio de mi pagina (o en la pagina a donde es dirigida la forma) pones esto:

if (isset ($addubica)) { print $upimagen = upimagen ; print $upimagen_name = upimagen_name ; print $upimagen_type = upimagen_type ; print $upimagen_size = upimagen_size ;

$newimage = sprintf (imagenes/%s, $upimagen_name); move_uploaded_file($upimagen, $newimage); mysql_select_db($database_travconn, $travconn); $sql = INSERT INTO ubicacion (imagen) VALUES ('$newimage'); $result = mysql_query($sql); }

Asi entra el registro en la base de datos haciendo referencia a la imagen que qued en mi subdirectorio imagenes. Las cuatro lineas 'print' solo estan para confirmar el nombre de la imagen original, el nombre que queda, el tipo y el tamao de la imagen, ya que lo hayas probado, puedes borrar estas lineas o comentarlas con // Asi, al tope de la pgina resultante en el browser aparecera algo asi: jtix25s.tmp=upimagen mi_imagen.gif=upimagen_name jpeg/gif=upimagen_type 2654=upimagen_size Nota : ciertas veces despues del nombre temporal de la imagen te puede salir un warning diciendo que no se puede crear la imagen y no se puede mover al directorio, esto se debe a los permisos que tienes en el directorio \\tmp

Por ltimo en la pgina donde quieras que se abra el archivo solo lo llamas con el nombre que le diste, sacndolo de la base de datos, en mi caso sera:

<img src=<?php echo $row_Ubicacion['imagen']; ?>>

que me da como resultado imagen/mi_imagen.gif aunque el archivo de la imagen ya esta fisicamente en el subdirectorio imagen con la base de datos solo asigno el source, es decir, en este caso el archivo de la imagen queda guardado en el subdirectorio imagenes/ de mi site, y en el campo 'imagen' de mi base de datos queda solo el path imagenes/mi_imagen.gif.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&

Por medio de este articulo aprenderemos la forma de subir un archivo al servidor por medio del navegador. El nico requisito para que todo funcione es que la carpeta donde vaya a subir el archivo tenga los permisos adecuados ("777"). El Formulario Lo primero que debemos armar es el formulario para permitir que el usuario indique que archivo desea subir al servidor, para esto utilizamos la etiqueta HTML <input> con su atributo type establecido a "file", veamos el cdigo HTML... <form action="<?=$PHP_SELF?>" method="post" enctype="multipart/form-data" name="form1"> <p align="center">Archivo <input name="archivo" type="file" id="archivo"> </p> <p align="center"><input name="boton" type="submit" id="boton" value="Enviar"></p> </form> Tengamos en cuenta varios detalles importantes: el formulario esta apuntado (action) a el archivo php actual ($PHP_SELF) y el atributo enctype esta establecido a "multipart/formdata", esto es as por que debemos enviar un archivo. Otro detalle importante son los nombre de los campos "archivo" para el input y "boton" para el submit. El Script Bueno llego el turno de crear el script que har el trabajo de subir el archivo, este script php va ubicado al comienzo de la pagina...

<? if($boton) { if (is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) { copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']); $subio = true; } if($subio) { echo "El archivo subio con exito"; } else { echo "El archivo no cumple con las reglas establecidas"; } die(); } ?> Lo primero que tenemos es un bloque if que detecta si se envi el formulario, para esto preguntamos si la variable $boton esta presente, si esta presente quiere decir que se envi el formulario entonces entramos en el segundo if que comprueba que se haya enviado algn archivo, si se envi el archivo se copia (copy) desde el directorio temporario donde subi al lugar donde queremos alojarlo, en este caso al mismo directorio del script PHP. Que es el $HTTP_POST_FILES ? Seguro que observaron que esta variable aparece muy seguido en nuestro script, la misma es una variable del tipo matriz (array) predefinida de PHP que contiene la informacin del archivo que estamos subiendo, por ejemplo...

$HTTP_POST_FILES['archivo']['tmp_name'] - Guarda la ruta donde esta alojado temporalmente el archivo. $HTTP_POST_FILES['archivo']['name'] - Guarda el nombre del archivo (ej: "dibujo.gif").

Esos son algunos de los valores que tiene esa variable, mas adelante veremos mas, lo importante es aprender la forma de acceder a esos valores... $HTTP_POST_FILES['nombre_del_input_file']['clave'] Volvamos al script, si todo sali bien se establece la variable $subio a true para que luego sepamos que mensaje mostrarle al usuario "El archivo subio con xito" o "El archivo no cumple...". Avanzando Mas El ejemplo mostrado anteriormente fue algo bsico como para comprender el funcionamiento pero a la hora de implementarlo seguramente nos surgirn problemas como "Que pasa si me suben archivos muy grandes?" "Que pasa si en ves de una imagen suben otro tipo de archivo?" ...ETC.

Para solucionar esto utilizaremos el $HTTP_POST_FILES que contiene mas informacin del archivo enviado, veamos...

$HTTP_POST_FILES['archivo']['size'] - Devuelve el tamao del archivo (ej: 25445) $HTTP_POST_FILES['archivo']['type'] - Devuelve el tipo de archivo.(ej: image/gif)

Con esta informacin podemos mediante bloques if ir viendo si el archivo supera los x bytes de tamao o es de otro formato, veamos el ejemplo de el script avanzado... <? if($boton) { if (is_uploaded_file($HTTP_POST_FILES['archivo']['tmp_name'])) { if($HTTP_POST_FILES['archivo']['size'] < 85000) { if($HTTP_POST_FILES['archivo']['type']=="image/gif") { copy($HTTP_POST_FILES['archivo']['tmp_name'], $HTTP_POST_FILES['archivo']['name']); $subio = true; } } } if($subio) { echo "El archivo subio con exito"; } else { echo "El archivo no cumple con las reglas establecidas"; } die();

} ?>

Este script restringe la subida a archivos GIF menores a 80k, fcil no? Digamos que es algo simple de realizar y sirve mucho para agregarle nuevas funciones a nuestra web. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&& codigo SQL Cdigo: [Seleccionar] CREATE TABLE `imagenes` ( `id` int(11) NOT NULL auto_increment, `nombre` varchar(30) NOT NULL default '', `tipo` varchar(30) NOT NULL default '', `descripcion` varchar(255) NOT NULL default '', `fecha` varchar(255) NOT NULL default '', `ip` varchar(255) NOT NULL default '', `imagen` mediumblob NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

Como veis he usado un campo de tipo mediumblob pero tambien podeis blob, tinyblob, longblob, UPLOADER <?PHP //Conexion if (isset($_POST['enviar'])) { $tipos = array(image/gif,image/jpeg,image/bmp,image/pjpeg); $maximo = 102400; //100Kb if (is_uploaded_file($_FILES['imagen']['tmp_name'])) { // Se ha subido? if (in_array($_FILES['imagen']['type'],$tipos) && $_FILES['imagen']['size'] <= $maximo) { // Es correcto? $fp = fopen($_FILES['imagen']['tmp_name'], r); //Abrimos la imagen $imagen = fread($fp, filesize($_FILES['imagen']['tmp_name'])); //Extraemos el contenido de la imagen $imagen = addslashes($imagen); fclose($fp); //Cerramos imagen if(!get_magic_quotes_gpc()) $nombre = addslashes($_FILES['imagen']['name']); // Arreglamos el Nombre else $nombre = $_FILES['imagen']['name']; $query = INSERT INTO `imagenes` (imagen,nombre,tipo,descripcion,fecha,ip) VALUES ; $query.= (.$imagen.,.$nombre.,.$_FILES['imagen']['type'].,; $query.= mysql_real_escape_string($_POST['descripcion']).,; $query.= date(d/m/y,time()).,.$_SERVER['REMOTE_ADDR'].); if (mysql_query($query)) echo src=visor.php?mostrar=.mysql_insert_id().>; else echo mysql_error(); } else echo El formato del archivo no es correcto o es mayor de 100Kb; } else echo La imagen no ha sido subida; } //Desconexion DB ?> enctype=multipart/form-data method=POST> Imagen: type=file name=imagen /> Breve Descripcion: (Opcional) type=submit name=enviar value=Enviar /> VISOR <?PHP if (is_numeric($_GET['mostrar'])) { // Conexion a la Base de Datos $query = mysql_query(SELECT * FROM `imagenes` WHERE id = .$_GET['mostrar'].) or exit();

if (!mysql_num_rows($query)) exit(header(HTTP/1.0 404 Not Found)); $datos = mysql_fetch_array($query); header(Content-Type: .$datos['tipo']); echo $datos['imagen']; //Desconexion } else header(HTTP/1.0 404 Not Found); ?> Creo que el codigo se explica bastante por si mismo y por los comentarios que he dejado en las lineas, an as podeis preguntarme cualquier cosa que querais. Si no os funciona en vuestro servidor es porque la version de PHP que usais no es compatible con $_FILES, por tanto debereis cambiar $_FILES por $_HTTP_POST_FILES y supongo que no habra problemas.

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

Validar formularios en JavaScript Los formularios representan una forma rpida y eficaz de enviar informacin desde el ordenador del usuario hasta el servidor web. Generalmente, constan de varios campos de texto, botones de seleccin y listas desplegables, que el usuario rellena convenientemente y transmite al servidor pulsando finalmente en un botn de envo. A menudo, muchos de los campos que el usuario debe completar obedecen a un formato determinado, por lo que conviene que el usuario los rellene correctamente para evitar errores al procesar en el servidor los datos recibidos. JavaScript constituye una manera muy conveniente de trasladar esta labor de validacin de la informacin al ordenador del cliente, descargando as al servidor de esta tarea. En JavaScript, los formularios son objetos form, que dependen a su vez del objeto document. Cuando se crea el formulario utilizando la etiqueta <FORM> de HTML, conviene darle un nombre para poder referenciarlo cmodamente ms adelante desde funciones de JavaScript. Asimismo, todos los elementos del formulario, botones, cuadros de texto, listas, etc., deberan ser nombrados por la misma razn. JavaScript se aade a los elementos convencionales del formulario en la forma de gestores de eventos. En primer lugar, se crea el formulario de manera normal, usando las etiquetas HTML convencionales. En la pgina de ejemplo aparece el formulario cuyo cdigo se lista a continuacin:

<form method = "POST" name = "registro" onSubmit = "return validar(this)" action = "formularios.asp">

Nombre: <input type="text" name="nombre" size="20"> Edad: <input type="text" name="edad" size="2"> Direccin de correo: <input type="text" name="correo" size="20"> <input type="submit" value="Enviar datos" name="enviar"> </form>
que consta de tres campos de entrada y un botn para enviar los datos. Se ha aadido el evento onSubmit, que se produce cuando el usuario pulsa el botn Enviar datos, de manera que se invoca a la funcin validar antes de transmitir nada. El argumento que toma es this, es decir, el propio formulario. A continuacin se presenta el cdigo de dicha funcin:

function validar(formulario) { if (formulario.nombre.value.length < 4) { alert("Escriba por lo menos 4 caracteres en el campo "Nombre"."); formulario.nombre.focus(); return (false); } var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz "; var checkStr = formulario.nombre.value; var allValid = true; for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (j = 0; j < checkOK.length; j++) if (ch == checkOK.charAt(j)) break; if (j == checkOK.length) { allValid = false; break; } } if (!allValid) { alert("Escriba slo letras en el campo "Nombre"."); formulario.nombre.focus(); return (false); } var checkOK = "0123456789"; var checkStr = formulario.edad.value; var allValid = true; var decPoints = 0; var allNum = "";
for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (j = 0; j < checkOK.length; j++) if (ch == checkOK.charAt(j)) break;

if (j == checkOK.length) { allValid = false; break; } allNum += ch; } if (!allValid) { alert("Escriba slo dgitos en el campo "Edad"."); formulario.edad.focus(); return (false); } var chkVal = allNum; var prsVal = parseInt(allNum); if (chkVal != "" && !(prsVal >= "18" && prsVal <= "30")) { alert("Escriba un valor mayor o igual que 18 y menor o igual que 30 en el campo "Edad"."); formulario.edad.focus(); return (false); } if ((formulario.correo.value.indexOf ('@', 0) == -1)||(formulario.correo.value.length < 5)) { alert("Escriba una direccin de correo vlida en el campo "Direccin de correo"."); return (false); } return (true); } Esta funcin realiza las siguientes comprobaciones: 1. La longitud del nombre es mayor de cuatro caracteres. 2. El nombre slo contiene caracteres del alfabeto espaol, no contiene nmeros ni caracteres no alfanumricos. 3. La edad slo contiene nmeros. 4. El valor de la edad est comprendido entre 18 y 30. 5. La direccin de correo incluye una arroba y su longitud es superior a cinco caracteres. &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

No se si te refieres a esto, pero se puede ocultar y desocultar lo que quieras con etiquetas div. <html> <head> <script> function desactiva(obj) {

if(obj.checked){ document.getElementById('caja').style.display=""; }else{ document.getElementById('caja').style.display="none"; } } </script> </head> <body> <form name="form1" method="post" action=""> <input name="activar" type="checkbox" onClick="desactiva(this)"> Activar/Desactivar <div id="caja" style="{display:none}"> <input type="text" name="textfield"> </div> </form> </body> </html> &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& <form method="post" action="http://..../validar.php"> <label for="v-nombre">Nombre: </label> <input type="text" name="v-nombre" /><br /> <label for="v-apellidos">Apellidos: </label> <input type="text" name="v-apellidos" /><br /> <label for="v-email">Email: </label> <input type="text" name="v-email" /><br /> <label for="pass">Contrasea: </label> <input type="password" name="pass" /><br /> <hr /> Escoge los equipos que conoces de la lista:<br /> <input type="checkbox" name="f-madrid" value="f-madrid" />R Madrid<br /> <input type="checkbox" name="f-barcelona" value="f-barcelona" />FC Barcelona<br /> <input type="checkbox" name="f-bilbao" value="f-bilbao" />ATH Bilbao<br /> <hr /> Escoge tu favorito de la lista:<br /> <input type="radio" name="equipo" value="madrid" />R Madrid<br /> <input type="radio" name="equipo" value="barcelona" />FC Barcelona<br /> <input type="radio" name="equipo" value="bilbao" />ATH Bilbao<br /> <input type="submit" name="enviar" value="Enviar" /> <input type="reset" name="borrar" value="Borrar todo" /><br /> </form>

Вам также может понравиться