Foros del Web » Programando para Internet » PHP »

Ayuda para modificar foto

Estas en el tema de Ayuda para modificar foto en el foro de PHP en Foros del Web. Buenas, quiero modificar un producto de mi bd, y quiero hacerlo tb con la foto. la idea es mostrar la foto, poner un examinar, y ...
  #1 (permalink)  
Antiguo 05/09/2005, 10:45
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
Ayuda para modificar foto

Buenas, quiero modificar un producto de mi bd, y quiero hacerlo tb con la foto. la idea es mostrar la foto, poner un examinar, y hacer un if. si el valor de la imagen es ="", entonces que me deje la foto actual (la que recibo del query), y si no, que inserte el nuevo valor.

esto esta muy bien pero no se como implementarlo.

alguna sugerencia?

salu2
  #2 (permalink)  
Antiguo 05/09/2005, 14:09
 
Fecha de Ingreso: julio-2003
Mensajes: 463
Antigüedad: 14 años, 5 meses
Puntos: 0
Hola, necesitas un formulario en una página y luego en otra página que se reciban esos datos. Si no se ha indicado una foto nueva, lo dejas todo como está, sino la cambias haciendo un UPDATE del campo que contenga la ruta de la imagen (en el caso de que guardes la ruta).

Un saludo.
  #3 (permalink)  
Antiguo 05/09/2005, 14:35
 
Fecha de Ingreso: septiembre-2005
Ubicación: Bs as, capital
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Podrias hacer un formulario como el siguiente, para enviar los datos de la imagen seleccionada:

<form action="repositorio_respuesta.php" method="post" enctype="multipart/form-data">
<table width="500" border="0" align="center" cellpadding="5" cellspacing="0" class="recuadroColumnas">
<tr align="center" valign="middle" class="textoCuadroBuscarABM">
<td height="30" colspan="2" class="cabezalCuadroReporte"><strong>Agregar
Documento </strong></td>
</tr>
<tr align="center" valign="middle" class="textoCuadroBuscarABM">
<td height="31" align="right">Archivo:</td>
<td height="31" align="left">
<input type="file" name="file" value="Examinar" size="34"> </td>
</tr>
<tr align="center" valign="middle" class="textoCuadroBuscarABM">
<td height="31" align="right">Nombre:</td>
<td height="31" align="left"><input name="nombre" type="text" size="50"></td>
</tr>
<tr align="center" valign="middle" class="textoCuadroBuscarABM">
<td height="31" align="right">Descripci&oacute;n:</td>
<td height="31" align="left"><textarea name="descripcion" cols="50" rows="6"></textarea></td>
</tr>
<tr align="center" valign="middle">
<td height="30" colspan="2">
<input type="submit" name="Submit22" value="Agregar Archivo">
</td>
</tr>
</table>
</form>

Luego para rescatar los datos del objeto FILE desde la pagina "repositorio_respuesta.php" hacer lo siguiente:

if(empty($_FILES['file']['name']))
{
echo "<p align=center> No se ha seleccionado un archivo</p>";
//mostrar la imagen que anteriormente habia sido cargada
}
else{
//Hacer los MYSQL_QUERY para actualizar los datos de la base de datos
//Mostrar la nueva imagen
}

El codigo para cargar los nuevos datos en la BD y levantar el archivo que fue seleccionado al servidor podria ser el siguiente:

$uploadDir = 'repositorios/';
$uploadFile = $uploadDir . $_REQUEST[id_materia] ."-". basename($_FILES ['file']['name']);
if (copy($_FILES['file']['tmp_name'], $uploadFile))
{
//si no hubo errores hago las operaciones con los datos y realizo el alta

//elimina los elementos que no se definieron en el array
foreach($_REQUEST as $indice=>$valor){
if(!in_array($indice,$A_CAMPOS)){
unset($_REQUEST[$indice]);
}
}

//separo los valores de $_REQUEST en 2 strings
foreach($_REQUEST as $indice=>$valor){
if($indice != "cmdAlta" && $indice !="validacion" && $indice! ="permisos" && $indice!="style"){
$campos=$campos."$indice,";
$valores=$valores."'$valor',";
}
}

$campos=$campos."+";
$valores=$valores."+";
$campos=str_replace(",+","",$campos);
$valores=str_replace(",+","",$valores);

$campos=$campos .", archivo";
$valores=$valores .",'". $_REQUEST[id_materia] ."-". basename($_FILES['file'] ['name']) ."'";

//insetar los datos en la tabla
if(!mysql_query("insert into docs ($campos) values ($valores)"))die (mysql_error());

echo "<p>El alta se realizó con éxito</p>";
echo "<p> <a href=\"repositorio.php\">Continuar </a></p>";
}
else
{
echo "<p align=center>El archivo no pudo ser levantado</p>";
echo "<p> <a href=\"repositorio.php\">Continuar </a></p>";
}
  #4 (permalink)  
Antiguo 06/09/2005, 06:22
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 15 años, 11 meses
Puntos: 3
buenas, y gracias por responder.

la idea es pasar el valor del campo foto1 (la foto q hay subida y el nombre en la bd). subir la nueva foto al servidor, con el mismo nombre. y borrar la anterior foto... tengo algo asi:

if (($imagen=="")){

$sql=("UPDATE bd SET zona='$zona',tipo='$tipo',m2='$m2',precio='$precio ',ptas='$ptas',hab='$hab',hab2='$hab2',comedor='$c omedor',cocina='$cocina',terraza='$terraza',bano=' $bano',aseo='$aseo',observaciones='$observaciones' WHERE idvivienda='$idvivienda'");



$cnx = conectar();
$res = mysql_query($sql) or die (mysql_error());

mysql_close($cnx);

echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Vivienda modificada correctamente<a href="index.php">Volver</a></font>';
}

if (($imagen != "")){


// ESTO ES PARA LA PRIMERA IMAGEN
if (is_uploaded_file($_FILES['imagen1']['tmp_name'])) {
if ($_FILES['imagen1']['type'] == "image/jpeg" || $_FILES['imagen1']['type'] == "image/pjpeg"){
//$nombre= "imagenes/".$_FILES['imagen']['name']; // Conserva su nombre original, se guarda en una carpeta imagenes
//nombre de la imagen
$new_foto1 = $foto1;


//movemos la imagen.
move_uploaded_file($_FILES['imagen1']['tmp_name'], "fotos/".$new_foto1);
redimencionar("fotos/".$new_foto1);// una vez definido el nombre del archivo no importa dónde se llame a la función

//unlink($foto_old);
$sql1=("UPDATE bd SET zona='$zona',tipo='$tipo',m2='$m2',precio='$precio ',ptas='$ptas',hab='$hab',hab2='$hab2',comedor='$c omedor',cocina='$cocina',terraza='$terraza',bano=' $bano',aseo='$aseo',observaciones='$observaciones' , foto1='$new_foto1' WHERE idvivienda='$idvivienda'");

$cnx1 = conectar();
$res1 = mysql_query($sql1) or die (mysql_error());

mysql_close($cnx1);

echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Vivienda modificada correctamente <a href="index.php">Volver</a></font>';
}}}
?>


tengo un form que le envio las variables. si no introduzco foto, modifico los campos sin problema y se queda la misma foto. el problema viene cuando meto una foto. el campo de la foto es imagen1. me modifica todos los datos del piso, pero no me modifica la foto. la idea seria sobreescribirla, y conservar el nombre anterior (ya que se guarda con un codigo y un id +.1.jpg, 2...)

espero haberme explicado correctamente.

salu2
  #5 (permalink)  
Antiguo 06/09/2005, 08:56
 
Fecha de Ingreso: septiembre-2005
Ubicación: Bs as, capital
Mensajes: 77
Antigüedad: 12 años, 3 meses
Puntos: 0
Tenes que primero mover la anterior hacia otra carpeta (si queres conservarla) o directamente eliminarla y luego subir o levantar la imagen nueva con el mismo nombre

$uploadDir = 'imagenes/';
$uploadFile = $uploadDir ."-". basename($_FILES ['imagen1']['name']);
if (copy($_FILES['imagen1']['tmp_name'], $uploadFile))
{
//Si la imagen fue reemplazada exitosamente entonces se elimina la imagen anterior y se realizan los cambios en la base de datos
unlink($foto_old);

$new_foto1=$_FILES ['imagen1']['name']);

echo "la imagen se ha modificado exitosamente";
$sql1=("UPDATE bd SET zona='$zona',tipo='$tipo',m2='$m2',precio='$precio ',ptas='$ptas',hab='$hab',hab2='$hab2',comedor='$c omedor',cocina='$cocina',terraza='$terraza',bano=' $bano',aseo='$aseo',observaciones='$observaciones' , foto1='$new_foto1' WHERE idvivienda='$idvivienda'");

$cnx1 = conectar();
$res1 = mysql_query($sql1) or die (mysql_error());

mysql_close($cnx1);

echo '<font face="Verdana, Arial, Helvetica, sans-serif" size="1">Vivienda modificada correctamente <a href="index.php">Volver</a></font>';
}

//De esta forma si la imagen no pudo ser levantada con exito no se pierden los datos anteriores ni se elimina la imagen anterior
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 16:02.