Justi 9 de junio de 2008 a las 13.00
   Imprimir artículo
elWebmaster.com

Taller de PHP: Actualizar y borrar registros (2)


Logo del taller PHP¡Hola de nuevo! Me imagino que habrán estado estudiando casi todo lo que estuvimos viendo hasta aquí, ya que en la clase de hoy vamos a dar una vueltita por casi todos los temas.

Lo que vamos a hacer es continuar con nuestro ejemplo de la tabla de noticias, vamos a traer la noticia que queremos editar y para ello usaremos una variable “get” con la ID de la noticia. Luego con esa ID, haremos una consulta para traer todos los datos que incluiremos en un formulario y a su vez enviaremos las variables “post” con los nuevos datos para editarla. ¿Sencillo, no?

Editando una noticia

Supongamos que el archivo nuestro es editar-noticias.php, lo que vamos a hacer es llamarlo de la siguiente manera:

http://direccion.com/editar.php?idNoticia=23

Entonces en nuestro archivo (previo nos conectamos con la base de datos como siempre) vamos a tener un if para ver si existe una variable get idNoticia, en caso de que exista hacemos la consulta para traer los datos completos

if ( !empty($_GET['idNoticia']) ) {

// traemos la noticia
$query = "SELECT idNoticia,titulo,cuerpo,estado FROM `noticias` WHERE idNoticia = {$_GET['idNoticia']} limit 1";
$response = mysql_query($query, $conn);
$noticia = mysql_fetch_assoc($response);

}

Y luego, una vez que tenemos nuestra variable noticia con todos los datos de la base de datos, vamos a completar el formulario con los datos originales de la siguiente manera:

<h1>Agregar Nueva Noticia</h1>
<form action="editar-noticias.php" method="post">
<label for="titulo">Título</label><br />
<input id="titulo" name="titulo" value="<? echo $noticia['titulo']; ?> " type="text" /><br /><br />
<label for="cuerpo">Cuerpo</label><br />
<textarea id="cuerpo" name="cuerpo" rows="5" cols="50"><? echo $noticia['cuerpo']; ?></textarea><br /><br />
<label for="estado">Estado</label>
<select id="estado" name="estado">
<option value="publicado" <? if ( $noticia['estado'] == 'publicado' ) echo 'selected="selected"'; ?>>Publicado</option>
<option value="borrado" <? if ( $noticia['estado'] == 'borrado' ) echo 'selected="selected"'; ?>>Borrado</option>
</select><br /><br />
<button type="submit" name="submit" value="1">Editar Noticia</button>
<input name="idNoticia" value="<? echo $noticia['idNoticia']; ?>" type="hidden" />
</form>

Como verán hay dos cambios importantes con respecto al formulario de ingreso de noticias, en este completamos el atributo value con los datos originales. Y el otro cambio es que agregamos un nuevo campo al formulario de tipo hidden, o sea, oculto con el valor de la ID de la noticia que estamos editando.

Este formulario lo enviaremos a un archivo que contendrá el script, puede ser este mismo archivo, de la misma forma que lo hicismos al ingresar una noticia.
Si hiciéramos eso, tendríamos que tener entonces (antes de hacer nuestra consulta para traer la noticia) otro if para saber si recibimos las variables post para editarla.

if ( !empty($_POST['submit']) ) {
$query = "UPDATE `noticias` set titulo = '{$_POST['titulo']}', set cuerpo = '{$_POST['cuerpo']}', estado = '{$_POST['estado']}' WHERE idNoticia = {$_POST['idNoticia']} LIMIT 1";
$response = mysql_query($query, $conn);
}

Nuestro archivo terminado queda de la siguiente manera:

<?
// datos de configuracion
$ip = 'localhost';
$usuario = 'usuario';
$password = 'password';
$db_name = 'baseDeDatos';
// conectamos con la db
$conn = mysql_pconnect($ip,$usuario,$password) or die();
// seleccionamos la base de datos
$huboerror = mysql_select_db($db_name,$conn) or die();

// si se envia el formulario de edicion
if ( !empty($_POST['submit']) ) {
$query = "UPDATE `noticias` set titulo = '{$_POST['titulo']}', set cuerpo = '{$_POST['cuerpo']}', estado = '{$_POST['estado']}' WHERE idNoticia = {$_POST['idNoticia']} LIMIT 1";
$response = mysql_query($query, $conn);
}

// si tenemos id de noticia
if ( !empty($_GET['idNoticia']) ) {

// traemos la noticia
$query = "SELECT idNoticia,titulo,cuerpo,estado FROM `noticias` WHERE idNoticia = {$_GET['idNoticia']} limit 1";
$response = mysql_query($query, $conn);
$noticia = mysql_fetch_assoc($response);

}

?>
<html>
<head>
<title>Formulario de Edición de Noticias</title>
</head>
<body>
<h1>Agregar Nueva Noticia</h1>
<form action="editar-noticias.php" method="post">
<label for="titulo">Titulo</label><br />
<input id="titulo" name="titulo" value="<? echo $noticia['titulo']; ?> " type="text" /><br /><br />
<label for="cuerpo">Cuerpo</label><br />
<textarea id="cuerpo" name="cuerpo" rows="5" cols="50"><? echo $noticia['cuerpo']; ?></textarea><br /><br />
<label for="estado">Estado</label>
<select id="estado" name="estado">
<option value="publicado" <? if ( $noticia['estado'] == 'publicado' ) echo 'selected="selected"'; ?>>Publicado</option>
<option value="borrado" <? if ( $noticia['estado'] == 'borrado' ) echo 'selected="selected"'; ?>>Borrado</option>
</select><br /><br />
<button type="submit" name="submit" value="1">Editar Noticia</button>
<input name="idNoticia" value="<? echo $noticia['idNoticia']; ?>" type="hidden" />
</form>
</body>

Borrando una noticia

Para borrar una noticia lo vamos a hacer de la misma manera, utilizando una variable get que contenga la ID de la noticia que estamos borrando.

if ( !empty($_GET['idNoticia') ) {
$query = DELETE FROM `noticias` WHERE idNoticia = {$_GET['idNoticia']} LIMIT 1";
$response = mysql_query($query, $conn);
}

Bueno, espero que les haya gustado la clase de hoy, hasta la semana que viene.

<< CLASE ANTERIOR  

CLASE SIGUIENTE >>


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (28)

  1. RUBEN DARIO DURANGO YANES dice:

    Deseo un software para programar en php. como lo consigo; ya que estoy recibiendo los talleres de php y no se en que editor programar aquí. Ahora. Adobe Dreamwaver sirve?
    Gracias.
    Ah, es muy interesante los talleres. Les agradezco todo.

  2. pablox dice:

    solo se puede actualisar con link , es decir con GET ? , con POST no se puede? como seria con POST?

  3. Luis G Padilla dice:

    Hola!!!

    he seguido este blog (desde el taller de flash y ahora en php) y está super, gracias por la aportación… estás ayudando a que me entusiasme a programar en php… actualmente juego muy poco con cold fusion

    Saludos y felicidades por los talleres

  4. Luis G Padilla dice:

    Hola de nuevo, ya quedó lo del post pasado….

    saludos!

  5. power dice:

    Hola como se puede eliminar de un noticias todos los comentarios de dicha noticia mas claro cuando elimino una noticia me gustaría poder eliminar todo sus comentarios de dicha noticias al mismo tienpo que elimino la noticia lo cual tendría que eliminar dos registros de tablas diferentes noticias y comentarios, se puede hacer con dos reconset de cada tabla por el metodo GET pasar variable de url de cada una de tablas
    ejemplo eliminar.php?id_noticias=id&id_comentarios=id_delete.

    Esto seria correcto para poder eliminar el registro de noticia mas todos los comentarios de dicha noticia o no.

  6. Luis Gutierrez dice:

    Saludos.
    Arriba se menciona que editar-noticia.php va a ser llamado con:
    http://direccion.com/editar.php?idNoticia=23
    Pregunta? desde donde
    Pregunta? por qué el agregado …_idNoticia=23
    Gracias

  7. power dice:

    hola buenas me gustaria saber si se puede hacer en 3 tablas diferentes ejemplo
    1-categoria
    2-noticias
    3-comentarios
    en realidad lo que yo busco es poder eliminar ejemplo una categoria con sus correspondiente noticias y comentarios y si esto se puede hacer en tablas MyISAM

  8. Justi dice:

    sip, se puede power

  9. Juanu dice:

    RUBEN te recomiendo Notepad++

  10. Carlos dice:

    Hola que tal!

    Se me presentó un problema :s

    Al escribir http://… editar-noticias.php?idNoticia=2

    me tira el siguiente error:
    “Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource…”

    Que sucedió!? :s

  11. Edison dice:

    Hola Justi estoy en esta parte y puse todo el codigo como se menciona aqui en editar_noticias.php el cual lo llamo asi… http://…/editar-noticias.php?idNoticias=3 y no me sale nada. ni siquiera me sale ese error que menciona Carlos… solo aparece la pagina web en blanco y tengo en la base de datos 5 registros… no se si sera el problema porque el formulario esta en modo POST y se envia un Get… podrias revisar el código .. o en otro caso subirlo para ver que esta mal?
    Ah carlos creo que el error a de ser porque en las sentencias de SQL al llamar a la tabla debe ir asi `nombre_tabla` y no asi ‘nombre_tabla’, yo pensaba que era comilla simple pero era la tilde inversa, has y veras que ya no te sale ningun error, lo mas probable es que no te salga nada como a mi :) jeje

  12. Edison dice:

    Hola ya solucione mi error era solo que en vez de poner el nombre de la base de datos ponia la de la tabla, tremendo lio por solo copiar y pegar jeje al final m di cuenta del error y lo solucione, y como despedida dejo el consejo de revisar los campos ya que esos errores de conexion son por eso uno se olvid siempre algo una comilla, o una letra menos o que esta demas… Revisen con calma… ok hasta pronto

  13. Nico dice:

    No me anduvo :S
    Cuando apreto editar noticia me dice que no se encuentra la web :S….

  14. Antonio dice:

    Hola que tal?
    Muy bueno el taller.. acabo de encontrarlo en mi búsqueda para armar una pequeña aplicación para el registro de personas en un evento.
    Tengo una pregunta con respecto de esta parte de la actualización de registros… por ejemplo, de acuerdo al procedimiento primero mandamos llamar el registro original y pasamos los datos que ya están en la tabla como los valores de los campos en el formulario. Pero por ejemplo, si tengo un campo desplegable que toma su valor de los datos de otra tabla… ¿cómo despliego su valor actual?

  15. Justi dice:

    @antonio disculpame pero realmente no entendi cual es tu pregunta, explicame por favor que es lo que necesitas hacer y yo te digo bien si puedo cual es una buena solucion para eso.

  16. Marita dice:

    Hola Justi

    Con este taller he avanzado bastantito en php (o yo creo 😛 ). Bueno aquí mi consulta: en una primera página hago INSERT perfectamente en cuatro campos de mi tabla, y en la página siguiente necesito insertar otros 5 campos del mismo registro, entonces puse UPDATE pero no logro que se carguen los datos. He probado utilizando una variable de sesión, pero no logro mi cometido. Lo que hago es cargar esa variable con la clave (id_encuesta) que es autoincremental, pero no sé donde se pierde porque no llega a la segunda página.
    Te agradecería si me puedes aclarar como usar “correctamente” la variable de sesión o si puede haber una mejor solución.
    Muy agradecida como siempre
    Marita

  17. Justi dice:

    @marita hola, siempre que uses sessiones te tenes que asegurar que lo primero que tengas en el script de php luego del < ? sea session_start(), ya que hay que avisarle que se va a usar sesiones. Quedaría algo así:

    < ?
    // inicio uso de sesiones
    session_start();
    
    // traigo archivo de configuracion ...
    
  18. Tcaos dice:

    Hola, he encontrado dos fallos en el codigo del editado de noticias.
    Lo más probable es que estoy haciendo algo mal puesto que nadie lo comenta. Solo enviamos información al fichero editar-noticias.php de dos modos: por ‘GET’ o por ‘POST’, pero nunca con los dos a la vez (siguiendo el script). Ahora en el formulario utilizamos la variable “$noticia” solo definida en el apartado de recepción de información por medio del GET. Cuando enviamos la información por POST, al no entrar en el if de GET al cargar el formulario muestra error de variable no definida “$noticia”. Para solucionarlo hay dos modos: o definimos ( y cargamos) la variable “$noticia” tal y como esta definida (y cargada) en el “if” de GET, o la cargamos por fuera de ambos, aunque la primera me parece la mas correcta, puesto que ya se cargaria con la edicion ejecutada.
    El segundo fallo esta en al sentencia “UPDATE”: la instruccion “SET” se coloca una sola vez al principio y luego las columnas a modificar van separadas por comas.
    Espero que esto les sea de utilidad a alguien.

    Muchas gracias por estos talleres.

  19. Justi dice:

    @Tcaos gracias por marcar esos errores, estas en lo correcto, ahora corrijo esta clase.

  20. Gonzalez dice:

    Buena tarde Justi, te felicito por el curso esta muy bueno, estoy inicando en esto de la programación web y gracias a tu taller estoy avanzando un poco.

    en los ejemplos que tienes con que extencion guardas las páginas, porque las guarde como .phtml pero no me la muestra correctamente tuve que crear una con el scrip en php y otra en html ejem(enviar_noticia.html que enlaza a subir.noticias.php) y asi si me funciono, pero este codigo no me corre, podrian colocar un ejemplo de como queda la pag. en modo diseño?, asi me queda el pág.
    [url=http://www.subirimagenes.com/imagen-noticia-3453592.html]Ver Imagen

  21. Consuelo dice:

    Hola Justin, por favor ayudame con el formato del botón estoy trabajando con dreamweaver, pero el valor 1 del botón en la variable submit no se envía, espero tu prnto ayuda, gracias

  22. Jhonattan dice:

    hola, por qué hay que poner http://direccion.com/editar.php?idNoticia=23 el número 23 a qué se refiere, perdonen la ignorancia.

  23. Angel dice:

    Hola justi por mas que intento actualizar la información por medio de Post no puedo hacerlo, lo único posible estar traer la información de la BD, mas no puedo actualizarla después enviar la nueva info.

    Podrías ayudarme por favor.

    Saludos!

  24. Guada dice:

    Cuidado!. La refdacción del

    http://direccion.com/editar.php?idNoticia=23 /editar.php?idNoticia=23

    así, sin más, sólo puede conducir a errores.

  25. marisol dice:

    me hubiera gustado que siguieran con el ejemplo que empezaron de la agenda.debo empezar otra vez todo.

  26. Josue dice:

    Hola Gracias por el taller de php. esta muy bueno y eh aprendido demasiado con estas clases tan buenas

    fijense q tengo un problema con la variable $noticia. no se en donde deberia de ir porq me tira el erro asi

    Undefined variable: noticia

    gracias ojala alguien me ayude

  27. Eduardo dice:

    Hola justin primero que nada muchas gracias x tu taller es genial n_n, tengo un problema al momento de la ejecucion del programa me da este error en los campos: Notice: Undefined variable: noticia
    podrias ayudarme a sabercual fue mi error
    muchas gracias x todo

  28. ignacio dice:

    Hola que tal, felicitaciones por tus lecciones, pero tengo un error y no puedo entender que pasa con la variable noticia que me dice que no esta definida; por favor una ayuda

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder