Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Inserire commenti a record legando le tabelle...?!?!?!?

    Vi spiego tutto....
    come ho già detto in altre discussioni devo creare un sito di raccolta opere di poeti/scrittori amatoriali. Ma ho + di un problema ------>

    A) dopo aver ricercato l'opera per autore, genere o titolo vorrei che l'utente potesse lasciare un commento sulla stessa che verrà visualizzato di seguito all'opera.
    Il casino è che dovrei trovare il modo di legare l'opera con il proprio commento...FOREIGN KEY? se si come?

    B) mi si chiede inoltre che io, amministratore, sia in grado di valutare i commenti prima che siano inseriti, praticamente un passo intermedio tra inviare - valutare - pubblicare...lo stesso per le opere inviate, ma non ho la minima idea di come fare..

    Siete cosi gentili da darmi una mano/consigli? se volete un po di codice basta dirlo...

  2. #2
    A

    Non vedo la necessità di usare chiavi esterne. Semplicemente devi prevedere un campo per i commenti nella tabella delle opere.
    Quando l'utente seleziona l'opera gli viene proposta una form dove scrivere il proprio commento. Quando clicca su invia allora viene attivato un UPDATE nella tabella del tipo UPDATE tabopere SET commento=commentolasciato WHERE opera=operaselezionata

    B
    O utilizzi una specie di tabella temporanea e quindi i commenti anziché essere salvati subito nella tabella delle opere, vengono salvati in una tabella temporanea che avrà due campi: opera (chiave esterna), commento. Quando tu approvi il commento fai due operazioni SQL: una di UPDATE nella tabella delle opere e una di cancellazione dalla tabella temporanea.
    Altrimenti, più efficente, nella tabella opere prevedi anche un campo di tipo flag "visibile", all'inizio non è fleggato poi quando approvi lo imposti su si. Se fai così quando un utente apre un'opera allora devi fare anche un if in cui determini se visualizzare o meno i commenti.

  3. #3
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Io ti suggerisco un approccio del tutto opposto

    A
    Usa una tabella per i commenti, strutturata così:
    id_commento (chiave primaria)
    id_opera (id di riferimento all'opera)
    id_utente / nome_utente (se usi una tabella per gli utenti usi l'id di riferimento, altrimenti memorizzi il nome)
    commento (testo del commento)
    revisione (che può contenere un valore 0 oppure 1 in dipendenza del fatto che tu l'abbia approvata o meno)

    Per ogni opera visualizzerai tutti i commenti lasciati dagli utenti (selezionando ovviamente solo quelli revisionati, cioè con revisione=1).

    B
    Nel momento in qui un utente invia un commento viene memorizzato nella tabella suddetta, ma NON viene visualizzato fino a quando tu non avrai revisionato il tutto. Ovviamente devi prevedere una pagina nel pannello che ti permetta di individuare tutti i commenti da revisionare e di approvarli/cancellarli.

    Spero possa esserti utile come soluzione
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  4. #4
    Originariamente inviato da nicolabiondo
    A

    Non vedo la necessità di usare chiavi esterne. Semplicemente devi prevedere un campo per i commenti nella tabella delle opere.
    Quando l'utente seleziona l'opera gli viene proposta una form dove scrivere il proprio commento. Quando clicca su invia allora viene attivato un UPDATE nella tabella del tipo UPDATE tabopere SET commento=commentolasciato WHERE opera=operaselezionata

    B
    O utilizzi una specie di tabella temporanea e quindi i commenti anziché essere salvati subito nella tabella delle opere, vengono salvati in una tabella temporanea che avrà due campi: opera (chiave esterna), commento. Quando tu approvi il commento fai due operazioni SQL: una di UPDATE nella tabella delle opere e una di cancellazione dalla tabella temporanea.
    Altrimenti, più efficente, nella tabella opere prevedi anche un campo di tipo flag "visibile", all'inizio non è fleggato poi quando approvi lo imposti su si. Se fai così quando un utente apre un'opera allora devi fare anche un if in cui determini se visualizzare o meno i commenti.
    per il punto A...non è che però se vengono inviati + commenti per la stessa opera quello + recente si sovrappone a quello vecchio nella colonna "commento" del DB?

    per il punto B non ho capito molto...puoi spiegarmelo + dettagliatamente?

  5. #5
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Originariamente inviato da nonnocavallo
    per il punto A...non è che però se vengono inviati + commenti per la stessa opera quello + recente si sovrappone a quello vecchio nella colonna "commento" del DB?
    Per questo io ti proponevo una tabella apposita per i commenti
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  6. #6
    Originariamente inviato da Leo15
    Per questo io ti proponevo una tabella apposita per i commenti
    puoi darmi una mano nel farlo? ad esempio non capisco come fare a impostare chiavi esterne in SQL...e poi come faccio a visualizzare più commenti?

  7. #7
    Utente di HTML.it L'avatar di Leo15
    Registrato dal
    Sep 2005
    Messaggi
    307
    Se usi un DB MySQL con engine MyISAM (cosa molto probabilme visto che è la configurazione di default) non hai bisogno di specificare una foreign key.

    Supponiamo che tu abbia una tabella per le opere con determinati campi (che io non specifico):
    Tabella Opere:
    ID_opera - chiave primaria
    ... altri campi

    ed una tabella per i commenti:
    Tabella Commenti:
    ID_commento - chiave primaria
    ID_opera - riferimento ad un record nella tabella Opere.
    nome_utente - nome di chi scrive il commento
    commento - testo del commento
    revisione - campo INT che può contenere 1 o 0 (puoi usare tipo enum o quello che preferisci).

    A questo punto quando un utente inserisce un commento per un opera A che ha come ID_opera 32 (per esempio) dovrai inserire un record nella tabella Commenti che abbia nel campo ID_opera il valore 32 (e nel campo revisione il valore 0).

    Da una pagina accessibile solo a te poi potrai revisionare i commenti e pubblicare quelli che ritieni idonei.

    In seguito, quando visualizzerai la pagina con quell'opera farai una SELECT che ti vada a prendere tutti commenti che contengono come ID_opera il valore 32 e come revisione il valore 1, per poi stamparli nella pagina stessa.

    Spero di essere stato chiaro...
    La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
    Isaac Asimov

  8. #8
    questo è il codice con cui cerco le opere per autore, ok?
    dovrei quindi fare una form sotto ogni opera visualizzata (o un link che rimandi a una pagina con il form per il commento) per inviare il commento, giusto fin qui?
    per le opere trovate come vedi in fondo allo script viene preso una array per ogni colonna del DB...ad esempio $r['id'] (che cambierò in id_autore )...come faccio insieme al submit del form a passargli anche questo valore 'id'? uso di nuovo $r['id']? perchè credo cosi non vada bene...
    se tu potessi aiutarmi un pochino con il codice sarebbe fantastico..

    <?
    include("connection.inc");
    $dbname="utenti";
    mysql_select_db('utenti',$conn);

    function visualizzaform(){

    echo "<form name=\"search\" method=\"post\" action=\"autore.php\">";
    echo "Cerca per Autore: <input type=\"text\" name=\"autore\" value=\"\">";
    echo "<input type=\"submit\" name=\"cerca\" value=\"cerca\" />
    ";
    echo "</form>";
    }

    if (!isset($_POST['cerca'])) {

    visualizzaform();

    } else if (isset($_POST['cerca'])) {

    $scelta= $_POST['autore'];

    $sql="SELECT * FROM opere WHERE autore LIKE '%$scelta%'";

    $risultato= mysql_query($sql);

    $total= mysql_num_rows($risultato);

    if ($total == 0) {

    echo "Non ho trovato niente!";
    }else{

    while( $r = mysql_fetch_array($risultato)){
    echo "Id: " . $r['id'] . "
    ";
    echo "Autore: " . $r['Autore'] . "
    ";
    echo "Soggetto: " . $r['Soggetto'] . "
    ";
    echo "Genere: " . $r['Genere'] . "
    ";
    echo "Titolo: " . $r['Titolo'] . "
    ";
    echo "Composizione: " . $r['Composizione'] . "
    ";
    echo "Commenti: " . $r['Commento'] . "
    ";

    }
    }
    }
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.