Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Lecciones de PHP - Lección 3.3 - Trabajo con la base de datos MySQL. Actualización de datos con UPDATE.

10/05/2025, by Ivan

Ya conocemos operadores de MySQL como SELECT e INSERT INTO, ahora es momento de aprender cómo actualizar los datos ya insertados en la base de datos. Para esto usaremos el operador SQL UPDATE. Pero primero, vamos a modificar nuestro archivo index.php para añadir el manejo de una ruta adicional. Encuentra este código:

      if( $_GET['admin'] == 1 ){ // si existe la variable admin en la URL
	    print $obj->display_admin(); // si existe, mostramos el formulario
	  }else{
	    print $obj->display_public(); // si no existe, mostramos los mensajes
	  }

Y reemplázalo con este código:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // si el valor es add, mostramos el formulario para agregar
		break;
		case 'update':
		  print $obj->display_update();  // si el valor es update, mostramos el formulario de edición
		break;
		default:
		  print $obj->display_public(); // si no hay variable, mostramos los mensajes
	  }

Cambié la estructura condicional if por switch, que nos permite usar múltiples opciones para el valor de $_GET['admin'], más adelante añadiremos también delete. Además de cambiar el 1 por add, también agregué una opción para update. Como cambiamos el valor 1 por add, hay que actualizar también los enlaces en el archivo simpleCMS.php:

$content .= '<p><a href="/index.php?admin=1">Agregar mensaje</a></p>';

Cámbialo por:

$content .= '<p><a href="/index.php?admin=add">Agregar mensaje</a></p>';

También necesitamos agregar un nuevo método display_update(), que se invocará cuando admin tenga el valor update en el GET. Agregamos el método display_update():

  public function display_update(){
    
  }

Entonces, ya configuramos la ruta para que llame a nuestro nuevo método display_update(), solo queda agregar enlaces en la página que lleven a ese método y luego implementar display_update().

Primero pensemos cómo implementaremos la actualización. Necesitamos ejecutar una consulta con la cláusula WHERE para identificar exactamente qué fila actualizar. Lo haremos usando el id del registro, es decir, la columna mid. Por lo tanto, necesitamos pasar el valor de mid al llamar display_update(). ¿Cómo hacerlo? Se puede enviar en la URL junto con admin=update, por ejemplo:

http://test/index.php?admin=update&mid=3

También podríamos pasarlo como parámetro del método display_update():

  public function display_update($mid){
    
  }

Y llamarlo así:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); 
		break;
		case 'update':
                  $mid = 1; // o usar $_GET['mid']
		  print $obj->display_update($mid); 
		break;
		default:
		  print $obj->display_public(); 
	  }

De cualquier manera hay que pasar mid, pero usaremos el primer método porque es más sencillo:

  public function display_update(){
    $message_id = $_GET['mid'];
  }

Pero si mid no está definido en el GET, debemos manejar eso también:

  public function display_update(){
    $message_id = $_GET['mid'];
	if(!empty($message_id)){
	
	}else{
	  $content .=   '<p>¡No se ha definido el mid!</p>';
	  $content .=	'<p><a href="/index.php">Volver a la página principal</a></p>';
	}
	return $content;
  }

Así que si vamos a admin=update pero no pasamos mid, veremos una página de error con enlace de regreso:

http://test/index.php?admin=update

Ahora necesitamos enlaces para editar registros. Modificamos el método display_public() para mostrarlos:

  public function display_public() {
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC';
	$result = mysql_query($sql) or die(mysql_error());
	while($row = mysql_fetch_array($result)){
	  $content .= '<div class="post">';
	  $content .= '<span class="time">#' . $row['mid'] . ' de ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>';
	  $content .= '<p>' . $row['bodytext'] . '</p>';
	  $content .= '<p><a href="/index.php?admin=update&mid=' . $row['mid'] . '">Editar mensaje</a>';
	  $content .= '</div>';
	}
	$content .= '<p><a href="/index.php?admin=add">Agregar mensaje</a></p>';
    return $content;
  }

Ahora cada mensaje tendrá un enlace para editarlo. El formulario será mostrado por display_update(). Vamos a escribirlo. Es casi igual al de agregar, pero prellenado y con un campo oculto para mid.

  public function display_update(){
    $message_id = $_GET['mid'];
    if(!empty($message_id)){
      $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id);
      $message = mysql_fetch_object($result);
      $content = '';
      $content .= '<form action="/index.php?admin=update" method="post">';
      $content .= '<label for="title">Nombre:</label><br />';
      $content .= '<input name="title" id="title" type="text" maxlength="150" value="' . $message->title . '" />';
      $content .= '<div class="clear"></div>';
      $content .= '<input name="mid" id="mid" type="hidden" value="' . $message->mid . '" />';
      $content .= '<label for="bodytext">Mensaje:</label><br />';
      $content .= '<textarea name="bodytext" id="bodytext">' . $message->bodytext . '</textarea>';
      $content .= '<div class="clear"></div>';
      $content .= '<input type="submit" value="Guardar" />';
      $content .= '</form>';
      $content .= '<p><a href="/index.php">Volver a la página principal</a></p>';
    }else{
      if (!empty($_POST)) {
        print_r($_POST);
        $content .= '<p><a href="/index.php">Volver a la página principal</a></p>';
      }else{
        $content .= '<p>¡No se ha definido mid!</p>';
        $content .= '<p><a href="/index.php">Volver a la página principal</a></p>';
      }
    }
    return $content;
  }

En los comentarios anteriores ya se explicaron los cambios en el formulario. Ahora veamos cómo procesar el arreglo POST enviado al guardar la edición.

Array(
    [title] => asdf
    [mid] => 1
    [bodytext] => asdfasf
)

Este es el array que se obtiene. Si comparas con el de inserción, solo cambia que incluye mid. Escribamos el código de actualización:

  public function display_update(){
    $message_id = $_GET['mid'];
    if(!empty($message_id)){
      $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id);
      $message = mysql_fetch_object($result);
      $content = '';
      $content .= '<form action="/index.php?admin=update" method="post">';
      $content .= '<label for="title">Nombre:</label><br />';
      $content .= '<input name="title" id="title" type="text" maxlength="150" value="' . $message->title . '" />';
      $content .= '<div class="clear"></div>';
      $content .= '<input name="mid" id="mid" type="hidden" value="' . $message->mid . '" />';
      $content .= '<label for="bodytext">Mensaje:</label><br />';
      $content .= '<textarea name="bodytext" id="bodytext">' . $message->bodytext . '</textarea>';
      $content .= '<div class="clear"></div>';
      $content .= '<input type="submit" value="Guardar" />';
      $content .= '</form>';
      $content .= '<p><a href="/index.php">Volver a la página principal</a></p>';
    }else{
      if (!empty($_POST)) {
        mysql_query('UPDATE Messages SET title="' . $_POST["title"] . '", bodytext="' . $_POST["bodytext"] . '" WHERE mid=' . $_POST["mid"]);
        $content .= '<p>¡Mensaje actualizado!</p>';
        $content .= '<p><a href="/index.php#mid-' . $_POST['mid'] . '">Ir al mensaje</a></p>';
      }else{
        $content .= '<p>¡No se ha definido mid!</p>';
        $content .= '<p><a href="/index.php">Volver a la página principal</a></p>';
      }
    }
    return $content;
  }

Este es el código completo del método display_update(). Ahora analicemos cómo se construye la consulta UPDATE:

Primero se usa el operador UPDATE seguido del nombre de la tabla. Luego se incluye el operador SET para indicar qué campos vamos a modificar. Después se usa WHERE para establecer la condición que nos permita actualizar solo la fila correspondiente al mid deseado. Más adelante prepararé un resumen de los operadores más importantes de MySQL, pero este tutorial está pensado principalmente para quienes están empezando con PHP y MySQL.