Foros del Web » Programando para Internet » PHP »

Editar Imagen

Estas en el tema de Editar Imagen en el foro de PHP en Foros del Web. Hola, Tengo el siguiente scrip en php que viene de un formulario donde cambios nombres y otros datos del usuario logeado, Tiene una imagen avatar ...
  #1 (permalink)  
Antiguo 01/09/2017, 22:41
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 450
Antigüedad: 16 años, 1 mes
Puntos: 2
Editar Imagen

Hola, Tengo el siguiente scrip en php que viene de un formulario donde cambios nombres y otros datos del usuario logeado, Tiene una imagen avatar y quisiera saber como hacer para que me permita modificar una con una imagen nueva que se sube en un directorio y se guarda la url a la base de datos, he intentado de todo pero no me ha funcionad,. Todo lo demas funciona, hasta subir la imagen tambien funciona, pero no se guarda en la bd.

Este es el codigo

Código PHP:

<?php
include("conexion.php");

$target_dir "uploads/";
$target_file $target_dir basename($_FILES["img_profile"]["name"]);
$uploadOk 1;

$imageFileType pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    
$check getimagesize($_FILES["img_profile"]["tmp_name"]);
    if(
$check !== false) {
        echo 
"File is an image - " $check["mime"] . ".";
        
$uploadOk 1;
    } else {
        echo 
"File is not an image.";
        
$uploadOk 0;
    }
}

//if ($_FILES["fileToUpload"]["size"] > 80000000) {
    //echo "Sorry, your file is too large.";
    //$uploadOk = 0;
//}

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    
///echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    
$uploadOk 0;
}

// Check file size


 
if (move_uploaded_file($_FILES["img_profile"]["tmp_name"], $target_file)) {
        
//echo "El archivo ". basename( $_FILES["foto_1"]["name"]). " ha sido cargado.";
    
} else {
        
//echo "Sorry, there was an error uploading your file.";
    
}


$sql "update login set nombre = '".$_POST["nombre"]."', username = '".$_POST["username"]."', email = '".$_POST["email"]."', password = '".$_POST["password"]."', celphone = '".$_POST["celphone"]."', img_profile = '".$_POST["$target_file"]."' where cod_us='".$_POST["cod_us"]."'";


$res=mysql_query($sql,$conexion);
echo 
"<script type=''>
    alert('Perfil Modificado correctamente, debes cerrar sesion para ver los cambios');
    window.location='profile.php?cod_us="
.$_POST["cod_us"]."';
</script>"
;

?>
Y algo al final tambien es que para poder ver los cambios del usuario logeado tengo que cerrar la sesion ya que no me cargan los cambios de una. Por que?
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #2 (permalink)  
Antiguo 02/09/2017, 03:07
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Editar Imagen

Hola karenlorenadg,

Los archivos no llegan en el array $_POST, sino en el array $_FILES, como ya lo tenías asignado al comienzo del script, sería así:

Código PHP:
Ver original
  1. $sql = "update login set nombre = '".$_POST["nombre"]."', username = '".$_POST["username"]."', email = '".$_POST["email"]."', password = '".$_POST["password"]."', celphone = '".$_POST["celphone"]."', img_profile = '".$target_file."' where cod_us='".$_POST["cod_us"]."'";

Espero que te sirva...

P.D.: Yo no introduciría directamente en la BD los valores que llegan del formulario sin antes procesarlos y validarlos...
  #3 (permalink)  
Antiguo 02/09/2017, 14:23
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 450
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Editar Imagen

Cita:
Iniciado por rbczgz Ver Mensaje
Hola karenlorenadg,

Los archivos no llegan en el array $_POST, sino en el array $_FILES, como ya lo tenías asignado al comienzo del script, sería así:

Código PHP:
Ver original
  1. $sql = "update login set nombre = '".$_POST["nombre"]."', username = '".$_POST["username"]."', email = '".$_POST["email"]."', password = '".$_POST["password"]."', celphone = '".$_POST["celphone"]."', img_profile = '".$target_file."' where cod_us='".$_POST["cod_us"]."'";

Espero que te sirva...

P.D.: Yo no introduciría directamente en la BD los valores que llegan del formulario sin antes procesarlos y validarlos...
Excelente, me funcionó. Muchas gracias.

Otras preguntas:


Hola y como haria para antes validarlos?
Y Como haga para que no me cambie la imagen si en opload file está vació partiendo de que el usuario quiera solo cambiar el nombre y no la imagen?
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #4 (permalink)  
Antiguo 02/09/2017, 18:31
 
Fecha de Ingreso: octubre-2008
Ubicación: Colombia
Mensajes: 450
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Editar Imagen

De que manera puedo reemplazar el nombre de la imagen por la hora exacta en que se subió la imagen, esto con el fin de evitar imagenes con el mismo nombre. Donde debo modificar?
__________________
Desarrollo de Aplicaciones de Escritorio, Sitios Web, Audio y Video en SISGUS
  #5 (permalink)  
Antiguo 02/09/2017, 20:16
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años, 7 meses
Puntos: 16
Respuesta: Editar Imagen

En pocas palabras: Sugiero que antepongas fecha y hora en formato yyyymmdd-HHmmss al nombre del archivo.

Saludos,

PCID.

Código PHP:
<?php
    $target_dir 
"uploads/";
    if (!
file_exists($target_dir)) mkdir($target_dir);

    
$uploadOk FALSE;
    
$sql "";
    if (isset(
$_POST['sb']))
    {

        if (
$_FILES['img_profile']['size'] != 0)
        {
            if (!
file_exists($target_dir)) mkdir($target_dir);

            
$target_file $target_dir date('Ymd-His') . '_' basename($_FILES["img_profile"]["name"]);
            
$imageFileType pathinfo($target_filePATHINFO_EXTENSION);
            
$check getimagesize($_FILES["img_profile"]["tmp_name"]);
            
$uploadOk = ($check !== false);
        }

        if (
$uploadOk)
        {
            
move_uploaded_file($_FILES["img_profile"]["tmp_name"], $target_file);

            
$_POST['nombre'] = 'nombre value…';
            
$_POST['username'] = 'username value…';
            
$_POST['email'] = 'email value…';
            
$_POST['password'] = 'password value…';
            
$_POST['celphone'] = 'celphone value…';
            
$_POST['cod_us'] = 'cod_us value…';



            
$sql "update login set nombre = '" $_POST["nombre"] . "',"
                    
" username = '" $_POST["username"] . "',"
                    
" email = '" $_POST["email"] . "',"
                    
" password = '" $_POST["password"] . "',"
                    
" celphone = '" $_POST["celphone"] . "',"
                    
" img_profile = '" $target_file "'"
                
" where cod_us='" $_POST["cod_us"]."'";



        }

    }

?>

<form method="post" enctype="multipart/form-data">
    <input id="img_profile" name="img_profile" type="file"/>
    <hr/>
    <input id="sb" name="sb" type="submit" value="Upload file"/>
</form>
<hr/>
<?php echo $sql?>
  #6 (permalink)  
Antiguo 03/09/2017, 03:51
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 21 años
Puntos: 154
Respuesta: Editar Imagen

Cita:
Iniciado por karenlorenadg Ver Mensaje
Hola y como haria para antes validarlos?
Es solo un ejemplo muy básico, pero puedes buscar más sobre sql injection y xss:

Código PHP:
Ver original
  1. if ( isset($_POST['nombre']) && !empty($_POST['nombre']) ) {
  2. $nombre = trim(strip_tags($_POST['nombre']));
  3. }


Cita:
Iniciado por karenlorenadg Ver Mensaje
Y Como haga para que no me cambie la imagen si en opload file está vació partiendo de que el usuario quiera solo cambiar el nombre y no la imagen?
Una opción es recuperar el nombre de la imagen de tu BD y hacer algo así:

Código PHP:
Ver original
  1. if ( isset($_FILES['img_profile']) && !empty($_FILES['img_profile']) ) {
  2. $img_profile = trim(strip_tags($_FILES['img_profile']));
  3. } else {
  4. $img_profile = "la recuperada de tu bd";
  5. }

Otra opción es, en el formulario, colocarle el nombre que tiene en tu BD en un input type hidden antes del input type file, de esa forma, si llena el file, se cambia, si no lo llena, te tomará el valor del hidden, yo personalmente prefiero la que te he puesto.

Respecto a lo del nombre único, la respuesta que te ha dado pcid es perfectamente válida.

Espero que te sirva...

Etiquetas: formulario, mysql, nombre, sql, url
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 12:11.