Foros del Web » Programando para Internet » PHP »

modificar imagen a traves de formulario

Estas en el tema de modificar imagen a traves de formulario en el foro de PHP en Foros del Web. Hola: Siguiendo instrucciones de Cluster (excelente trabajo), he logrado subir, ver, modificar y borrar datos en mi bd. Ahora, necesito aplicar lo logrado ayer pero ...
  #1 (permalink)  
Antiguo 30/07/2004, 22:14
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
modificar imagen a traves de formulario

Hola:

Siguiendo instrucciones de Cluster (excelente trabajo), he logrado subir, ver, modificar y borrar datos en mi bd.
Ahora, necesito aplicar lo logrado ayer pero incluyendo una imagen que sube a mi BD.
Revisando el foro, encontre el tutorial que hizo el mismo personaje (sin palabras...) y, por supuesto, todo funciona a las mil maravillas.
Adapte el de ayer con lo del tutorial y ahora puedo perfectamente subir, borrar y ver datos e imagenes de mi BD.
El problema esta a la hora de modificar... NI IDEA!!!!!!!!!!!!!!!!!!!
Pongo los codigos:

Este lo uso para insertar (formulario) y se llama insertar_linea_blanca.php

arriba
Código PHP:
<? 
if (isset($_GET['proceso'])){ 
echo 
$_GET['proceso']."<br>"

?>
el resto
Código PHP:
<form action="insertar_linea_blanca2.php" method="post" enctype="multipart/form-data" name="producto" id="producto">
                    <
table width="255">
                      <
tr>
                        <
td width="91"><div align="left">Producto:</div></td>
                        <
td width="152"><div align="left">
                          <
input name="producto" type="text" id="producto" size="33" align="left">
                        </
div></td>
                      </
tr>
                      <
tr>
                        <
td><div align="left">Modelo:</div></td>
                        <
td><div align="left">
                          <
input name="modelo" type="text" id="modelo" size="33" align="left">
                        </
div></td>
                      </
tr>
                      <
tr>
                        <
td><div align="left">Descripci&oacute;n:</div></td>
                        <
td><div align="left">
                          <
textarea name="descripcion" cols="25" rows="4" id="descripcion"></textarea>
                        </
div></td>
                      </
tr>
                      <
tr>
                        <
td><div align="left">Precio:</div></td>
                        <
td><div align="left">
                          <
input name="precio" type="text" id="precio" size="33" align="left">
                        </
div></td>
                      </
tr>
                      <
tr>
                        <
td><div align="left">Stock:</div></td>
                        <
td><div align="left">
                          <
input name="stock" type="text" id="stock" size="33" align="left">
                        </
div></td>
                      </
tr>
                      <
tr>
                        <
td><div align="left">Imagen:</div></td>
                        <
td><div align="left">
                          <
input name="imagen" type="file" id="imagen" size="33" align="left">
                        </
div></td>
                      </
tr>
                      <
tr>
                        <
td>&nbsp;</td>
                        <
td>&nbsp;</td>
                      </
tr>
                      <
tr>
                        <
td colspan="2"><div align="center">
                            <
input type="submit" name="submit" value="Ingresar Registros">
                        </
div></td>
                      </
tr>
                    </
table>
                  </
form

Al "submit", llama a insertar_linea_blanca2.php que es este:

Código PHP:
<?php 
//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente. 
if (empty($_FILES['imagen']['name'])){ 
header("location: insertar_linea_blanca.php?proceso=falta_indicar_imagen"); //o como se llame el formulario .. 
exit; 


//establece una conexión con la base de datos. 
$conexion mysql_connect("localhost","nj_admin","123456") or die("No se pudo realizar la conexion con el servidor."); 
mysql_select_db("nj_productos",$conexion) or die("No se puede seleccionar BD"); // tu_bd es el nombre de la Base de datos .. por siaca. 

// archivo temporal (ruta y nombre). 
$binario_nombre_temporal=$_FILES['imagen']['tmp_name'] ; 

// leer del archvio temporal .. el binario subido. 
// "rb" para Windows .. Linux parece q con "r" sobra ... 
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo. 
$binario_nombre=$_FILES['imagen']['nombre']; 
$binario_peso=$_FILES['imagen']['peso']; 
$binario_tipo=$_FILES['imagen']['tipo']; 

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO linea_blanca (id, producto, modelo, descripcion, precio, stock, imagen, nombre, peso, tipo) VALUES ('', '$producto', '$modelo', '$descripcion', '$precio', '$stock', '$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
mysql_query($consulta_insertar,$conexion) or die("No se pudo insertar los datos en la base de datos."); 
header("location: ver_linea_blanca.php");  // si ha ido todo bien 
exit; 
?>

este es el proceso de insertar y funciona perfecto... lo coloque para comparar con el de modificar...

Los campos de la BD para el archivo son: imagen, nombre, peso y tipo.

continuara!!!
  #2 (permalink)  
Antiguo 30/07/2004, 22:22
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
ahora el modificar_linea_blanca.php (el de ayer para datos modificado hoy)

arriba

Código PHP:
<? 
include ("config.php"); 

if (isset(
$_GET['id'])){ 
$sql="SELECT * FROM linea_blanca WHERE id='".$_GET['id']."'"
$result mysql_query($sql) or die (mysql_error()); 
$resultado=mysql_fetch_array($result); 


?>

y el resto

Código PHP:
<form action="modificar_linea_blanca2.php" method="get" enctype="multipart/form-data" name="productos" id="productos">
                    <table width="255">
                      <tr>
                        <td width="91"><div align="left">ID:</div></td>
                        <td width="152"><div align="left">
                          <input name="id" type="text" id="id" size="3" align="left" value="<? echo $resultado['id']; ?>">
                        </div></td>
                      </tr>
                        <td><div align="left">Producto:</div></td>
                        <td><div align="left">
                          <input name="producto" type="text" id="producto" value="<? echo $resultado['producto']; ?>" size="45" align="left">
                        </div></td>
                      </tr>
                      <tr>
                        <td><div align="left">Modelo:</div></td>
                        <td><div align="left">
                          <input name="modelo" type="text" id="modelo" value="<? echo $resultado['modelo']; ?>" size="45" align="left">
                        </div></td>
                      </tr>
                      <tr>
                        <td><div align="left">Descripción:</div></td>
                        <td><div align="left">
                          <input name="descripcion" type="text" id="descripcion" value="<? echo $resultado['descripcion']; ?>" size="45" align="left">
                        </div></td>
                      </tr>
                      <tr>
                        <td><div align="left">Precio:</div></td>
                        <td><div align="left">
                          <input name="precio" type="text" id="precio" value="<? echo $resultado['precio']; ?>" size="45" align="left">
                        </div></td>
                      </tr>
                      <tr>
                        <td><div align="left">Stock:</div></td>
                        <td><div align="left">
                          <input name="stock" type="text" id="stock" value="<? echo $resultado['stock']; ?>" size="45" align="left">
                        </div></td>
                      </tr>
                      <tr>
                        <td><div align="left">Imagen</div></td>
                        <td><div align="left">
                          <input name="imagen" type="file" id="imagen" value="<? echo $resultado['imagen']; ?>" size="45" align="left">
                        </div></td>
                      </tr>
                      <tr>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td>
                      </tr>
                      <tr>
                        <td colspan="2"><div align="center">
                            <input type="submit" name="submit" value="Modificar Registros">
                        </div></td>
                      </tr>
                    </table>
                  </form>

Al "submit" llama a modificar_linea_blanca2.php que es este:

Código PHP:
<? 
include ("config.php"); 

if (isset(
$_GET['id'])){      
  
$sql="UPDATE linea_blanca SET producto='".$_GET['producto']."', modelo='".$_GET['modelo']."', descripcion='".$_GET['descripcion']."', precio='".$_GET['precio']."', stock='".$_GET['stock']."', imagen='".$_GET['imagen']."'"
if (
mysql_query($sql)){  
   exit; 
} else { 
   echo 
"Error Mysql: ".msyql_error(); 

} else { 
   
header ("Location: error.php"); 
   exit; 
}   
?>
Se perfectamente que esta malo, lo que no se es que debo corregir para que funcione. Ayer me funcionaba totalmente para modificar datos. Hoy, me muestra los datos en el formulario para modificarlos pero en el campo de imagen "file", sale un kilometro de simbolos extraños. Probe entonces a no poner esto:

Código PHP:
value="<? echo $resultado['imagen']; ?>"
y bien, me sale todo el formulario lleno, ese campo vacio y no me da error, pero al modificar buscando una foto en mi Disco, la que estaba ya no se ve ni la que subo tampoco. Solo cambia los datos.

Espero puedan ayudarme
  #3 (permalink)  
Antiguo 30/07/2004, 22:25
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
ahhhh, otra cosa....

el codigo que uso para ver el resultado despues de insertar, es el mismo ver.php (modificado claro) del tutorial de Cluster, y uso ese porque probe el ver_thumbnails.php pero no me funciona.
  #4 (permalink)  
Antiguo 31/07/2004, 01:02
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
... :-|... podrias pasarme los tutoriales de los que hablas???
  #5 (permalink)  
Antiguo 31/07/2004, 07:44
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Estan aquí mismo en el foro, en el area de faq del php...

Altamente recomendados!!!!!
  #6 (permalink)  
Antiguo 31/07/2004, 18:25
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Nada que lo resuelvo...
  #7 (permalink)  
Antiguo 31/07/2004, 18:45
 
Fecha de Ingreso: julio-2004
Ubicación: Puerto Vallarta, Jalisco, Mexico
Mensajes: 186
Antigüedad: 19 años, 9 meses
Puntos: 0
mira viendo el codigo puedo ver una cosa, en el de a;adir fotos veo que guarda la foto en binario dentro de la base de datos,
Código PHP:
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 
y en el modificar no haces esto, o sea cuando modificas solo cambias el nombre, de la imagen pero el contenido lo dejas igual, no sera por ahi tu problema ??

aunque suena mas raro que esto, pues cuando lees el nombre de la imagen no te deberia de dar el kilometro de caracteres raros, pero prueba usando meter el contenidog.

Suerte
__________________
Shanti Castillo G.
  #8 (permalink)  
Antiguo 01/08/2004, 08:48
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
hice un "mix" entre el insertar y el modificar y me salio este codigo. Ya no me da error pero tampoco me muestra la foto. Actualiza los registros pero la foto sale el cuadrito con la x.

Código PHP:
<? 
include ("config.php");

//Primero, arranca el bloque PHP y checkea si el archivo tiene nombre.  Si no fue asi, te remite de nuevo al formulario de inserción: 
// No se comprueba aqui si se ha subido correctamente. 
if (empty($_FILES['imagen']['name'])){  
exit; 
}

// archivo temporal (ruta y nombre). 
$binario_nombre_temporal=$_FILES['imagen']['tmp_name']; 

// leer del archvio temporal .. el binario subido. 
// "rb" para Windows .. Linux parece q con "r" sobra ... 
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

// Obtener del array FILES (superglobal) los datos del binario .. nombre, tabamo y tipo. 
$binario_nombre=$_FILES['imagen']['nombre']; 
$binario_peso=$_FILES['imagen']['peso']; 
$binario_tipo=$_FILES['imagen']['tipo'];

// Mover ela imagen a una carpeta
move_uploaded_file($_FILES['imagen']['tmp_name'],"fotos_linea_blanca/".$_FILES['imagen']['name']);

//insertamos los datos en la BD. 
$consulta_insertar "INSERT INTO linea_blanca (imagen, nombre, peso, tipo) VALUES ('$binario_contenido', '$binario_nombre', '$binario_peso', '$binario_tipo')"
mysql_query($consulta_insertar,$link) or die("No se pudo insertar los datos en la base de datos."); 

if (isset(
$_GET['id'])){      
  
$sql="UPDATE linea_blanca SET producto='".$_GET['producto']."', modelo='".$_GET['modelo']."', descripcion='".$_GET['descripcion']."', precio='".$_GET['precio']."', stock='".$_GET['stock']."'"
if (
mysql_query($sql)){  
   exit; 
} else { 
   echo 
"Error Mysql: ".msyql_error(); 

} else { 
   
header ("Location: error.php"); 
   exit; 
}   
?>
  #9 (permalink)  
Antiguo 01/08/2004, 10:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Fijate en tu BD que datos estás actualizando .. por qué aquí en tu UPDATE no estás indicando que registro es el que debes actualizar .. en tu caso parece que ese tal "ID"

Código PHP:
  $sql="UPDATE linea_blanca SET producto='".$_GET['producto']."', modelo='".$_GET['modelo']."', descripcion='".$_GET['descripcion']."', precio='".$_GET['precio']."', stock='".$_GET['stock']."' WHERE id="'.$_GET['id']."'"; 
Pero además .. ese "ID" supongo que tendrá que ser el que se generó por el INSERT que creó ese registro con esa imagen .. Para eso debes usar:

mysql_insert_id()
www.php.net/mysql_insert_id

Pero, .. NOOOOOOOOOO es necesario que hagas un INSERT y luego un "UPDATE".. cuando puedes hacerlo todo a la vez ya que todos esos campos son de esa misma tabla. Pero, realmente no sé que hace ese script .. por qué le pasas un "ID"? .. acaso es para actualizar ese "producto"? (no crearlo) .. Si esa así .. el INSERT de la imagen también tendría que ser un UPDATE bajo el WHERE id=$_GET['id'] .. para que actualice ese producto!.

Un saludo,
  #10 (permalink)  
Antiguo 01/08/2004, 10:51
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Me perdi!!!!!

A ver, este es el mismo codigo que me indicaste ayer para poder "ver" los campos llenos de mi formulario con los datos del registro y luego, modificar el que quisiera, hacer submit y listo, registro modificado:

FORMULARIO modificar_linea_blanca.php

Código PHP:
<? 
include ("config.php"); 

if (isset(
$_GET['id'])){ 
$sql="SELECT * FROM linea_blanca WHERE id='".$_GET['id']."'"
$result mysql_query($sql) or die (mysql_error()); 
$resultado=mysql_fetch_array($result); 


?>


<form action="modificar_linea_blanca2.php" method="get" enctype="multipart/form-data" name="productos" id="productos"> 
                    <table width="255"> 
                      <tr> 
                        <td width="91"><div align="left">ID:</div></td> 
                        <td width="152"><div align="left"> 
                          <input name="id" type="text" id="id" size="3" align="left" value="<? echo $resultado['id']; ?>"> 
                        </div></td> 
                      </tr> 
                        <td><div align="left">Producto:</div></td> 
                        <td><div align="left"> 
                          <input name="producto" type="text" id="producto" value="<? echo $resultado['producto']; ?>" size="45" align="left"> 
                        </div></td> 
                      </tr> 
                      <tr> 
                        <td><div align="left">Modelo:</div></td> 
                        <td><div align="left"> 
                          <input name="modelo" type="text" id="modelo" value="<? echo $resultado['modelo']; ?>" size="45" align="left"> 
                        </div></td> 
                      </tr> 
                      <tr> 
                        <td><div align="left">Descripción:</div></td> 
                        <td><div align="left"> 
                          <input name="descripcion" type="text" id="descripcion" value="<? echo $resultado['descripcion']; ?>" size="45" align="left"> 
                        </div></td> 
                      </tr> 
                      <tr> 
                        <td><div align="left">Precio:</div></td> 
                        <td><div align="left"> 
                          <input name="precio" type="text" id="precio" value="<? echo $resultado['precio']; ?>" size="45" align="left"> 
                        </div></td> 
                      </tr> 
                      <tr> 
                        <td><div align="left">Stock:</div></td> 
                        <td><div align="left"> 
                          <input name="stock" type="text" id="stock" value="<? echo $resultado['stock']; ?>" size="45" align="left"> 
                        </div></td> 
                      </tr> 
                      <tr> 
                        <td><div align="left">Imagen</div></td> 
                        <td><div align="left"> 
                          <input name="imagen" type="file" id="imagen" value="<? echo $resultado['imagen']; ?>" size="45" align="left"> 
                        </div></td> 
                      </tr> 
                      <tr> 
                        <td>&nbsp;</td> 
                        <td>&nbsp;</td> 
                      </tr> 
                      <tr> 
                        <td colspan="2"><div align="center"> 
                            <input type="submit" name="submit" value="Modificar Registros"> 
                        </div></td> 
                      </tr> 
                    </table> 
                  </form>

el que es llamado por el submit, modificar_linea_blanca2.php

Código PHP:
<? 
include ("config.php"); 

if (isset(
$_GET['id'])){       
  
$sql="UPDATE linea_blanca SET producto='".$_GET['producto']."', modelo='".$_GET['modelo']."', descripcion='".$_GET['descripcion']."', precio='".$_GET['precio']."', stock='".$_GET['stock']."', imagen='".$_GET['imagen']."'"
if (
mysql_query($sql)){   
   exit; 
} else { 
   echo 
"Error Mysql: ".msyql_error(); 

} else { 
   
header ("Location: error.php"); 
   exit; 
}    
?>
Lo que hice fue "incluir" el campo imagen, tanto en el formulario como en el codigo de "update", pero no se como hacerlo funcionar...
  #11 (permalink)  
Antiguo 01/08/2004, 10:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pero .. Partamos de la base:

¿Comprendes que hace una instrucción SQL tipo?:

UPDATE tabla SET campo=valor

(esto no es de de PHP sino de SQL y base de datos)

Debes comprender hasta donde llega PHP y donde empieza SQL (Base de datos) y como lo que ejecutes en ella (SQL) será lo que obtengas.

Un saludo,
  #12 (permalink)  
Antiguo 01/08/2004, 11:21
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Notaras que no soy muy entendido en nada de programacion y que apenas estoy dando mis primeros pasos, pero creo entender lo siguiente:

Código PHP:
<?
if (isset($_GET['id'])){        
  
$sql="UPDATE linea_blanca SET producto='".$_GET['producto']."', modelo='".$_GET['modelo']."', descripcion='".$_GET['descripcion']."', precio='".$_GET['precio']."', stock='".$_GET['stock']."', imagen='".$_GET['imagen']."'"
if (
mysql_query($sql)){    
   exit;
?>
Algo así como:

Actualízame la tabla linea_blanca en la que el campo producto sea igual al que recogimos del formulario. Si es correcto, entonces salimos, si no, etc...

Creo que por alí vamos y se que esto no es mas que logica pura, pero carajo, como falla a veces...jajaja

Lo que veo es que no puedo actualizar el campo imagen, creo que mas bien debería actualizar los registros y a la vez, insertar una nueva imagen que suplante a la otra en la base de datos.. voy bien?

Bueno, de ser así, tendria que unir la accion de actualizar registros con la de insertar la imagen.. Pues hasta alli llegue...
  #13 (permalink)  
Antiguo 02/08/2004, 06:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Actualízame la tabla linea_blanca en la que el campo producto sea igual al que recogimos del formulario. Si es correcto, entonces salimos, si no, etc...
No, así no se comporta el código que pusistes. Además .. recuerda que ahí tienes dos partes claramente diferenciadas (o deberían quedarte claro):

1) Sentencia SQL (Lenguaje Estructurado de Consultas). Ese tal "UPDATE ... ", eso es la sentencia SQL.
2) Resto de lógica y funciones PHP que "ejecutarán" tu sentencia SQL sobre tu BD.

El "condicional" TIENE que ser sobre la consulta SQL para que se comporte como tu quieres. Es decir, actualizar los N campos que ahí mencionas del Registro que deseas que cumpla cierta condición id=nº tal ..

Ejemplo:
UPDATE tabla SET campo='valor' WHERE id=1

Si te dás cuenta .. aquí no meto nada de $variables .. ni if() ni nada por qué no es "lenguaje PHP" sino "lenguaje SQL".

Te recomiendo hacer un alto en el caminio y leer sobre SQL que es otro lenguaje más que estás usando y debes conocer, sino .. nunca le encontraras "lógica" a las cosas por qué estás omitiendo cosas como este tan importante del "SQL".

Te recomiendo:
www.mysql-hispano.com

Un saludo,

Un saludo,
  #14 (permalink)  
Antiguo 02/08/2004, 08:21
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 5 meses
Puntos: 0
Creo que no lo voy a lograr...

Mientras más leo, menos comprendo.

Todo lo que he logrado hasta ahora (mucho de este foro) lo que colocado en mi web, he analizado y al final he comprendido el "por qué" de cada código que he utilizado de aquí.

Pero en este caso, no entra. Pruebo una y otra cosa, leo y releo, pero nada... no entiendo que debo hacer.

Gracias..!!!
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 08:55.