Lezioni di PHP - Lezione 3.4 - Lavorare con il database MySQL. Query di eliminazione DELETE.
Nella lezione precedente abbiamo imparato come aggiungere nuovi metodi alla nostra classe di gestione simpleCMS. Ora aggiungiamo un altro metodo per eliminare un record: delete().
Lo aggiungeremo come di consueto:
public function delete($mid){ }
Come puoi vedere, passiamo il parametro $mid, che rappresenta l’ID del nostro record. Se ricordi la lezione precedente, avevamo deciso di utilizzare un altro metodo per passare i parametri — direttamente dalla richiesta GET — ma ora proveremo a farlo in un modo diverso.
Abbiamo definito il metodo, ora scriviamo la gestione del percorso nel file index.php:
switch ($_GET['admin']){ case 'add': print $obj->display_admin(); // se la variabile è uguale a 1, mostra il modulo di aggiunta break; case 'update': print $obj->display_update(); // se la variabile è uguale a update, mostra il modulo di modifica break; case 'delete': if($_GET['mid']){ // se la variabile è delete, controlla la presenza di mid $obj->delete($_GET['mid']); // richiama il metodo di eliminazione del messaggio print $obj->display_public(); // se la variabile non esiste, mostra i messaggi }else{ print '<p>Nessun mid selezionato!</p>'; print $obj->display_public(); // mostra l’elenco dei messaggi } break; default: print $obj->display_public(); // se la variabile non è impostata, mostra i messaggi }
Affinché tutto funzioni correttamente e il messaggio venga eliminato, l’URL deve avere il seguente formato:
http://test/index.php?admin=delete&mid=7
In questo caso verrà eliminato il messaggio con mid=7. Scriviamo quindi l’implementazione del nostro metodo delete():
public function delete($mid){ mysql_query('DELETE FROM Messages WHERE mid='.$mid) or die(mysql_error()); }
Vediamo ora come funziona la query DELETE di MySQL per eliminare un record. Prima viene la parola chiave DELETE, seguita dall’operatore FROM. Dopo FROM specifichiamo la tabella da cui vogliamo eliminare i record (ATTENZIONE! se non si specifica la condizione di eliminazione, verranno eliminati tutti i record della tabella!). Successivamente, indichiamo le condizioni per la rimozione dei record. A noi interessa il record con mid corrispondente al valore passato come parametro del metodo. Alla fine scriviamo un controllo per verificare se la query è stata eseguita correttamente.
Come detto in precedenza, il nostro metodo verrà richiamato quando l’URL contiene due parametri: admin=delete&mid=7. Per questo motivo aggiungeremo dei link sotto ogni messaggio modificando il metodo display_public():
public function display_public() { // metodo per visualizzare 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 nella variabile while($row = mysql_fetch_array($result)){ // il risultato della query deve essere elaborato con mysql_fetch_array() $content .= '<div class="post" id="mid-' . $row['mid'] . '">'; // div contenitore del record $content .= '<span class="time">#' . $row['mid'] . ' del ' . date('d-m-Y', $row['created']) . '</span><h2>' . $row['title'] . '</h2>'; // visualizza data e titolo $content .= '<p>' . $row['bodytext'] . '</p>'; // visualizza il testo del messaggio $content .= '<p>'; $content .= '<a href="/index.php?admin=update&mid=' . $row['mid'] . '">Modifica messaggio</a>'; // link per modificare il messaggio $content .= '<a href="/index.php?admin=delete&mid=' . $row['mid'] . '">Elimina messaggio</a>'; // link per eliminare il messaggio $content .= '</p>'; $content .= '</div>'; // fine del div contenitore } $content .= '<p><a href="/index.php?admin=add">Aggiungi messaggio</a></p>'; return $content; }
Ora, quando clicchiamo sul link “Elimina messaggio”, il messaggio viene eliminato come previsto. Possiamo quindi rimuovere rapidamente i messaggi indesiderati direttamente dal sito, senza passare per PhpMyAdmin.
Rimane solo da aggiungere un piccolo spazio tra i link di modifica ed eliminazione dei messaggi:
.post a{ padding-right: 5px; }
Penso che possiamo considerare questa lezione conclusa. Nella prossima lezione analizzeremo un altro importante operatore per la selezione da più tabelle: JOIN.