Pagina 1 di 2

Form per commentare

MessaggioInviato: gio lug 20, 2006 5:49 pm
da domenico127
Salve. Ho una richiesta, forse, piuttosto insolita. Intanto premetto che io di php non ne capisco molto!

All'interno del mio sito vorrei scrivere degli articoli tali che possano essere commentati dagli utenti. Dovrei quindi creare un form comprendente di campo nick (non registrato, ma uno a caso), e-mail, testo e tasto "invia". Una volta cliccato su questo tasto il testo scritto dovrebbe andare a posizionarsi, come commento, sotto l'articolo.

Tutto ciò, come si potrebbe fare?
Grazie

MessaggioInviato: gio lug 20, 2006 8:50 pm
da dark lord
ho dato un occhiata in giro ma non ho trovato niente di "pronto"...bisogna che ti scrivi lo script...pero in questo penso che al massimo ti potrò dare solo qualche consiglio!

MessaggioInviato: gio lug 20, 2006 11:28 pm
da Rumez
[nota] devi farti lo script a mano anche perché non è molto difficile
[nota] ti serve un database in cui salvare i commenti

Di fatto funziona così:
[nota] i dati del form vengono salvati nel database tramite un INSERT
[nota] i dati vengono presi dal database tramite una SELECT e presentati nella pagina

vuoi un esempio fittizio semplice?

MessaggioInviato: gio lug 20, 2006 11:37 pm
da domenico127
Si grazie Rumez! Anche perché non credo di essere in grado a scrivermi il codice...

MessaggioInviato: ven lug 21, 2006 7:53 am
da Rumez
un'altra domandina...gli articoli sono in un database?
perché in questo caso avranno un id tramite il quale si più associarci un commento...altrimenti se non hai un database sotto non puoi fare una cosa molto seria..

MessaggioInviato: ven lug 21, 2006 12:07 pm
da domenico127
Ho un database. E gli articoli sono scritti i normali pagine xHTML

MessaggioInviato: ven lug 21, 2006 2:02 pm
da Rumez
beh se gli articoli non stanno in un db allora non siamo molto avvantaggiati...comunque ecco qui qualche dritta..
Allora..tralascio la parte di inserimento articoli nel database e quella per mostrare a video la lista degli articoli.
Mi limito solo a mostrare a video l'articolo e i suoi commenti:

[nota] Premetto che mi collegherò al database tramite DSN

Crea un file config.inc.php dove ci saranno i parametri di connessione al db
Codice: Seleziona tutto
<?php
   // parametri di connessione ad database   
   $db_user = "root";   // databse username
   $db_pass = "password";   // database password
   $dsn = "nomeDSN";   // nome DSN
?>


Crei un file connessione.php che contiene le funzioni per connettersi al db e per eseguire le query
Codice: Seleziona tutto
<?php

   /* ----------------------------------------------------------- */
   /*            Funzione di connessione al database            */
   /* ----------------------------------------------------------- */
   function connettiDB()
   {
      include("config.inc.php");         // includo il file di configurazione
      error_reporting(0);               // abilito la gestione errori personalizzata
   
      $id_conn = odbc_connect($dsn, $db_user, $db_pass);   // effettuo la connessione al database
      
      if ( $id_conn == FALSE )   // gestione personalizzata dell'errore
      {
         $msg = "      <table border='0' cellpadding='2' cellspacing='0' >";
         $msg = $msg . "   <tr>";
         $msg = $msg . "      <td align='center'><strong>Connessione Fallita!</strong></td>";
         $msg = $msg . "   </tr>";
         $msg = $msg . "   <tr>";
         $msg = $msg . "      <td align='left'>Codice Errore: " . odbc_error() . "</td>";
         $msg = $msg . "   </tr>";
         $msg = $msg . "   <tr>";
         $msg = $msg . "      <td align='left'>Messaggio di Errore: " . odbc_errormsg() . "</td>";
         $msg = $msg . "   </tr>";
         $msg = $msg . "</table>";   
         
         die ($msg);      
      }
      
      return $id_conn;
   }
   
   /* ----------------------------------------------------------- */
   /*            Funzione che esegue una query               */
   /* ----------------------------------------------------------- */
   function creaRecordset( $id_conn, $query )
   {
      $result = odbc_exec( $id_conn, $query );
      
      if ( odbc_error() )      // gestione personalizzata dell'errore
      {
         $msg = "      <table border='0' cellpadding='2' cellspacing='0' >";
         $msg = $msg . "   <tr>";
         $msg = $msg . "      <td align='center'><strong>Errore!</strong></td>";
         $msg = $msg . "   </tr>";
         $msg = $msg . "   <tr>";
         $msg = $msg . "      <td align='left'>Codice Errore: " . odbc_error() . "</td>";
         $msg = $msg . "   </tr>";
         $msg = $msg . "   <tr>";
         $msg = $msg . "      <td align='left'>Messaggio di Errore: " . odbc_errormsg() . "</td>";
         $msg = $msg . "   </tr>";
         $msg = $msg . "</table>";   
         
         die ($msg);      
      }
      
      return $result;
   }
   
?>


Crei una pagina articoli.php che conterrà l'articolo, i comemnti e il form per inserire i commenti
Codice: Seleziona tutto
<?php
   // ========================================================================
   // Inclusione dei parametri di connessione
   // ========================================================================
   include("connessione.php");
   
   // ========================================================================
   // Connessione al database
   // ========================================================================   
   $conn_id = connettiDB();   
   
   // ========================================================================
   // Eseguo la query che mi mostra a video l'articolo
   // ========================================================================
   $SQL = "SELECT * FROM articoli WHERE id_articolo = 1";
   $resultSet = creaRecordset( $conn_id, $SQL );
   
   // ========================================================================
   // Creo l'HTML per l'output
   // ========================================================================
   $table = "<table cellpadding='0' cellspacing='0'>";
         
   // ========================================================================
   // Risultati della select effettuata
   // ========================================================================
   while( $row = odbc_fetch_array($resultSet) )
   {
      $table = $table . "<tr>"
                  . "<td>". $row[titolo] . "</td>"
                  . "</tr>"
                  . "<tr>"
                  . "<td>". $row[testo] . "</td>"
                  . "</tr>";
      $id_articolo = $row[id_articolo];
   }
   $table = $table . "</table>";
   
   // ========================================================================
   // Stampo il risultato
   // ========================================================================
   echo $table;
   
   // ========================================================================
   // Eseguo la query che mi mostra a video i commenti per questo articolo
   // ========================================================================
   $SQL_COMMENTI = "SELECT * FROM commenti WHERE id_articolo=" . $id_articolo;
   $resultSetCommenti = creaRecordset( $conn_id, $SQL_COMMENTI );
   
   // ========================================================================
   // Creo l'HTML per l'output
   // ========================================================================
   $table2 = "<hr /><table cellpadding='0' cellspacing='0'>";
      // ========================================================================
   // Risultati della select effettuata
   // ========================================================================
   while( $row2 = odbc_fetch_array($resultSetCommenti) )
   {
      $table2 = $table2 . "<tr>"
                    . "<td>". $row2[autore] . "</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td>". $row2[mail] . "</td>"
                    . "</tr>"
                    . "<tr>"
                    . "<td>". $row2[testo_commento] . "<hr /></td>"
                    . "</tr>";
   }
   $table2 = $table2 . "</table>";
   
   echo $table2;
?>
<form action="inserisci_commento.php" method="post" name="commenti">
   <hr />
   <strong>Inserisic un Commento:&nbsp;</strong>
   <br />
   Autore:&nbsp;<input type="text" name="autore" />
   <br />
   E-Mail:&nbsp;<input type="text" name="mail" />
   <br />
   Commento:&nbsp;<textarea name="commento"></textarea>
   <br />
   <input type="hidden" name="id_articolo" value="<? echo $id_articolo; ?>" />
   <input type="submit" value="Invia Commento" />
</form>

<?
   // chiudo la connessione al dbs
   odbc_close ( $conn_id );
?>


Crei una pagina inserisci_commento.php utilizzata per inserire i commenti
Codice: Seleziona tutto
<?php
   // ========================================================================
   // Inclusione dei parametri di connessione
   // ========================================================================
   include("connessione.php");
   
   // ========================================================================
   // Ottngo i Valori inseriti nel form dei commenti
   // ========================================================================
   $autore         = $_POST["autore"];
   $mail         = $_POST["mail"];
   $commento       = $_POST["commento"];
   $id_articolo    = $_POST["id_articolo"];
   
   // ========================================================================
   
   // Connessione al database
   // ========================================================================   
   $conn_id = connettiDB();   
   
   // ========================================================================
   // SQL per l'inserimento del commento
   // ========================================================================
   // inserisco nella tabella commenti anche l'id_articolo dell'articolo
   // che voglio commentare in modo da associare il commento all'articolo
   // in questione
   // ========================================================================
   $SQL = "INSERT INTO "
       . "commenti (autore, mail, testo_commento, id_articolo) "
       . "VALUES ( "
       . "'" . $autore . "', "
       . "'" . $mail . "', "
       . "'" . $commento . "', "
       . "" . $id_articolo . " )";
      
   // ========================================================================
   // Eseguo la query
   // ========================================================================
   $resultSet = creaRecordset( $conn_id, $SQL );
   
   echo "Commento Inserito con Successo!";
   // chiudo la connessione al dbs
   odbc_close ( $conn_id );   
?>


L'ho scritto in velocità per cui potrebbe manacare qualcosa o non essere ottimizzato..comunque funziona.E' un esempio
molto semplice ma comunque può darti qualche spunto.
Il problema più grande sarà sicuramente nella connessione al database perché non so come l'hai gestita
(a dire la verità non so nemmeno se nel tuo sito hai usato un database).

MessaggioInviato: lun lug 24, 2006 11:28 pm
da domenico127
Ciao Rumez! Grazie mille per la pazienza! In php però ragiono come un mulo! :-D

Nel file articoli.php potresti indicarmi dove devo inserire l'articolo, in quale punto preciso, così inizio a testare? Grazie mille ancora.

MessaggioInviato: mar lug 25, 2006 9:00 am
da Rumez
l'articolo non devi inserirlo a mano..in html altrimenti non funziona nulla! Come faccio in quel caso ad associare i commenti all'articolo in questione?

La cosa funziona così:

[nota] Gli articoli devo risiedere in un databse (access,MySQL...poco importa)
Il database lo strutturiamo in questo modo:

Tabella Articoli
--------------------------------
| id_articolo | titolo | testo |
--------------------------------

Tabella Commenti
------------------------------------------------------------------------
| id_commento | id_articolo | testo_commento | autore | mail |
------------------------------------------------------------------------

Come potrai notare la tabella Commenti contiene un campo id_articolo..è lo stesso campo della tabella Articoli e questo fa si che il commento/i inseriti siano associati univocamente ad un articolo particolare

Esempio:

Tabella Articoli
--------------------------------
| id_articolo | titolo | testo |
--------------------------------
| 15 | prova|prova |
--------------------------------

Tabella Commenti
------------------------------------------------------------------------
| id_commento | id_articolo | testo_commento | autore | mail |
------------------------------------------------------------------------
| 1 | 15 | bello | pippo | a@a |
------------------------------------------------------------------------

In questo caso il commento di id 1 è associato all'articolo di id 15...

detto questo ti allego i file che ho preparato..sono molto semplici e commentati...
[nota] una pagina che permette di inserire un articolo nel database aggiungi_articolo.php
[nota] una pagina che processa l'inserimento dell'articolo inserisci_articolo.php
[nota] una pagina che stampa a video l'elenco di tutti gli articolo elenco_articoli.php
[nota] una pagina che visualizza in dettaglio un articolo ( + elenco commenti + form inserimento commenti) articoli.php
[nota] una pagina che processa l'inserimento dei commenti inserisci_commento.php

L'unica cosa che ti resta da fare è crearti il database partendo dalla struttura che ti ho spiegato sopra...
Più di così non posso fare..praticamente ti ho dato tutto lo script...se hai bisogno per qualche dritta chiedi pure...
ciao

MessaggioInviato: mar lug 25, 2006 6:17 pm
da domenico127
Dunque se ho ben capito, devo configurare il file config.inc.php in modo che si connetta al database. Poi mi collego al file aggiungi_articoli.php e dal form inserisco un articolo, giusto?

MessaggioInviato: mar lug 25, 2006 6:54 pm
da Rumez
si esattamente...
poi ovviamente è il caso che ci metti un po' di grafica...io ti ho dato solo la struttura

MessaggioInviato: mar lug 25, 2006 11:52 pm
da domenico127
Si certo quello della grafica è un problema secondario, in quanto adesso l'importante epr me è capire come funzioni.


Affinchè il tutto funzioni però prima devo aver creato delle tabelle nel database, vero? Dato che non so "strutturare" un database, conosci una buona guida?

MessaggioInviato: mer lug 26, 2006 8:46 am
da Rumez
intanto ti conviene scegliere il databse..uno vale l'altro tanto la connessione avviene tramite ODBC.
Comunque ti consiglio MySQL
[nota] http://dev.mysql.com/downloads/mysql/5.0.html
Esiste anche il suo tool grafico per creare le tabelle MySQL Administrator
[nota] http://dev.mysql.com/downloads/administrator/1.1.html
Questi due sono entrambi opensource...

Se invece hai un po' di soldi da spendere...ti consiglio come Tool Grafico di amministrazione questo programma qui...è una bomba
[nota] http://www.sqlmanager.net/en/products/mysql/manager
Puoi comunque provarlo per 30 giorni.

Per quanto riguarda la struttura delle tabelle in questione fai così:
Tabella articoli
[nota] id_articolo -> integer autoincrementante
[nota] titolo -> varchar 250
[nota] testo -> longtext

Tabella Commenti
[nota] id_commento -> intger autoincrementante
[nota] id_articolo -> intger
[nota] testo commento -> longtext
[nota] autore -> varchar 250
[nota] mail -> varchar 250

guide su MySQL ne trovi a bizzeffe in internet..

MessaggioInviato: mer lug 26, 2006 2:38 pm
da domenico127
No, ma questo l'ho capito e il database ce l'ho da quando ho acquistato lo spazio web. Quello che volevo sapere è, come si creano le tabelle in database?

MessaggioInviato: mer lug 26, 2006 2:45 pm
da Rumez
se il database è di tipo MySQL fai così:
ti installi il MySQL Administrator...visto che è gratuito..poi ti connetti al database che risiede nei server che ospitano il tuo spazio web.
Per poter lavorare su un database è necessario connettersi a qust'ultimo..
Nell'interfaccia di connessione dovrai inserire l'host (indirizzo del server), il nome utente del db e la password di amministrazione del db..
Una volta connesso al database pui creare le tabelle e le colonne con semplici comandi del tipo File -> Nuovo... -> Tabella
ecc..

MessaggioInviato: mer lug 26, 2006 7:39 pm
da domenico127
Ciao Rumez. Si il mio database è di tipo MySql, il problema è che mysql administrator non si connette al database, a quanto pare non mi accetta il server che è sql.nomesito.org

MessaggioInviato: gio lug 27, 2006 8:07 am
da Rumez
hai per caso un firewall che ti blocca la porta 3306 che in pratica è quella utilizzata da MySQL?

MessaggioInviato: gio lug 27, 2006 11:45 am
da domenico127
Il mio firewall è ZA. Quando MySql Ad. cerca di accedere ad Internet attrverso quella porta, il firewall mi avvisa, ma imposto subito il permesso per proseguire, quindi non credo sia dovuto al firewall

MessaggioInviato: gio lug 27, 2006 1:35 pm
da Rumez
prova a mandare una mail ai gestori del tuo hosting..magari hai qualche parametro sbagliato

MessaggioInviato: gio lug 27, 2006 11:11 pm
da domenico127
Rieccomi. Ciao Rumez. Ho fatto qualche ricerca all'interno del sito del mio hosting. Ho trovato due cose importanti e che riporto di seguito:

1.
Codice: Seleziona tutto
Ecco uno script di esmepio per l'accesso da PHP ad un database MySQL; i commenti spiegano le singole operazioni:



<?php
// * mysql_connect necessita di servername, user e password
// * come argomenti. mysql_selectdb utilizza il nome del database.
// * Vengono utilizzate insieme per aprire una connesisone al database.
mysql_connect($SERVER,$USER,$PASSWORD);
mysql_selectdb($DATABASE);

// Esecuzione query
// * mysql_query prende come argomento la query che
// * volete eseguire sul database. Il risultato viene
// * assegnato ad una variable, che puo' essere utilizzata
// * in seguito per recuperare i risultati
$QUERY = mysql_query("SELECT * from test");

// Numero di righe ottenute
// * Eseguendo mysql_num_rows per la query in oggetto
// * sapremo quante righe essa ha ritornato
$NUMROWS = mysql_num_rows($QUERY);

// Visualizza risultati
if ($NUMROWS) {
$I = 0;
while ($I < $NUMROWS) {
// Recupero valori
// * mysql_result ritorna il valore di una specifico campo
// * di una specifica riga. Gli argomenti sono tre:
// * la query, la riga ed il nome del campo
$FIELD1 = mysql_result($QUERY,$I,"field1");
$FIELD2 = mysql_result($QUERY,$I,"field2");
$FIELD3 = mysql_result($QUERY,$I,"field3");
echo "field1 = $FIELD1, field2 = $FIELD2, field3 = $FIELD3 \n";
$I++;
}
}

?>




2.
Codice: Seleziona tutto
Per questioni di sicurezza non è possibile accedere al server MySQL tramite client esterni, ma solo attraverso script installati nello spazio web, oppure phpMyAdmin presente nel cpanel del sito. In alternativa è possibile utilizzare dei client MySQL esterni che permettono il collegamento via tunnelling, come la versione gratuita/freeware/lite di Ems MySQL Manager.


Mi affido alla tua gentilezza e pazienza!