Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/04/2005, 20:34
mandys
 
Fecha de Ingreso: abril-2005
Mensajes: 18
Antigüedad: 19 años
Puntos: 0
error

Cita:
Iniciado por sebtev
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'];}
}
?>
<!--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);}
?>
sebtev
Hola, tengo problema con este script, creo que es la base de datos , viendo este script te mando mi base da datos para que veas como la he creado
Campo Tipo Atributos Nulo Predeterminado Extra Acción
titulo varchar(250) No
copete varchar(250) No
nota varchar(250) No
img1 varchar(250) No
ruta1 varchar(250) No
copete_img1 varchar(250) No
fecha_ingreso datetime No 0000-00-00 00:00:00
fecha_valida datetime No 0000-00-00 00:00:00

Y aqui te mando el error que me arroga, los archivos son guardados en el servidor, pero los datos no son guardados en la base de datos y le doy pero nada..

El archivo ha sido cargado correctamente.
/n Column count doesn't match value count at row 1

Espero su respuesta, Gracias