Per moderare i commenti postati dagli utenti verranno creati due file, uno destinato alla visualizzazione dei commenti non ancora moderati (lista_commenti.php), un altro con il compito di approvare tramite una query di UPDATE sul campo approvato il commento selezionato (moderazione.php). Entrambi i file saranno inseriti all'interno dell'area di amministrazione e il loro accesso sarà riservato soltanto agli utenti autenticati.
Il file che produce la lista dei commenti si basa su una semplice query SELECT
che permetterà di estrarre tutti i record dalla tabella commenti in cui approvato = '0' (SELECT id_commento, testo_commento, autore_commento, data_commento FROM commenti WHERE approvato = '0'
) e ordinandoli in senso cronologico decrescente (ORDER BY data_commento DESC
), cioè a partire dall'ultimo commento postato:
<?php // inizializzazione della sessione session_start(); // controllo sul valore di sessione if (!isset($_SESSION['login'])) { // reindirizzamento alla homepage in caso di login mancato header("Location: index.php"); } // inclusione del file di classe include "funzioni_mysql.php"; // istanza della classe $data = new MysqlClass(); // chiamata alla funzione di connessione $data->connetti(); // query per l'estrazione dei record $commento_sql=$data->query("SELECT id_commento,testo_commento,autore_commento,data_commento FROM commenti WHERE approvato='0' ORDER BY data_commento DESC"); echo "<h1>Elenco dei commenti da approvare</h1>n"; // controllo sul numero di record presenti in tabella if(mysql_num_rows($commento_sql) > 0){ echo "<ul>n"; // estrazione dei record tramite ciclo while($commento_obj = $data->estrai($commento_sql)){ $id_commento = $commento_obj->id_commento; $testo_commento = stripslashes($commento_obj->testo_commento); $autore_commento = stripslashes($commento_obj->autore_commento); $data_commento = $commento_obj->data_commento; // visualizzazione dei dati echo "<li>n"; echo "Autore: " . $autore_commento . " Scritto il ". $data->format_data($data_commento) . "n"; echo "<br />n"; echo "Commento: " . $testo_commento; echo "<br />n"; echo " :: <a href="moderazione.php?id_commento=$id_commento">approva</a>n"; echo "</li>n"; } echo "</ul>n"; }else{ // notifica in assenza di record che soddisfino le caratteristiche richieste echo "Per il momento non sono disponibili commenti da approvare."; } // chiusura della connessione a MySQL $data->disconnetti(); ?>
Ad ogni commento elencato corrisponderà un link chiamato approva e destinato a produrre una querystring che trasmetta alla pagina moderazione.php l'identificativo univoco del commento selezionato:
<?php // inizializzazione della sessione session_start(); // controllo sul valore di sessione if (!isset($_SESSION['login'])) { // reindirizzamento alla homepage in caso di login mancato header("Location: index.php"); } // controllo sull'id del commento inviato per querystring if (isset($_GET['id_commento']) && is_numeric($_GET['id_commento'])) { $id_commento = $_GET['id_commento']; ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <h1>Attenzione!</h1> Si sta per approvare il commento selezionato.<br /> Premere il pulsante per eseguire l'operazione richiesta.<br /> <br> <input name="commento_id" type="hidden" value="<?php echo $id_commento; ?>"> <input name="submit" type="submit" value="Modera"> </form> <?php } // controllo sull'id del commento inviato per form elseif(isset($_POST['commento_id']) && is_numeric($_POST['commento_id'])) { $commento_id = $_POST['commento_id']; // inclusione del file di classe include "funzioni_mysql.php"; // istanza della classe $data = new MysqlClass(); // chiamata alla funzione di connessione $data->connetti(); $data->query("UPDATE commenti SET approvato='1' WHERE id_commento = $commento_id"); // reindirizzamento alla pagina di gestione dei commenti header("Location: lista_commenti.php"); // chiusura della connessione a MySQL $data->disconnetti(); } ?>
L'identificativo univoco inviato alla pagina per la moderazione è indispensabile per identificare il record da aggiornare all'interno della query per la modifica; come anticipato, questa si basa sul comando SQL UPDATE
a cui deve seguire il nome della tabella che contiene il record e il nome del campo da aggiornare con il nuovo valore introdotti dalla chiave SET
(UPDATE commenti SET approvato = '1'
); per sapere a carico di quale record dovrà essere effettuato l'update, l'istruzione dovrà prevedere anche la clausola WHERE che specificherà il valore dell'identificativo univoco corrispondente al record da modificare (WHERE id_commento = $commento_id
).
Il codice presente nel file per la moderazione potrà essere modificato facilmente anche per effettuare l'eliminazione di un commento, infatti l'unica operazione da fare sarà quella di sostituire la query basata sul comando UPDATE con un'altra basata sul comando DELETE
; in questo caso infatti si dovrà utilizzare l'istruzione:
$data->query("DELETE FROM commenti WHERE id_commento = $commento_id");
In una query per la cancellazione di un record è sufficiente passare in istruzione l'identificativo di una riga introdotto dalla clausola WHERE, in questo modo il DBMS potrà identificare con precisione il record da cancellare senza coinvolgere altri dati in questo processo potenzialmente pericoloso.