Foros del Web » Programando para Internet » PHP »

codigo para insertar/editar noticias en la BD

Estas en el tema de codigo para insertar/editar noticias en la BD en el foro de PHP en Foros del Web. Hola a todos, Siempre he estado usando un codigo para crearme mis gestores de contenidos. Me desde el primer dia que tiene un 'fallo' y ...
  #1 (permalink)  
Antiguo 15/03/2007, 03:47
 
Fecha de Ingreso: noviembre-2006
Mensajes: 68
Antigüedad: 17 años, 5 meses
Puntos: 0
codigo para insertar/editar noticias en la BD

Hola a todos,

Siempre he estado usando un codigo para crearme mis gestores de contenidos. Me desde el primer dia que tiene un 'fallo' y lo he ido subsanando a mano... Pero cansado de darle vueltas me gustaria tener su opinion.

El siguiente código, me introduce en una base de datos de noticias: titulo, sinopsis, contenido, si es destacada, su fecha y una imagen.

Código PHP:
<?
if(isset($_POST['new']))
    {
        
$titulo $_POST['titulo'];
        
$sinopsis $_POST['sinopsis'];
        
$contenido $_POST['contenido'];
        
$destacada $_POST['destacada'];
        
$fecha $_POST['fecha'];

        
$qstart "INSERT INTO noticias(titulo, sinopsis, contenido, destacada, fecha";
        
$qend "values('".$titulo."','".$sinopsis."', '".$contenido."', '".$destacada."', '".$fecha."'";

        if (isset(
$_FILES['archivo']['name']) ) {
            
$nimagen $_FILES['archivo']['name'];
            
            
$newfile $_SERVER['DOCUMENT_ROOT'].$dirgaleria."".$nimagen;
            

            if (
move_uploaded_file($_FILES['archivo']['tmp_name'], $newfile) ) {
                
chmod($newfile0777);
            
                echo 
"Imagen añadida con exito!<br>";
            } else {
                echo 
"";
            }
            
$qstart .= ", file";
            
$qend .= ", '".$nimagen."'";
        }
        
        
$query $qstart.") ".$qend.")";

        
mysql_query($query);
        if (
mysql_errno()) { echo "MySQL error ".mysql_errno().": ".mysql_error()."<br>"; exit; }
    }
?>
<?
    
if(isset($_POST['edit']))
    {
        
$titulo $_POST['titulo'];
        
$sinopsis $_POST['sinopsis'];
        
$contenido $_POST['contenido'];
        
$destacada $_POST['destacada'];
        
$fecha $_POST['fecha'];
    
        
$query "update noticias set titulo='".$titulo."', sinopsis='".$sinopsis."', contenido='".$contenido."', destacada='".$destacada."', fecha='".$fecha."'";
    
        if (isset(
$_FILES['archivo']['name'])) {
            
$nimagen $_FILES['archivo']['name'];
            
$newfile $_SERVER['DOCUMENT_ROOT'].$dirgaleria."".$nimagen;
            if (
move_uploaded_file($_FILES['archivo']['tmp_name'], $newfile)) {
                
chmod($newfile0777);
                echo 
"Imagen añadida con exito!<br>";
            } else {
                echo 
"<br>";
            }
        
            
$query .= ", file='".$nimagen."'";
        }

        
mysql_query($query'where id='.$edit);
        if (
mysql_errno()) { echo "MySQL error ".mysql_errno().": ".mysql_error()."<br>"; exit; }
    }
?>
El codigo funciona tanto para insertar como para editar. Pero cuando quiero editar una noticia, para cambiar cualquier error en mi texto estoy obligado a volver a subir la imagen, ya que si dejo en blanco el input de la imagen, se me borra el contenido de ese campo en la BD.

Mi form para editar las noticias es:

Código:
<h1>Notícies: editar</h1>
        <form action="not.php" method="post" enctype="multipart/form-data">
		<p>
			Título:<br />
			<input type="text" name="titulo" class="texto" value="<?echo $fila["titulo"];?>" />
		</p>
		<p>
			Sinopsis:<br />
			<textarea name="sinopsis"><?echo $fila["sinopsis"];?></textarea>
		</p>
		<p>
			Descripción:<br />
			<textarea name="contenido"><?echo $fila["contenido"];?></textarea>
		</p>
		<p>
			Fecha (AAAA/MM/DD):<br />
			<input type="text" name="fecha" class="texto" value="<?echo $fila["fecha"];?>" />
		</p>
		<p>
		Imagen:<br />
			<input type="File" name="archivo" />
		</p>
	
		<p>
			En portada:<br />
			<select name="destacada" class="texto">
				<OPTION VALUE="SI" <?if($fila["destacada"]=="SI") echo "selected";?>>SI
				<OPTION VALUE="NO" <?if($fila["destacada"]=="NO") echo "selected";?>>NO
			</select>
		</p>
		<p align="right">
			<input type="Hidden" name="edit" value="<?echo $edit;?>" />
			<input type="image" src="<?echo $CFG->imagedir?>/submit.gif" />
		</p>
	</form>
Saben que codigo puedo agregar a la fila:

<input type="File" name="archivo" />

Para que si no introduzco nada al editar, me mantenga la foto que tenia??

Gracias!!
  #2 (permalink)  
Antiguo 15/03/2007, 03:51
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: codigo para insertar/editar noticias en la BD

Con esto bastaría (en ambos lugares donde hacés la comprobación):
Código PHP:
//...
if (isset($_FILES['archivo']['name']) && !empty($_FILES['archivo']['name'])) 
//... 
  #3 (permalink)  
Antiguo 15/03/2007, 03:56
 
Fecha de Ingreso: marzo-2004
Ubicación: Canarias
Mensajes: 85
Antigüedad: 20 años, 1 mes
Puntos: 1
Sonrisa Re: codigo para insertar/editar noticias en la BD

Lo que puedes hacer para que cuando no quieras actualizar la imagen no tener que volver a ponerla, es en el código que actualiza la Base de Datos poner un IF que determine si has enviado una imagen, en este caso actualizas todos los campos (incluida la imagen) y si no le envías una imagen desde el formulario pues que solo actualice los campos de texto y no la imagen. Con esto cambiará solo los textos y no la imagen si no le envías una nueva.

Disculpa si no me se explicar muy bien, espero lo entiendas.

Hasta otra.
  #4 (permalink)  
Antiguo 15/03/2007, 05:37
 
Fecha de Ingreso: noviembre-2006
Mensajes: 68
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: codigo para insertar/editar noticias en la BD

Ei muchas gracias!!

El && !empty($_FILES['archivo']['name']))

Ha funcionado fantásticamente. Sabía que tenia que andar por ahí, pero mis conocimientos son limitados...

De verdad que gracias
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 06:25.