¿Cómo puedo abrir el seleccionador de archivos al hacer click en una imagen para reemplazarla por la nueva?

Quisiera que al hacer click en una imagen se abriese el mismo explorador de archivos que se abre con los <input type='file'>. El caso es el siguiente:

Guardo en una base de datos de mysql los datos de un formulario, entre elos una imagen seleccionada mediante el mencionado input file. Desde otro archivo lo que quiero es poder editarlo o actualizarlo.

Para ello creo el formulario y le pongo los datos que ya tenía anteriormente en cada input del formulario, salvo la imagen, que sólo pongo esa imagen y si se quiere cambiar por otra quiero dar la opción de que se abra nuevamente el explorador para seleccionar la nueva imagen y sustituirla por la existente.

¿Hay forma de hacer eso o algo medianamente similar? Ya sea con php o con JavaScript o con HTML5

Respuesta

Debes levantar la imagen, y guardarla.

Creas un html con el formulario

<form enctype="multipart/form-data" action="uploader.php" method="POST">
<input name="uploadedfile" type="file" />
<input type="submit" value="Subir archivo" />
</form>

Luego creas el php en este caso es uploader.php

<?php if (!isset($_SESSION)) {  session_start();}
$id = $_SESSION['id_imagen']; // es el id de la imagen que voy a reemplazar
$target_path = "uploads/"; //esta es la ruta donde voy a guardar la imagen
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { echo "El archivo ". basename( $_FILES['uploadedfile']['name']). " ha sido subido";
} 
else{
echo "Ha ocurrido un error, trate de nuevo!";
}
$foto = basename( $_FILES['uploadedfile']['name']);
$len = strlen($foto);
$tipo = substr($foto,$len-4);
//echo "<br><br>";
//le cambio el nombre a la imagen
$a1 = "uploads/".$foto;
$a2 = "uploads/".$id.$tipo;
rename($a1, $a2);
// a3 sera el nombre variable de mi nueva imagen
$a3 = $id.$tipo;
$viene = $_SESSION['viene_de'];
include('../Connections con la BBDD/myconexion admin.php');
mysql_select_db($database_myconexion, $myconexion);
$query_Recordset1 = "SELECT * FROM master WHERE id = '$id' ";
$Recordset1 = mysql_query($query_Recordset1, $myconexion) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$sQuest = "UPDATE master  SET  imagen = '$a3' WHERE id = '$id' "; 
if(!mysql_query($sQuest)) {$ty="";}
else{$ty="";}
// ahora lo que hago es leer la BBDD y obtener la imagen
include('../Connections con la BBDD/myconexion admin.php');
mysql_select_db($database_myconexion, $myconexion);
$query_Recordset1 = "SELECT * FROM master WHERE id = '$id' ";
$Recordset1 = mysql_query($query_Recordset1, $myconexion) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$_SESSION['imagen'] = $row_Recordset1['imagen'];
//regreso y me debe mostrar el nuevo logotipo
echo "<meta http-equiv='refresh' content='0;url=../Menu de la Propiedad.php' />";
?>

Te explico algo:

Con este script guarda el nombre de la imagen en la Base de datos y la imagen con nombre variable en un directorio.

También puedes grabar la imagen dentro de la Base de datos.

1 respuesta más de otro experto

Respuesta

Puedes hacerlo con una imagen tipo blob, puedes reemplazar la imagen pero tendrás que enviar la imagen con ajax y tendrás que ser binario, o si lo prefieres puedes ver este video donde se muestra como usar un plugin para hacer esta operación: https://www.youtube.com/watch?v=IoYLY93c7XU  

Saludos gracias por visitar: http://develoteca.com y por suscribirte a: https://www.youtube.com/user/dimit28 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas