Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/04/2005, 11:15
sebtev
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 3 meses
Puntos: 2
Código PHP:
<!--Para subir las imagenes mediante HTTP Solo debes tener en cuenta de poner en el la etiqueta <form> enctype="multipart/form-data"
esto es lo que le permite al formulario subir archivos de datos, en nuestro caso imágenes-->
<form name="insertar" action="tuarchivo.php o el mismo script con phpself*" method="POST" enctype="multipart/form-data">
<tr><td><b>TÍTULO:</b></td><td><input type="text" name="titulo" size="60"></td></tr>
<tr><td><b>COPETE:</b></td><td><input type="text" name="copete" size="60"></td></tr>
<tr><td><b>NOTA:</b></td><td><textarea name="nota" cols="46" rows="10"></textarea></td></tr>
<tr>
<!--Aquí veras q el input type q utilizamos es "file", esto mostrará un boton de "examinar" a tus usuarios, con éste podrán buscar en su HD la imagen a subir. En caso de q quieres subir varias imágenes a la vez debes poner cuantos <input type="file"> quieras, pero debes cambiarle el nombre.-->
<td><b>IMAGEN:</b></td><td><input type="file" name="img1" size="44"></td></tr>
<tr><td><b>COPETE 1º IMAGEN:</b></td><td><input type="text" name="copete_img1" size="60"></td></tr>
<tr><td colspan="2" align="center"><input type="submit" value="INGRESAR INFORMACIÓN"><input type="hidden" name="fecha_ingreso" value="".$fecha_valida.""></td></form></tr>
<!--El resto no varía, solo q yo, por costumbre paso un hidden (dato oculto) con la fecha de ingreso de la imagen, esto lo puedes hacer con la variable date() de PHP. Un ejemplo claro sería-->
<?
$fecha_valida 
date(Ymd);
echo 
$fecha_valida;
//esto tendría una salida similar a esta
//20050317
//(año 2005, mes 03 día 17), lo utilizo así para poder, en caso de necesitarlo ordenar las imágenes por fecha
?>
<!--OK, en el form le habiamos dado como action="tuarchivo.php", en ese archivo necesitaremos algo más o menos así para tratar las imágenes que el usuario ha subido-->
<?
if($_FILES["img1"]["name"] == ""){
    
$img1 "";
    
$ruta1 "";
    }else{
    
$img1 $_FILES["img1"];
    
$prefijo time();
    
$url "/galeria/2005/";
    
$directorio $_SERVER['DOCUMENT_ROOT'].$url;
    
$ruta1 $directorio.$prefijo.$img1["name"];
    if (
move_uploaded_file($img1['tmp_name'],$ruta1)){echo "El archivo ha sido cargado correctamente.<br>/n"
    }else{echo 
"Ocurrió algún error al subir el fichero. No pudo guardarse.<br>/n";
       
$img1['userfile']['error'];}
}
?>
<!--¿Q carajo hace esto? bueno ahí vamos, el primer if solamente comprueba q el usuario haya subido una imagen, en caso de no q no haya subido una la varible $img1 no contendrá nada y la variable $ruta1 también quedará vacia (esto será util para MySQL ya te lo explicaré). En caso contrario (q el usuario si haya subido una imagen) la variable $img1 = $_FILES... es solo para simplificar y no tener q escribir todo el tiempo $_FILES.... A la variable $prefijo le damos como dato un time(), es decir la fecha del momento de subir el archivo en timestamp* unix. En la variable $url debes definir la carpeta donde se alojarán tus imágenes. $directorio toma la dirección real de tu sitio (es decir c:/apache/hdocs/tuservidor/tusitio, a la q le agregamos (con el punto .) la variable $url, para q quede así c:/apache/hdocs/tuservidor/tusitio/galeria/2005/, me sigues? OK
La variable $ruta1 toma todo lo anterior (es decir c:/apache/hdocs/tuservidor/tusitio/galeria/2005/) y le suma el time()y el nombre de la imagen, entonces quedaría así "c:/apache/hdocs/tuservidor/tusitio/galeria/2005/12354896miimagen.jpg" el número 12345896 es el timestamp ¿Porq esto? con eso evitamos q un usuario, por ej. suba una imagen "suimagen.jpg", luego otro de tus visitantes sube una imagen con el nombre "suimagen.jpg", ¿q pasaría? se sobreescribiría la primera imagen, con lo q el primer usuario no quedaría contento al visitar tu sitio y no encontrar la imagen q subio días atrás.
Seguimos, el if(move_uploaded.... mueve la imagen q PHP guardó en una carpeta temporal** y con la variable $ruta1 le indicamos donde va a guardarla con el echo comprobamos q la imagen fue subida con éxito, en caso contrario nos devolvera un error del porq no ha subido la imagen.
** la carpeta temporal esta definida en el archivo de configuración de PHP (php.ini), si tienes acceso a él fijate si esta definida (busca upload). En caso de tener un servidor linux, deberás darle permiso 777 (escritura/lectura) a la carpeta donde guardaras tus imágenes. Windows hace lo q se le cante...-->

<!--Bien, ya hemos creado el formulario para el ingreso de datos e imágenes y hemos subido las imágenes al servidor un poco de mysql nos vendría bien-->
<?
<!--En el mismo archivo (tuarchivo.phpy luego de el script anterior deberías ingresar los datos a la DB-->
mysql_query("INSERT INTO nombreDB (titulo,copete,nota,img1,copete_img1) VALUES('$titulo','$copete','$nota','$ruta1','$copete_img1','$fecha_ingreso')") or die(mysql_error());
?>
<!--Esto es simple, recuerda q antes debes ingresar un mysql_connect q te conviene guardar en un archivo a parte y agregarlo con un include() (ej. include(misdatos.php); a todas las páginas q soliciten datos de la DB (ejemplo al final del archivo para no perder el hilo), lo único q te puede parecer raro es q en vez de guardar la imagen en la DB (algo inapropiado y q hace q las DB aumenten considerablemente de tamaño y se vuelvan lentas e inoperables) guardamos la ruta a la imagen ($ruta1). Bien, aquí termina el script tuarchivo.php, ahora vayamos a como mostrar las imágenes-->
<!--Crearemos otro archivo q llamaremos redimensionar.php, pero primero lo primero, en la página donde quieras mostrar las imágenes por ej. misimagenes.php deberemos realizar lo siguiente:
1º una consulta* a la DB para sacar los datos (lo que nos importa a nosotros es el campo q yo he llamado img1 que tiene el path ($ruta1) donde está la imagen), bien, teniendo esto en claro las img deberas llamarlas de la siguiente manera-->
<?
echo "<img src=\"http://tusitio/redimensionar.php?imagen=".$row['_img1']."&ancho=100&calidad=80\" width=\"100\" border=\"0\" align=\"left\">";
?>
<!--Aquí te daras cuenta q pasamos al script redimensionar.php algunos datos, en imagen va el path de la imagen a "retocar" en ancho el ancho q quieras que sea el preview (thumbails - imagen pequeña creada de la original). En calidad puede ir de 0 a 100, te recomiendo 80
en redimensionar.php pondremos lo sig:-->
<?
include("form.php"); //este include contiene un foreach para registrar y poder utilizar todos los datos q son enviados a los scripts, ya sea mediante POST, GET o FILE. Al final de este embrollo lo tienes...
$imagen $_GET["imagen"]; //simplifico para no usar $_GET[... y todo el barullo para escribir
$ancho $_GET["ancho"]; //lo mismo
$alto $_GET["alto"]; //lo mismo
$calidad $_GET["calidad"]; //de 1 a 100, simplifico
if(substr($imagen,-3) == "jpg" || substr($imagen,-3) == "JPG" || substr($imagen,-4) == "JPEG"){
$src_img imagecreatefromjpeg($imagen); //aqui revisa si la imagen es JPG (php trabaja con jpg y gif) si es jpg se dispone a, en la variable $src_img, crear la imagen
}
elseif(
substr($imagen,-3) == "gif" || substr($imagen,-3) == "GIF"){
$src_img imagecreatefromgif($imagen);//aqui revisa si la imagen es GIF
}else{header("Location: $imagen");//si no es ninguno de los dos (JPG o GIF) devuelve la imagen en su versión original
}
$ancho_original imagesx($src_img); //extrae el ancho original de la imagen
$alto_original imagesy($src_img); //extrae el alto original de la imagen
if(!$alto){
$alto = ($ancho $ancho_original) * $alto_original;
}
if(!
ancho){
$ancho = ($alto $alto_original) * $ancho_original;
}
if(!
$calidad){
$calidad 80;
}
$dst_img imagecreatetruecolor($ancho,$alto);//todos los if anteriores sirven para mantener la proporsión de la img, por eso solo le pasamos el ancho, con simple matemática sacamos el alto q le corresponde (esto es para q la imagen no se distorsione o vea muy estirada)
imagecopyresampled($dst_img$src_img,0,0,0,0,$ancho,$alto,$ancho_original,$alto_original);//crea la copia de la img, dejalo así q funcionara*
header("Content-Type: image/jpeg");//devuelve a la página q lo llamo, en nuestro caso misimagenes.php, la img creada
imagejpeg($dst_img,'',$calidad);
imagedestroy($src_img);//destruye la img y libera la memoria utilizada
imagedestroy($dst_img);//idem anterior
?>
<!--Bien, lo complicado ya está, ahora lo facil en misimagenes.php deberías poner un link q te abra en una nueva pág la imagen original en cada thumbails q muestres, sencillo <a href="<=$row['img1'] target="_blank"><img src...></a>"-->

<!--ACOTACIONES VARIAS: Para usar esto debes tener PHP instalado con las librerías GD (el 99,9% de los servidores lo tienen), si tu eres el servidor, busca php.ini y en él "extensions", por ahí debería haber algo asi "extension=php_gd2.dll"-->

<!--
Siempre los datos q pasan con el method="POST" son recibidos perfectamente por el script, sin necesidad de mucho, pero por las dudas te recomiendo este script que toma todos los datos del formulario.-->
<?php
foreach($_POST as $nombre_campo => $valor){$asignacion "\$".$nombre_campo."='".addslashes($valor)."';";
    eval(
$asignacion);}
foreach(
$_GET as $nombre_campo => $valor){$asignacion "\$".$nombre_campo."='".$valor."';";
    eval(
$asignacion);}
foreach(
$_FILES as $nombre_campo => $valor){$asignacion "\$".$nombre_campo."='".$valor."';";
    eval(
$asignacion);}
?>
<!--conexión a la DB-->
<?
$db_slp
['dbhost'] = 'localhost';
$db_slp['dbuser'] = 'nombre de usuario';
$db_slp['dbpassword'] = 'contraseña';
$db_slp['dbname'] = 'nombre de la DB';
$db_conexionmysql_connect($db_slp['dbhost'],$db_slp['dbuser'],$db_slp['dbpassword']) or die("No se pudo conectar a la base de datos");
mysql_select_db($db_slp['dbname']) or die("no se puede acceder a la base de datos");
?>
(*) Busca información en el manuel de PHP o en Google, si tienes dudas consúltame, pero antes prueba, prueba y prueba, nadie debe rendirse en la primera...
Saludos cuidate
sebtev
__________________
Dios dira que esto no es justo, pero lo sera...