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

Conteggio e visualizzazione dei commenti

Come mostrare il numero di commenti accanto al titolo del post e come visualizzarli
Come mostrare il numero di commenti accanto al titolo del post e come visualizzarli
Link copiato negli appunti

Nella homepage del blog, oltre alle anteprime dei post, sarà disponibile anche il risultato del conteggio dei commenti relativi ad ogni articolo; questo sarà possibile grazie ad una piccola funzione basata sull'istruzione Sql SELECT COUNT:

// funzione per il conteggio dei commenti
public function conta_commenti($id_c, $tbl, $campo, $id_post,$enum, $valore_enum)
 {
  if(isset($this->attiva))
  {
  $query_n_com = mysql_query("SELECT COUNT($id_c) AS n_commenti from $tbl WHERE $campo = $id_post AND $enum = '$valore_enum'") or die (mysql_error());
  $obj_n_com = mysql_fetch_object($query_n_com) or die (mysql_error());
  return $obj_n_com->n_commenti;
  }else{
  return false; 
  }
 }

Si analizzi il funzionamento del codice appena proposto: la funzione accetta come parametri 6 argomenti simboleggiati da altrettante variabili:

  1. $id_c: il nome del campo utilizzato per il conteggio dei valori;
  2. $tbl: il nome della tabella coinvolta nell'interrogazione;
  3. $campo: il nome del campo che memorizza il valore che verrà utilizzato come condizione per la clausola WHERE;
  4. $id_post: il valore del campo descritto in precedenza;
  5. $enum: il nome del campo utilizzato l'operatore di confronto AND per specificare ulteriormente le caratteristiche dei record da contare;
  6. $valore_enum: il valore che dovrà essere associato al campo descritto in precedenza.

Sulla base di questi parametri sarà possibile eseguire una chiamata alla funzione conta_commenti() direttamente dalla homepage del sito Web:

// parte relativa al conteggio dei commenti
echo "Commenti: " . $data->conta_commenti("id_commento", "commenti", "id_post", $id_post, "approvato",'1');
echo " :: <a href="commenti.php?id_post=$id_post">Inserisci un commento</a>n";

Sarà quindi eseguita una query che conterà tutti i valori relativi al campo id_commento presenti nella tabella commenti in cui il valore di id_post sia uguale a quello dell'identificativo univoco del post mostrato in anteprima e in cui il campo ENUM approvato sia uguale a "1"; in questo modo saranno conteggiati soltanto i commenti approvati per ogni singolo post, la query che per esempio conterà i commenti approvati per il post che avrà associato l'identificativo univoco "2" sarà la seguente:

SELECT COUNT(id_commento) AS n_commenti from commenti WHERE id_post = 2 AND approvato = '1';

n_commenti è un "alias", cioè un campo in realtà non presente all'interno di una tabella ma che viene creato temporaneamente per la generazione di un risultato desiderato; in questo caso l'alias conterrà il risultato relativo al conteggio dei record coinvolti dall'istruzione.

A questo punto, il discorso relativo alla gestione dei commenti può ritenersi concluso, manca soltanto la parte che concerne la visualizzazione dei commenti per ogni articolo il cui codice dovrà essere inserito nella pagina destinata a mostrare il testo integrale dei singoli post; ciò sarà possibile attraverso una semplice query di selezione:

// estrazione dei commenti
$post_commenti=$data->query("SELECT autore_commento,testo_commento,data_commento FROM commenti WHERE id_post = $id_post AND approvato='1' ORDER BY data_commento DESC");
    if(mysql_num_rows($post_commenti) > 0){
         echo "<ul>n";
     while($commenti_obj = $data->estrai($post_commenti))
         {
         $autore_commento = stripslashes($commenti_obj->autore_commento);
         $testo_commento = stripslashes($commenti_obj->testo_commento);
         $data_commento = stripslashes($commenti_obj->data_commento);
         echo "<li>n ";
         echo "Autore: " . $autore_commento . " Scritto il ". $data->format_data($data_commento) . "n";
     echo  "<br />n";
         echo "Commento: " . $testo_commento;
         echo "</li>n ";
         }
         echo "</ul>n";
        }else{
        echo "Nessun commento per questo post";
        }

Il listato esposto esegue un'interrogazione sulla base dell'identificativo univoco relativo al post visualizzato: (SELECT … FROM commenti WHERE id_post = $id_post), essa prevede che siano mostrati soltanto i commenti approvati (AND approvato = '1') relativi al post corrente e che l'ordine per la loro visualizzazione sia impostato a partire dal commento più recente (ORDER BY data_commento DESC).

Ti consigliamo anche