Comunidad de diseño web y desarrollo en internet online

PREVENIR UPDATE DE CAMPO NO MODIFICADO

Citar            
MensajeEscrito el 12 Dic 2012 04:02 pm
Buenos días a todos, pasa lo siguiente, tengo un formulario que trae y muestra los datos de una table para que el usuario pueda hacer actualizaciones sobre ese contenido en los TD tengo la estructura así:

Código PHP :

<td colspan="2"><p>Contenido</p></td><td><textarea name="contenido2" ><?php echo $datos["parrafo2"] ?></textarea></td>
   </tr>
   <tr>
       <td colspan="2"><p>Imagen</p></td><td><img src="img_db/<?php echo $datos["imagen"] ?>" width="50%"/><input name="archivo" type="file" id="foto" /></td>


Esta parte funciona bien, lo que pasa es que si no quiero cambiar la imagen y dejar la misma, al hacer el update me manda el campo vacío, no respeta la imagen que ya estaba almacenada en la base de datos y se borra el contenido anterior, no se que puedo cambiar para que me respete en general los campos que no fueron modificados. En el archivo que envía tengo esto:

Código PHP :

<?php
   
$titulo = $_POST['titulo'];
$contenido1 = $_POST['contenido1'];
$subtitulo = $_POST['subtitulo'];
$contenido2 = $_POST['contenido2'];
$foto = $_FILES['archivo']['name'];
$ruta = $_FILES['archivo']['tmp_name'];
$destino = "img_db/".$foto;
copy($ruta, $destino);

$query="UPDATE empresa set titulo='$titulo', parrafo1='$contenido1', subtitulo='$subtitulo', parrafo2='$contenido2', imagen='$foto'";

$result = mysql_query($query,$con) or die( "Error en $consulta: " . mysql_error() );

?>


Les agradezco si me pueden dar una mano.

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome
Citar            
MensajeEscrito el 12 Dic 2012 04:38 pm
Pues simplemente pregunta si $_FILES tiene o no tiene una imagen.

Si no la tiene, no pongas el campo "imagen" en el UPDATE.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 13 Dic 2012 03:11 pm
Muchas gracias, hice lo que dijiste y funcionó perfecto.

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome
Citar            
MensajeEscrito el 13 Dic 2012 04:08 pm
Nooo, me retracto, si no cambio la imagen funciona porque no me borra la que está en la base de datos, pero me saca esta advertencia:

Código PHP :

Warning: copy() [function.copy]: Filename cannot be empty
pero cuando quiero cambiar la imagen me sigue mostrando la vieja, no hace el update, tengo esto:

Código PHP :

<?php
   
$titulo = $_POST['titulo'];
$contenido1 = $_POST['contenido1'];
$subtitulo = $_POST['subtitulo'];
$contenido2 = $_POST['contenido2'];
$foto = $_FILES['archivo']['name'];
$ruta = $_FILES['archivo']['tmp_name'];
$destino = "img_db/".$foto;
copy($ruta, $destino);

if (empty($_POST["archivo"]))

   {
         $query="UPDATE empresa set titulo='$titulo', parrafo1='$contenido1',                       
      subtitulo='$subtitulo', parrafo2='$contenido2'";
  }

else {

$query="UPDATE empresa set titulo='$titulo', parrafo1='$contenido1', subtitulo='$subtitulo', parrafo2='$contenido2', imagen='$foto'";

}

$result = mysql_query($query,$con) or die( "Error en $consulta: " . mysql_error() );

?>


Qué estoy haciendo mal?? muchas gracias.

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome
Citar            
MensajeEscrito el 13 Dic 2012 04:18 pm
la imagen antigua se cumple por que esta condicional siempre se cumple

Código PHP :

if (empty($_POST["archivo"]))


lo que deberias hacer es

Código PHP :

if (empty($_FILES["archivo"]))

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Dic 2012 04:54 pm
Gracias por la respuesta, ensayé lo que me dices y si hace el update pero si no hago cambio de la imagen me muestra este warning: Warning: copy() [function.copy]: Filename cannot be empty y borra la imagen anterior de la BD

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome
Citar            
MensajeEscrito el 13 Dic 2012 04:58 pm
Ese aviso te sale porque intentas hacer la copia del archivo sin tener en cuenta si el archivo origen existe o no. O sea, copias el archivo sin verificar si $_FILES tiene algo o no.

Siguiendo la lógica de tu programa, si haces el UPDATE incluyendo el campo imagen en la base de datos, entonces debes copiar el archivo apuntado por $_FILES, sino pues no...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 13 Dic 2012 05:19 pm
Eso lo entiendo lo que no sé es como puedo preveer si se querrá o no cambiar la imagen puede que unas veces si otras no, esa es la parte que no se como ajustar en el código que tengo... :( Hice inicialmente lo del if para no incluir la imagen en el update pero no funcionó....

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome
Citar            
MensajeEscrito el 13 Dic 2012 07:20 pm
si quiere actualizar la imagen , la subira y entonces la variable
$_FILES["archivo"]
existira, si no sube archivo alguno entonces ese vector (array) no exisitira

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 13 Dic 2012 08:07 pm
Según lo que me dijiste hice el cambio así, no se si faltó algo pero si no actualizo la imagen me la envia vacía y borra la anterior en la base de datos:

Código PHP :

<?php
   
$titulo = $_POST['titulo'];
$contenido1 = $_POST['contenido1'];
$subtitulo = $_POST['subtitulo'];
$contenido2 = $_POST['contenido2'];
$foto = $_FILES['archivo']['name'];
$ruta = $_FILES['archivo']['tmp_name'];
$destino = "img_db/".$foto;
copy($ruta, $destino);

if (empty($_FILES["archivo"]))

   {
         $query="UPDATE empresa set titulo='$titulo', parrafo1='$contenido1',                       
      subtitulo='$subtitulo', parrafo2='$contenido2'";
  }

else {

$query="UPDATE empresa set titulo='$titulo', parrafo1='$contenido1', subtitulo='$subtitulo', parrafo2='$contenido2', imagen='$foto'";

}

$result = mysql_query($query,$con) or die( "Error en $consulta: " . mysql_error() );

?>

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome
Citar            
MensajeEscrito el 17 Dic 2012 01:34 pm
haber prueba asi

Código PHP :

<?php
   
$titulo = $_POST['titulo'];
$contenido1 = $_POST['contenido1'];
$subtitulo = $_POST['subtitulo'];
$contenido2 = $_POST['contenido2'];

//declaramos la variable del UPDATE SQL de la imagen por defecto en vacio
$SQL_imagen = '';
//cuando se ha subido la imagen se asume que este quiere ser actualizado y se procede con el proceso
if (!empty($_FILES["archivo"]))
{
   $foto = $_FILES['archivo']['name'];
   $ruta = $_FILES['archivo']['tmp_name'];
   $destino = "img_db/".$foto;
   copy($ruta, $destino);
   //se agrega los campos de la consulta que son necesarias
   $SQL_imagen = ", imagen='$foto'";
        
}
$query="UPDATE empresa set titulo='$titulo', parrafo1='$contenido1', subtitulo='$subtitulo', parrafo2='$contenido2' ";

$result = mysql_query($query,$con) or die( "Error en $consulta: " . mysql_error() );

?>

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 14 Ene 2013 04:15 pm
Lo ensaye tal cual pero el problema persiste, con este último código me deja la imagen anterior sin importar si deseo actualizarla, osea, nuevamente no hace ningún tipo de update en el campo imagen. Seguí consultando y encontré un post de alguien con el mismo problema y con este código para solucionarlo:

if($_FILES['imagen']['tmp_name']=='') {

// aquí haces un update sin cambiar imagen
SQL="UPDATE tabla SET campo1='".$valor1."' where id=x";

}else{


move_uploaded_file($_FILES['imagen']['tmp_name'],'../images/'.$_FILES['imagen']['name']);

$url = basename($_FILES['imagen']['name']);
// aquí haces un update cambiando la imagen
SQL="UPDATE tabla SET campo1='".$valor1."', imagen='".$url."' where id=x";

}

Me podrían orientar sobre como puedo adaptarlo a mi código (en caso de que pueda funcionar)?
Muchas gracias.

Por alejilla

Claber

120 de clabLevel



Genero:Femenino  

Colombia

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.