logo

Extra Block Types (EBT) - Nuova esperienza con Layout Builder❗

Extra Block Types (EBT) - tipi di blocchi stilizzati e personalizzabili: Slideshows, Tabs, Cards, Accordion e molti altri. Impostazioni integrate per sfondo, DOM Box, plugin javascript. Vivi oggi il futuro della costruzione dei layout.

Demo moduli EBT Scarica moduli EBT

❗Extra Paragraph Types (EPT) - Nuova esperienza con Paragraphs

Extra Paragraph Types (EPT) - insieme di moduli basati su paragrafi in modo analogo.

Demo moduli EPT Scarica moduli EPT

Scorri

Lezioni di PHP - Lezione 3.3 - Lavorare con il database MySQL. Aggiornamento dei dati con UPDATE.

09/10/2025, by Ivan

Abbiamo già conosciuto operatori MySQL come SELECT e INSERT INTO, ora è il momento di imparare come aggiornare i dati già inseriti nel database. Per questo utilizzeremo l’operatore SQL UPDATE. Ma prima, modifichiamo il nostro file index.php aggiungendo la gestione di un nuovo percorso. Trova questo codice:

      if( $_GET['admin'] == 1 ){ // se esiste nel URL la variabile admin
	    print $obj->display_admin(); // se esiste la variabile, mostra il modulo
	  }else{
	    print $obj->display_public(); // se la variabile non esiste, mostra i messaggi
	  }

E sostituiscilo con il seguente codice:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // se la variabile è add, mostra il modulo di aggiunta
		break;
		case 'update':
		  print $obj->display_update();  // se la variabile è update, mostra il modulo di modifica
		break;
		default:
		  print $obj->display_public(); // se la variabile non esiste, mostra i messaggi
	  }

Ho sostituito l’istruzione if con switch, che consente di gestire più valori della variabile $_GET['admin']. In futuro ne aggiungeremo altri, come delete. Per ora, ho cambiato il valore 1 in add e aggiunto un nuovo caso update. Poiché ho cambiato 1 in add, dobbiamo anche modificare i link nel file simpleCMS.php:

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

Sostituiscilo con:

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

Dobbiamo anche aggiungere un nuovo metodo display_update(), che verrà richiamato quando nella richiesta GET la variabile admin avrà valore update. Aggiungiamo questo nuovo metodo:

  public function display_update(){
    
  }  

Abbiamo creato la gestione del percorso che richiama il nostro nuovo metodo display_update(). Ora restano da aggiungere i link che lo attivano e da implementarne il codice.

Pensiamo prima a come realizzeremo l’aggiornamento dei record. Sarà necessario eseguire una query nel database con una condizione WHERE, per specificare con precisione quale record aggiornare. Possiamo farlo indicando l’id del record — nel nostro caso, la colonna mid. Quindi dobbiamo passare il valore mid al metodo display_update(). Possiamo farlo passando il parametro nella richiesta GET insieme a admin=update, ad esempio:

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

Oppure possiamo passarlo come parametro del metodo display_update():

  public function display_update($mid){
    
  } 

In tal caso, il metodo verrà richiamato così:

	  switch ($_GET['admin']){
	    case 'add':
		  print $obj->display_admin(); // se la variabile è add, mostra il modulo di aggiunta
		break;
		case 'update':
                  $mid = 1; // oppure qui possiamo inserire $_GET['mid']
		  print $obj->display_update($mid);  // se la variabile è update, mostra il modulo di modifica
		break;
		default:
		  print $obj->display_public(); // se la variabile non esiste, mostra i messaggi
	  }

In ogni caso, dobbiamo passare il valore di mid, e la soluzione più semplice è farlo tramite la richiesta GET.

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

In questo modo passiamo il valore di mid. Ma cosa succede se questo valore non è presente nella richiesta GET? Dobbiamo verificarlo.

  public function display_update(){
    $message_id = $_GET['mid']; // salviamo mid nella variabile
	if(!empty($message_id)){
	
	}else{
	  $content .=   '<p>Nessun valore mid!</p>';
	  $content .=	'<p><a href="/index.php">Torna alla home</a></p>';
	}
	return $content;
  }  

Ora, se nella richiesta GET c’è admin=update ma non mid, apparirà una pagina con un link per tornare alla home.

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

A questo punto dobbiamo aggiungere i link di modifica ai messaggi. Modifichiamo quindi il metodo display_public() per includerli:

  public function display_public() { // metodo per mostrare i messaggi
    $content = '';
	$sql = 'SELECT * FROM Messages ORDER BY mid DESC'; // query di selezione
	$result = mysql_query($sql) or die(mysql_error());  // salviamo il risultato della query
	while($row = mysql_fetch_array($result)){ // il risultato deve essere elaborato con mysql_fetch_array()
	  $content .= '<div class="post">'; // div che avvolge il record
	  $content .= '<span class="time">#' . $row['mid'] . ' del ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; 	// mostra data e titolo
	  $content .= '<p>' . $row['bodytext'] . '</p>'; // mostra il testo del messaggio
	  $content .= '<p><a href="/index.php?admin=update&mid=' . $row['mid'] . '">Modifica messaggio</a>'; // aggiunge il link per modificare il messaggio
	  $content .= '</div>'; // fine del div
	}
	$content .= '<p><a href="/index.php?admin=add">Aggiungi messaggio</a></p>';
    return $content;
  }

Ora sotto ogni messaggio ci sarà un link per modificarlo. Il modulo di modifica sarà visualizzato tramite il metodo display_update(). Scriviamo ora il codice per questo metodo. Il modulo sarà simile a quello per l’aggiunta, ma includerà i valori esistenti del messaggio dal database e un campo nascosto con il valore mid.

  public function display_update(){
    $message_id = $_GET['mid']; // salviamo mid nella variabile
	if(!empty($message_id)){
	  $result = mysql_query('SELECT * FROM Messages WHERE mid='.$message_id); // recuperiamo il record con mid corrispondente
	  $message = mysql_fetch_object($result); // elaboriamo il risultato
	  $content = '';
	  $content .=	'<form action="/index.php?admin=update" method="post">'; // inviamo i dati al medesimo script
	  $content .=	  '<label for="title">Nome:</label><br />';
	  $content .=	  '<input name="title" id="title" type="text" maxlength="150" value=' . $message->title .' />'; // valore del titolo
	  $content .=	  '<div class="clear"></div>';
	  $content .=     '<input name="mid" id="mid" type="hidden" value="'.$message->mid.'" />'; // campo nascosto con mid
	  $content .=	  '<label for="bodytext">Messaggio:</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>'; // testo del messaggio
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Salva" />';
	  $content .=	'</form>';	
	  $content .=	'<p><a href="/index.php">Torna alla home</a></p>';
	}else{
	  if (!empty($_POST)) { // controlliamo i dati inviati
	    print_r($_POST); // stampiamo l’array post
		$content .=	'<p><a href="/index.php">Torna alla home</a></p>';
	  }else{
	    $content .=   '<p>Nessun valore mid!</p>';
	    $content .=	'<p><a href="/index.php">Torna alla home</a></p>';
	  }
	}
	return $content;
  } 

Come indicato nei commenti, la forma è quasi identica a quella per l’inserimento. Ora gestiamo i dati inviati tramite POST.

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

Ecco l’array che riceviamo. È simile a quello per l’inserimento, con l’aggiunta di mid. Scriviamo la logica per aggiornare i dati con la query UPDATE:

  public function display_update(){
    $message_id = $_GET['mid']; // salviamo mid nella variabile
	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">Nome:</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">Messaggio:</label><br />';
	  $content .=	  '<textarea name="bodytext" id="bodytext">'. $message->bodytext .'</textarea>';
	  $content .=	  '<div class="clear"></div>';
	  $content .=	  '<input type="submit" value="Salva" />';
	  $content .=	'</form>';
	  $content .=	'<p><a href="/index.php">Torna alla home</a></p>';
	}else{
	  if (!empty($_POST)) { // gestiamo i dati inviati
		mysql_query('UPDATE Messages SET title="'.$_POST["title"].'", bodytext="'.$_POST["bodytext"].'" WHERE mid='.$_POST["mid"]);
		$content .= '<p>Messaggio aggiornato!</p>';
		$content .=	'<p><a href="/index.php#mid-'.$_POST['mid'].'">Vai al messaggio</a></p>';
	  }else{
	    $content .=   '<p>Nessun valore mid!</p>';
	    $content .=	'<p><a href="/index.php">Torna alla home</a></p>';
	  }
	}
	return $content;
  }  

Ecco tutto il codice del nostro metodo display_update(). Vediamo ora com’è strutturata una query UPDATE:

Per prima cosa c’è l’operatore UPDATE, seguito dal nome della tabella. Dopo il nome della tabella scriviamo l’operatore SET, e dopo di esso indichiamo a quali valori devono essere aggiornati i campi. Poi aggiungiamo la condizione con WHERE, che specifica quale record aggiornare (in questo caso, dove mid è uguale al valore desiderato). Più avanti preparerò una panoramica di tutti gli operatori MySQL, ma questa lezione è pensata soprattutto per chi ha appena iniziato a studiare PHP e MySQL.