• User

    Implementazione di un portale in PHP

    Ciao a tutti
    sto realizzando un portale di informazione (TakeConscience - Diritti umani e sviluppo sostenibile) in PHP che vorrei implementare con alcune funzioni che permettano all'utente di interagire con il sito.

    Prima implementazione

    Commenti - La prima cosa che vorrei fare per implementare il portale è creare uno script per permettere all'utente di lasciare un commento.

    Problema - Il commento deve essere legato all'oggetto in analisi.
    Descrizione problema - Il problema in sè è questo. I video visualizzati all'interno del portale sono inseriti automaticamente attraverso un pannello di amministrazione. Quindi quando accedo alla pagine di visualizzazione di un video l'indirizzo risulterà sito.it/video/show.php?id=$row[ID]. Per inserire i commenti pensavo ad un semplice form, ma il problema è che il commento deve essere legato a quel determinato video che l'utente ha analizzato quindi deve essere correlato quando viene immagazzanato nel database a quel determinato ID.

    Soluzione - Ho provato a guardare qualche script in giro ma nessuno mi ha soddisfatto (in realtà preferisco fare da me), ho anche cercato post inerenti l'argomento all'interno del forum ma non ho trovato nulla di soddisfacente, penso che ci siano veramente pochi articoli a riguardo e la soluzione al mio problema penso possa essere di aiuto a molti. Se qualcuno quindi ha qualche soluzione da proporre o necessita di ulteriori chiarimenti circa la strutturazione del portale non esiti a rispondere.

    Grazie in anticipo per l'attenzione e il tempo
    Un saluto

    Alessandro


  • Consiglio Direttivo

    Ciao ale_colombo e benvenuto nel Forum GT 😉

    Perché non ti crei la tabella commenti associando ad ogni commenti l'id del video correlato?
    campi:
    id | id_video | altrocampo |

    così in visualizzazione estrarrai/associerai i commenti all'id del video correlato 😉


  • User

    Ciao Samyorn, grazie del benvenuto, in effetti mi ero dimenticato i presentarmi, ho rimediato subito con un post nell'apposita sezione. 🙂

    Tornando al discorso commenti il tuo seggerimento coincide con l'idea che avevo, il problema è che non riesco a metterla in pratica.

    Mettiamo che l'utente si trovi sulla pagina video con ID=1
    Costruisco un form che mi salva i dati su database con due campi per semplicare (il campo id inerente il commento è implicito e lo metto solo in tabella): autore e testo e creo la relativa tabella sql nel database.
    Il fatto è come posso fare in modo che all'interno della tabella mi salvi anche il record inerente l'ID del video? Certo posso creare io il campo nella tabella ma come posso far salvare in autamatico l'I del video attraverso il form?

    Ti posto all'incirca il codice che scriverei io

    Form di immessione:

    
    <form method="GET" action="df_save.php">
    Nome dell'autore <input type="text" name="autore">
    Commento <input type="text" name="commento">
    <input type="submit" value="Inserisci" name="B"></form>
    
    

    df_save.php:

    
    <?
    include("df_config.php");
     
    if (trim($autore) == ""):
    echo "Non hai scritto il nome dell'autore";
     
    if (trim($commento) == ""):
    echo "Non hai scritto il commento";
     
    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.php");
     
    $query = "INSERT INTO commento (ID,AUTORE,COMMENTO) VALUES ('$id,'$autore','$commento')";
    
    if (mysql_query($query, $db))
    print "Commento inserito correttamente";
    else
    print "Errore nell'inserimento del commento";
    mysql_close($db);
    endif;
    ?>
    
    

    Grazie e ciao
    Alessandro


  • Consiglio Direttivo

    [php]<form method="GET" action="df_save.php">
    Nome dell'autore <input type="text" name="autore">
    Commento <input type="text" name="commento">
    <input type="hidden" name="id_video" value="<? echo $id_video; ?>">
    <input type="submit" value="Inserisci" name="B"></form>[/php]
    dove $id_video è l'id del video, poi ti salvi tutto sulla tabella commenti 😉


  • User

    Ecco quello che mi mancava

    <input type="hidden" name="id_video" value="<? echo $id_video; ?>"> 
    
    

    Ora però ho un'altro problema problema (che strano). Se compilo il campo "commento" non mi vengono salvati i records sul database...molto strano e non riesco a capire il perchè.

    Ti posto il codice utilizzato...magari trovi l'errore...anche se non penso sia un errore di scrittura.

    Tabella SQL

     
    CREATE TABLE `commenti` (
      `ID` mediumint(9) NOT NULL auto_increment,
      `ID_VIDEO` mediumint(9) NOT NULL ,
      `IP` varchar(60) NOT NULL default '',
      `HOST` varchar(60) NOT NULL default '',
      `DATA` varchar(50) NOT NULL default '',
      `ORA` varchar(40) NOT NULL default '',
      `AUTORE` varchar(255) NOT NULL default '',
      `COMMENTO` varchar(255) NOT NULL default '',
    
      PRIMARY KEY  (`ID`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=39 ;
    
    

    Form inserimento
    [HTML]<form method="GET" action="df_save.php">
    <input type="hidden" name="id_video" value="<? echo $id; ?>">
    <br><input type="text" name="autore">Autore
    <br><input type="text" name="commento">Commento
    <br><input type="submit" value="Inserisci" name="B">
    </form>[/HTML]

    df_save.php
    [PHP]<?
    include("df_config.inc.php");
    //calcolo della data
    $d = date('d');
    $m = date('m');
    $y = date('Y');
    $data = $d ."/". $m ."/". $y;
    //calcolo dell ora
    $g = date('G');
    $i = date('i');
    $ora = $g .":". $i;
    $ip = $REMOTE_ADDR;
    $host = @gethostbyaddr("$REMOTE_ADDR");
    if (trim($titolo) == ""):
    echo "Non è stato specificato il nome";
    elseif (trim($categoria) == ""):
    echo "Non è stata inserito nessun commento";
    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
    $query = "INSERT INTO commenti (ID_VIDEO,IP,HOST,DATA,ORA,AUTORE,COMMENTO) VALUES ('$id_video','$ip','$host','$data','$ora','$autore','$commento')";
    if (mysql_query($query, $db))
    print "Commento inserito correttamente";
    else
    print "Errore nell'inserimento";
    mysql_close($db); endif;
    ?>[/PHP]

    Se compilo entrambi i campi del form non mi salva nulla. Se lascio in bianco commento mi salva il record ma ovviamente senza il campo commento. :mmm:


  • Consiglio Direttivo

    Scusa ma io da quì non vedo i vari
    [PHP] $titolo=$_GET['autore'];
    $commento=$_GET['commento'];
    [/PHP]
    etc etc
    :mmm:


  • User

    Si scusa è che ho sbagliato a postare il codice della pagina df_save.php che è di un'altra sezione.

    df_save.php
    [php]<?
    include("df_config.inc.php");

    $autore=$_GET['autore'];
    $commento=$_GET['commento'];

    //calcolo della data
    $d = date('d');
    $m = date('m');
    $y = date('Y');
    $data = $d ."/". $m ."/". $y;
    //calcolo dell ora
    $g = date('G');
    $i = date('i');
    $ora = $g .":". $i;

    $ip = $REMOTE_ADDR;
    $host = @gethostbyaddr("$REMOTE_ADDR");

    if (trim($autore) == ""):
    echo "Non hai specificato il nome";
    elseif (trim($commento) == ""):
    echo "Non è stato inserito nessun commento";

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $query = "INSERT INTO commenti (ID_VIDEO,IP,HOST,DATA,ORA,AUTORE,COMMENTO) VALUES ('$id_video','$ip','$host','$data','$ora','$autore','$commento')";

    if (mysql_query($query, $db))
    print "Commento inserito correttamente";
    else
    print "Errore nell'inserimento";
    mysql_close($db); endif;
    ?> [/php]

    cmq il problema persiste. se inserisco solo l'autore ok ma se compilo anche il campo commento mi manda a una pagina vuoto dal link video/df_save.php?autore=Alessandro&commento=aaa&B=Inserisci


  • Consiglio Direttivo

    [php] <?
    include("df_config.inc.php");

    $id_video=$_GET['id_video'];
    $autore=htmlentities($_GET['autore'], ENT_QUOTES);
    $commento=htmlentities($_GET['commento'], ENT_QUOTES);

    //calcolo della data
    $d = date('d');
    $m = date('m');
    $y = date('Y');
    $data = $d ."/". $m ."/". $y;
    //calcolo dell ora
    $g = date('G');
    $i = date('i');
    $ora = $g .":". $i;
    // perchè non usi semplicemente il timestamp e poi in visualizzazione usi una sola volta la funzione date();??

    $ip = $REMOTE_ADDR; // questo da dove lo tiri fuori??
    $host = @gethostbyaddr("$REMOTE_ADDR");

    if (trim($autore) == "") {
    echo "Non hai specificato il nome";
    } else if { (trim($commento) == "")
    echo "Non è stato inserito nessun commento";}

    $db = mysql_connect($db_host, $db_user, $db_password);
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");

    $query = "INSERT INTO commenti (ID_VIDEO,IP,HOST,DATA,ORA,AUTORE,COMMENTO) VALUES ('$id_video','$ip','$host','$data','$ora','$autore','$commento')";

    if (mysql_query($query, $db))
    print "Commento inserito correttamente";
    else
    print "Errore nell'inserimento";
    mysql_close($db); endif;
    ?>[/php]Prova un po' così...


  • User

    E lo sò il codice è molto rudimentale sono autodidatta quindi cerco di arrangiarmi con quel che sò e quel che trovo.

    Cmq ora mi da questo errore:

    Parse error: parse error, unexpected T_ENDIF in C:\AppServ\www\takeconscience\Sito\antimafia\video\df_save.php on line 38


  • User

    Scusa, ma ti da anche la riga dell'errore, basta guardare il codice alla riga corrispondente!

    mysql_close($db); endif;

    l'endif è errato scritto così?
    Se vuoi utilizzare l'endif
    la sintassi corretta è:

    [PHP]
    if (mysql_query($query, $db)):
    print "Commento inserito correttamente";
    else:
    print "Errore nell'inserimento";
    mysql_close($db); endif;
    [/PHP]

    ma ti consiglio di utilizzare le parentesi graffe


  • User

    Ciao satifal ho guardato si la riga dell'errore ma non capisco dove esso stia. La sintassi che io ho utilizzato è la stessa che tu mi hai postato.


  • User

    Dopo la condizione dell'if e dopo l'else devi aggiungere i due punti ( : ) 🙂


  • User

    Ecco la dimenticanza!
    Grazie a entrambi per l'aiuto. Funziona tutto correttamente. Ultimo il portale e poi vi farò vedere il risultato.
    Ciao

    Alessandro