Nueva pregunta

Pregunta:

Fecha: 22-05-2018 15:15:22 (En Español)

Problema para modificar imagen php[Resuelta]

Buenas y saludos, les vuelvo a escribir para que ayuden a modificar la imagen o foto de un proyecto.

tengo un código para modificar datos y la foto, pero si solo modifico la foto se modifica bien sin problema, el problema es cuando modifico los datos se borra la foto.

adjunto código

<?php
 
 $cedula = $_POST['cedula'];
 
 $foto=$_FILES["foto"]["name"];
 $ruta=$_FILES["foto"]["tmp_name"];
 $destino="../fotos/".$foto;
 move_uploaded_file($ruta,$destino);
 
       $conexion=mysqli_connect("localhost","root","","egresado") or 
           die("Problemas en la conexion");
           mysqli_select_db($conexion,'egresado') or
           die("Problemas en la selección de la base de datos");
           mysqli_query($conexion,"UPDATE persona  pe
								   INNER JOIN facultad fa
								     ON pe.id_persona= fa.id_facultad
								   INNER JOIN carrera  ca
								     ON ca.id_carrera= pe.id_persona SET 
										   nombres='$_REQUEST[nombres]',
										   apellido='$_REQUEST[apellido]',
										   cedula='$_REQUEST[cedula]',
										   fecha_nac='$_REQUEST[fecha_nac]',
										   telefono='$_REQUEST[telefono]',
										   celular='$_REQUEST[celular]',
										   sexo='$_REQUEST[sexo]',
										   year_egreso='$_REQUEST[year_egreso]',
										   facultad_egre='$_REQUEST[facultad_egre]',
										   carrera_egre='$_REQUEST[carrera_egre]',
										   empresa_lab='$_REQUEST[empresa_lab]',
										   cargo='$_REQUEST[cargo]',
										   direccion_emp='$_REQUEST[direccion_emp]',
										   foto='$destino'
							  where pe.cedula= '$cedula'") or
       die(mysqli_error($conexion));
	 
      mysqli_close($conexion);

  ?>  


Les agradecería que ayuden en esto.
Etiquetas: PHP Votos: 0 - Respuestas: 9 - Vistas: 12 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 23-05-2018 03:16:19 Hola Francis,
    Podrías compartir el código de tu formulario?

    A primera vista me parece que si editas los datos sin proporcionar una imagen entonces tu código pierde la referencia a la foto.

    Una vez que compartas tu formulario te puedo confirmar.
      Votos: 0 - Link respuesta
     
  • Fecha: 23-05-2018 03:27:01 hola ok

     <?php
      
        $cedula = $_POST['cedula'];
    	
           $conexion=mysqli_connect("localhost","root","","egresado") or 
           die("Problemas en la conexion");
           mysqli_select_db($conexion,'egresado') or
           die("Problemas en la selección de la base de datos");
              
                $registro=mysqli_query($conexion,"select pe.nombres, pe.apellido, pe.cedula, pe.fecha_nac, pe.telefono, pe.celular, pe.sexo, pe.correo, pe.year_egreso, pe.empresa_lab, pe.cargo, pe.direccion_emp, pe.foto, fa.facultad_egre,ca.carrera_egre
    							    FROM persona  pe
    								 INNER JOIN facultad fa
    								     ON fa.id_facultad= pe.id_persona
    								 INNER JOIN carrera  ca
    								     ON ca.id_carrera= fa.id_facultad
    								 where pe.cedula= '$cedula'")or
          die("Problemas en el select:".mysqli_error($conexion));
    	 
        if ($reg=mysqli_fetch_array($registro))
        {
      ?>
        <form method="post" action="modificacion3.php" enctype="multipart/form-data">
    	<br><br>
          <center><font color="black" SIZE=7>Datos del Egresado</font></center>
    	  <br><br>
      <table align="center" cellspacing="4" cellpadding="4" border="1" width=900  bgcolor=dddddd>
              <tr>
                 <td colspan="2" bgcolor="#2E9AFE" align="center"><font color="White"SIZE=6><strong>Modificar los datos</strong></font></td>
              </tr>
        <tr>
            <td width="50%">
    	      <table align="left" cellspacing="2" cellpadding="2" border="0">
    			  <tr>
    			  <td><div align="right">Nombre:</div></td>
    			  <td><input type="text" name="nombres" size="20" value="<?php echo $reg['nombres']; ?>"></td>
    			  </tr>
    			  <tr>
    			  <td><div align="right">Apellido:</div></td>
    			  <td><input type="text" name="apellido" size="20" value="<?php echo $reg['apellido']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Cedula:</div></td>
    			  <td><input type="text" name="cedula" size="10" value="<?php echo $reg['cedula']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Fecha de Nacimiento:</div></td>
    			  <td><input type="date" name="fecha_nac" size="10" value="<?php echo $reg['fecha_nac']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Telefono:</div></td>
    			  <td><input type="text" name="telefono" size="10" value="<?php echo $reg['telefono']; ?>"></td>      
    			  </tr>
    			  <tr>	  
    			  <td><div align="right">Celular:</div></td>
    			  <td><input type="text" name="celular" size="10" value="<?php echo $reg['celular']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Sexo:</div></td>
    			  <td><input type="text" name="sexo" size="10" value="<?php echo $reg['sexo']; ?>"></td>      
    			  </tr> 
    			  <tr>
    			  <td><div align="right">Correo:</div></td>
    			  <td><input type="email" name="correo" size="20" value="<?php echo $reg['correo']; ?>"></td>      
    			  </tr>
    		  </table>
    		</td>
    		
    		<td width="50%">
    		  <table align="left" cellspacing="2" cellpadding="2" border="0" bgcolor=dddddd >
    			  <tr>
    			  <td><div align="right">Fecha de Egreso:</div></td>
    			  <td><input type="date" name="year_egreso" size="10" value="<?php echo $reg['year_egreso']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Facultad:</div></td>
    			  <td><input type="text" name="facultad_egre" size="40" value="<?php echo $reg['facultad_egre']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Carrera:</div></td>
    			  <td><input type="text" name="carrera_egre" size="40" value="<?php echo $reg['carrera_egre']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Empresa donde Labora:</div></td>
    			  <td><input type="text" name="empresa_lab" size="10" value="<?php echo $reg['empresa_lab']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Cargo Loboral:</div></td>
    			  <td><input type="text" name="cargo" size="10" value="<?php echo $reg['cargo']; ?>"></td>     
    			  </tr>
    			  <tr>
    			  <td><div align="right">Direccion de la Empresa:</div></td>
    			  <td><input type="text" name="direccion_emp" size="10" value="<?php echo $reg['direccion_emp']; ?>"></td>      
    			  </tr>
    			  <tr>
    			  <td><div align="right">Foto:</div></td>
    			  <td><input type="file" name="foto" id="foto" size="10"></td>      
    			  </tr>
    	      </table>
    	    </td>
    
        <tr><center>
          &emsp;&emsp;<select name="cedula">
          <?php
    	  
           $registro2=mysqli_query($conexion,"select pe.nombres, pe.apellido, pe.cedula, pe.fecha_nac, pe.telefono, pe.celular, pe.sexo, pe.correo, pe.year_egreso, pe.empresa_lab, pe.cargo, pe.direccion_emp, pe.foto, fa.facultad_egre,ca.carrera_egre
    							 FROM persona  pe
    								 INNER JOIN facultad fa
    								     ON fa.id_facultad= pe.id_persona
    								 INNER JOIN carrera  ca
    								     ON ca.id_carrera= fa.id_facultad ")or
            die("Problemas en el select:".mysqli_error($conexion));
    	    while ($reg2=mysqli_fetch_array($registro2))
            {
             if ($reg2['cedula']==$reg['cedula'])
               echo "<option value=\"".$reg2['cedula']."\" selected>".$reg2['cedula']."</option>";         
             else
    	       echo "<option value=\"".$reg2['cedula']."\">".$reg2['cedula']."</option>";
            }		
          ?>  
           
          &emsp;&emsp;<input type="hidden" name="cedula" value="<?php echo $_REQUEST['cedula']; ?>">     
          <br><br>
          &emsp;&emsp;<input type="submit" value="Confirmar" style="width:150px; height:40px; font-size:20px";  >
        </form></center><br><br>
        </tr>	
        </tr>
      </table>
    <?php
        }      
    		else
    		{
    		echo "<script>alert('No existe la cedula de este egresado.')</script>";
    		echo "<script>window.location='modificacion.html'</script>";	
    		}
        mysqli_close($conexion);
    
      ?> 
    
      Votos: 0 - Link respuesta
     
  • Fecha: 23-05-2018 05:53:07 Una pregunta porque incrustas tantas llamadas a mysql dentro del mismo html?, no sería mejor utilizar funciones para ello y que se encarguen de las peticiones, así el código quedaría más limpio. Trabajas con clases? MVC?   Votos: 0 - Link respuesta
     
  • Fecha: 23-05-2018 07:31:14 Gracias Carlos por la observación y la sugerencia y si tengo que mejorar mi código, pero les pido que me ayuden porque se borra la "foto" cuando modifico los datos o como puedo hacer.   Votos: 0 - Link respuesta
     
  • Fecha: 23-05-2018 08:51:20 Bueno primero deberías de validar si la persona esta o no actualizando la foto al enviar los datos, porque yo podría querer actualizar mis datos sin enviar mi foto, y si ya tengo una registrada, pues el campo simplemente va a quedar vacío con $foto;

    por otro lado, podrías validar que si se este cargando el archivo antes de guardarla:

    if(!move_uploaded_file($ruta,$destino)){
        echo "No se ha podido subir la imagen. Error: ". error_get_last()['message'];
        return false;
    }
    


    el size que le colocas el campo file, por otro lado, si mal no recuerdo y de acuerdo a esta documentacion indica el tamaño en bytes permitidos en dicho campo.
      Votos: 0 - Link respuesta
     
  • Fecha: 24-05-2018 18:19:48 gracias   Votos: 0 - Link respuesta
     
  • Fecha: 27-05-2018 02:39:29 Buenos días,
    Primero, lo que haría sería guardar en una variable de sesión el valor del campo destino (si tiene un valor) cuando vas a buscar los datos a modificar.
    Segundo, preguntaría utilizando la función isset($_FILES["foto"]) para saber si se cargó una foto, ya sea nueva o que quiera modificar una existente pero sobre todo para que el campo $destino no quede vacío.
    Entonces, si no cargó una foto y solo modifica los datos, usando la variable de sesión donde está guardado el destino, se guarda en el campo correspondiente, el valor que ya tenía sino, es decir, si cargó una foto, el campo destino lo asignas como lo estás haciendo ahora.
    Algo así haría porque como lo tenés ahora, asumo que siempre se va a cargar una foto.
    Una sugerencia, no utilices el nombre que tiene la imagen que subas, generá un nombre y guardá la imagen con ese nombre y ese mismo nombre en la bbdd (yo utilizo la función time aplicándole un algoritmo de encriptación para que me genere un valor de hash y ese es el nombre que utilizo)

    Otra cosa que no tiene mucho que ver con la pregunta, no utilices más la variable $_REQUEST

    Saludos
    DIEGO
      Votos: 1 - Link respuesta
     
  • Fecha: 28-05-2018 17:06:14 Gracias Diego por tu aporte y sugerencia y si ya cambie la variable $_REQUEST por $_POST,   Votos: 0 - Link respuesta
     
  • Fecha: 28-05-2018 17:46:21 Buenas noches
    Si, después vi que utilizabas solo la variable $_POST, buen cambio!!!

    Saludos
    DIEGO
      Votos: 1 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com