Foros del Web » Programando para Internet » PHP »

Upload y renombrado de Imagen

Estas en el tema de Upload y renombrado de Imagen en el foro de PHP en Foros del Web. Saludos. Estoy trabajando en un script que suba imágenes al servidor y almacene sus urls en una base de datos. He conseguido que suba y ...
  #1 (permalink)  
Antiguo 20/04/2005, 02:19
Avatar de Keleriano  
Fecha de Ingreso: junio-2002
Ubicación: Granada
Mensajes: 133
Antigüedad: 15 años, 5 meses
Puntos: 0
Upload y renombrado de Imagen

Saludos. Estoy trabajando en un script que suba imágenes al servidor y almacene sus urls en una base de datos. He conseguido que suba y lo almacene todo correctamente pero mi problema ahora está en renombrar la imagen con el nombre del campo id que tiene en la bd. Por ejemplo si una imagen tuviese la id número 45, lo que quiero es renombrar la imagen para que su nombre fuese 45.jpg

El código que he usado es el siguiente:
Código PHP:
function Upload($_GET,$HTTP_POST_FILES,$base){
 
$seleccion mysql_select_db($base);
 
$descripcion $_POST['descripcion'];
 
$categoria $_POST['categoria'];
 
$ruta '../imagenes/upload/'.$categoria.'/';
 
$extension substr($HTTP_POST_FILES['file']['name'],-3); 
 
$imagen 'imagenes/upload/'.$categoria.'/'.$HTTP_POST_FILES['file']['name'];
 
   if ((
$extension == 'jpg') || ($extension == 'gif')){
     
$bool =  move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'], $ruta.$HTTP_POST_FILES['file']['name']); 
     if(
$bool){
       
mysql_query("INSERT INTO imagenes VALUES ('$id','$imagen','$descripcion','$categoria')");
 
       echo 
'<center>Imagen subida correctamente.<br>';
     }else{
       echo 
'<center>No subió la imagen <br>';
     }
   }else{ 
     echo 
"<center>Extensión de imagen incorrecta, solo .jpg y .gif<br>"
   }

Gracias

Un Saludo
  #2 (permalink)  
Antiguo 20/04/2005, 02:28
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Código PHP:
mysql_db_query($con,"UPDATE tutabla SET url='/upload/imagenes/'.$id.'.jpg' WHERE id='$id'") or die(mysql_error()); 
Prueba algo así, no he tenido tiempo de probarlo
saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #3 (permalink)  
Antiguo 20/04/2005, 02:33
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pués simplemente asignale la id... Por ejemplo, puedes cambiar esta línea:
Código PHP:
move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'], $ruta.$HTTP_POST_FILES['file']['name']); 
por esta:
Código PHP:
move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'], $ruta.$id.$extension); 
ó incluso puedes poner directo un $ruta si le asignas antes el nombre
Código PHP:
$ruta "../imagenes/upload/".$categoria."/".$id."jpg";
// ó $id.$extención... como quieras
// acostumbrate a usar comillas dobles 
Un par de comentarios... parece que no ocupas $imagen... de hecho.. haces algo como lo que te sugiero que hagas con $ruta... pero no lo ocupas.... y segundo... si quieres hacer una validación segura hazlo por lo que te arroje $_FILES['tu_archivo']['type'] y no por extensión...

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #4 (permalink)  
Antiguo 20/04/2005, 02:36
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
ya ví que haces con $imagen... haz esto:
1) borra $ruta
2) $imagen = "../imagenes/upload/".$categoria."/".$id."jpg";
3) $bool = move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'], $imagen);

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 20/04/2005, 02:58
Avatar de Keleriano  
Fecha de Ingreso: junio-2002
Ubicación: Granada
Mensajes: 133
Antigüedad: 15 años, 5 meses
Puntos: 0
Gracias jam, hice lo que me dijiste pero me he dado cuenta que no puedo eliminar $ruta pues desde donde visualizo las imágenes es del directorio principal y de donde las inserto es el directorio admin, al guardarlo en la base de datos tengo que guardar la ruta relativa desde donde las visualizo pero al subir la imagen no.

Con tu ayuda he modificado esto un poco y he conseguido que me suba la imagen pero ahora lo hace sin nombre, solo con la extensión, el problema creo que está en la variable $id, no se como capturarla pues haciendo un mysql_num_rows() me devolvería el número de registros pero la id puede ser mayor ¿no?

Aquí va el código modificado:

Código PHP:
function Upload($_GET,$HTTP_POST_FILES,$base){
 
$seleccion mysql_select_db($base);
 
$descripcion $_POST['descripcion'];
 
$categoria $_POST['categoria'];
 
$extension substr($HTTP_POST_FILES['file']['name'],-3); 
 
$imagen 'imagenes/upload/'.$categoria.'/'.$id.'.'.$extension;
 
$ruta '../'.$imagen;
 
   if ((
$extension == 'jpg') || ($extension == 'gif')){
     
$bool =  move_uploaded_file($HTTP_POST_FILES['file']['tmp_name'],$ruta); 
     if(
$bool){
       
mysql_query("INSERT INTO imagenes VALUES ('$id','$thumb','$imagen','$descripcion','$categoria')");
              echo 
'<center>Imagen subida correctamente.<br>';
     }else{
       echo 
'<center>No subió la imagen <br>';
     }
   }else{ 
     echo 
"<center>Extensión de imagen incorrecta, solo .jpg y .gif<br>"
   }

Gracias de nuevo
  #6 (permalink)  
Antiguo 20/04/2005, 03:07
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Cierto... no ví los dos puntos :borracho... Pués la verdad no hice comentario alguno de $id porque la utilizas en tu INSERT... así que supuse ya la obtenias... Evidentemente debes obtenerla de algún modo... como supongo que quieres que sea el último+1 tienes primero que hacer una consulta que te regrese ese último resultado y sumarle uno... busca si no sabes cómo hacerlo como hacer la consulta.. ya corresponde a MySQL.

Como comentario... no le veo caso usar como nombre e id lo mismo... para manejarla puedes hacerlo por id, para eso está... y como nombre.. cualquiera!

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 24/04/2005, 11:07
 
Fecha de Ingreso: febrero-2003
Mensajes: 15
Antigüedad: 14 años, 9 meses
Puntos: 1
Buscar El Ultimo Id Y Sumarle 1...

yo lo hago d ela siguiente forma...

Con esto obtienes el ID
Código PHP:
SELECT max(id_tucampoFROM tutabla 
En donde lo quieras colocar colocas esto cierto?
Código PHP:
<?php echo $row_max_tutabla['max(id_tucampo)']; ?>
Solo lo encierras en parentesis y le sumas 1
Código PHP:
<?php echo ($row_max_tutabla['max(id_tucampo)']+1); ?>
Lo ves?

Uy!... no había visto la fecha!, quizas ya encontraste la manera, bueno pero a lo mejor te sirva como segunda opción!

yo estoy intentando Subir imágenes pero no guarda la ruta en la BD si puedes ayudar sería bueno!

  #8 (permalink)  
Antiguo 25/04/2005, 05:16
Avatar de Keleriano  
Fecha de Ingreso: junio-2002
Ubicación: Granada
Mensajes: 133
Antigüedad: 15 años, 5 meses
Puntos: 0
Cita:
Iniciado por EFranz
Uy!... no había visto la fecha!, quizas ya encontraste la manera, bueno pero a lo mejor te sirva como segunda opción!

yo estoy intentando Subir imágenes pero no guarda la ruta en la BD si puedes ayudar sería bueno!

Si, ya lo hice. Gracias de todos modos.


¿Puedes poner el código que veamos que ocurre?
  #9 (permalink)  
Antiguo 25/04/2005, 10:48
 
Fecha de Ingreso: febrero-2003
Mensajes: 15
Antigüedad: 14 años, 9 meses
Puntos: 1
Exclamación Adaptar Formulario Dreamweaver A Php (imágenes)...

He trabajo muy bien con el Dreamweaver pero hasta ahora con operaciones básicas, ahora debo primero entender un poco de las funciones que crea dicho programa para modificar el codigo de modo que pueda adaptarlo para hacer que también me suba una imagen a mi campo correspondiente...



Código PHP:
<?php
 
//INICIO DEL DOLOR DE CABEZA -------------------------------------------------------------------------
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "enviar")) {
  
$insertSQL sprintf("INSERT INTO prueba01 (id_prueba1, dato_prueba1, imagen1) VALUES (%s, %s, %s)",
                       
GetSQLValueString($_POST['id_prueba1'], "int"),
                       
GetSQLValueString($_POST['dato_prueba1'], "text"),
                       
GetSQLValueString($_POST['form_imagen1'], "text"));

  
mysql_select_db($database_gcd$gcd);
  
$Result1 mysql_query($insertSQL$gcd) or die(mysql_error());
}
// FIN DEL DOLOR DE CABEZA ---------------------------------------------------------------------------
//                                 Como Adapto este formulario para que suba imágenes??



 // (INICIO) CONSULTA DE MAXIMOS IDS----------------------------------------------------------------------
mysql_select_db($database_gcd$gcd);
$query_maximos1y2 "SELECT max(id_prueba1), max(id_prueba2) FROM prueba01, prueba02";
$maximos1y2 mysql_query($query_maximos1y2$gcd) or die(mysql_error());
$row_maximos1y2 mysql_fetch_assoc($maximos1y2);
$totalRows_maximos1y2 mysql_num_rows($maximos1y2);
// (FIN) CONSULTA DE MAXIMOS IDS --------------------------------------------------------------------------?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>


<? //Formulario a utilizar!!                                                         ?>

<body>
<form action="<?php echo $editFormAction?>" method="POST" enctype="multipart/form-data" name="enviar" id="enviar"POST>
  <p>Dato en tabla01 
    <input name="dato_prueba1" type="text" id="dato_prueba1" size="10" maxlength="10">
    <input name="id_prueba1" type="hidden" id="id_prueba1" value="<?php echo $row_maximos1y2['max(id_prueba1)']; ?>">
  </p>
  <p>Dato en tabla02 
    <input name="dato_prueba2" type="text" id="dato_prueba2" size="10" maxlength="10">
    <input name="id_prueba2" type="hidden" id="id_prueba2" value="<?php echo $row_maximos1y2['max(id_prueba2)']; ?>">
</p>
  <p>Imagen: 
    <input name="form_imagen1" type="file" id="form_imagen1">
</p>
  <p> </p>
  <p>
    <input name="Submit_enviar" type="submit" id="Submit_enviar" value="Enviar">
</p>
  <input type="hidden" name="MM_insert" value="enviar">
</form>
</body>
</html>
<?php
mysql_free_result
($maximos1y2);
?>

No crean que soy un vago!, aquí tengo mis libritos de PHP/MySQL y un chorro de Tutoriales con Scripts, pero aún así no logro hacer esto de las imágenes y lo peor es que todo el mundo lo hace fácil!!!
Claro la diferencia es que yo quiero adaptar el código de Dreamweaver jejeje!

Espero Ayudar algún día Por ahora solo soy bueno en...
AutoCAD, 3D Studio MAX,Photoshop y me defiendo con el Flash!!!

Ah! Keleriano gracias por atender mi mensaje!!
...es que llevo a penas un mes con esto del PHP/MySQL

Bye!
  #10 (permalink)  
Antiguo 25/04/2005, 17:42
Avatar de Keleriano  
Fecha de Ingreso: junio-2002
Ubicación: Granada
Mensajes: 133
Antigüedad: 15 años, 5 meses
Puntos: 0
Si no tengo entendido mal lo que no te hace es volcar los datos a la bd bien ¿no?

Se me ocurre lo siguiente:

En:
Código PHP:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "enviar")) {
  
$insertSQL sprintf("INSERT INTO prueba01 (id_prueba1, dato_prueba1, imagen1) VALUES (%s, %s, %s)"
                       
GetSQLValueString($_POST['id_prueba1'], "int"),
                       
GetSQLValueString($_POST['dato_prueba1'], "text"),
                       
GetSQLValueString($_POST['form_imagen1'], "text")); 
Por que no pruebas a cambiarlo por:
Código PHP:
$id $_POST['id_prueba1'];
$dato $_POST['dato_prueba1'];
$form $_POST['form_imagen1'];
if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "enviar")) {
  
$insertSQL "INSERT INTO prueba01 (id_prueba1, dato_prueba1, imagen1) VALUES ('$id','$dato','$form')"
No lo probé así que no se si funcionará.

Hay otra cosa a tener en cuenta cuando haces el condicional:
Código PHP:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "enviar")) 
Si $_POST["MM_insert"] == "enviar", la comprobación con isset(); siempre te va a devolver un valor verdadero. Es decir, si se cumple que $_POST["MM_insert"] == "enviar", $_POST["MM_insert"] estará definida por lo que también se cumplirá la primera condición, al tener un && no tiene sentido poner la primera condición
  #11 (permalink)  
Antiguo 25/04/2005, 18:08
 
Fecha de Ingreso: febrero-2003
Mensajes: 15
Antigüedad: 14 años, 9 meses
Puntos: 1
Puedo subir correctamente los datos, pero no guarda la ruta de la IMG...

el codigo anterior que coloque funciona bien de hecho no tengo problemas al insertar datos.

...lo que necesito es hacer que ese mismo formulario se adapte para poder insertar imagenes a una carpeta y que me guarde la ruta en el campo image1

...luego planeo hacerlo incluir varias imagenes a la vez!

  #12 (permalink)  
Antiguo 26/04/2005, 03:28
Avatar de Keleriano  
Fecha de Ingreso: junio-2002
Ubicación: Granada
Mensajes: 133
Antigüedad: 15 años, 5 meses
Puntos: 0
lo unico que tienes que hacer es almacenar la ruta como una cadena de caracteres en una variable con la ruta relativa desde donde la vas a mostrar no desde donde la subes, sería algo así como:

Código PHP:
$ruta_imagen $imagenes/subdir_que_quieras/".$_HTTP_POST_FILES['file']['name']; 
Donde el campo file deberá ser un input de tipo file en el fomulario que envía los datos al script de subida.
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 22:31.