Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 53 di 56
  • livello intermedio
Indice lezioni

Moderazione dei commenti

Come approvare o non approvare i commenti generati dagli utenti
Come approvare o non approvare i commenti generati dagli utenti
Link copiato negli appunti

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.

Ti consigliamo anche