Visualizzazione risultati 1 fino 20 di 20

Discussione: aiuto con codice php

  1. #1
    Guest

    Predefinito aiuto con codice php

    allora quando un utente fa il login nel mio sito si apre la sessione
    Codice PHP:
    $_SESSION['utente']
    poi io ho inserito la possibilità di commentare le pagine...

    questo è il codice che fa comparire la pagina in cui nel fondo si può commentare (si chiama post.php):

    Codice PHP:
    <?php
    // controllo sulla variabile inviata per querystring
    if((!isset($_GET['id_post'])) || (!is_numeric($_GET['id_post'])))
    {
    // reindirizzamento del browser nel caso in cui la variabile non venga validata
    header("Location: index.php");
    }else{
    $id_post = $_GET['id_post'];
    }
    ?>
    <html>
    <head>
    <title>MioBlog</title>
    </head>
    <body>
    <?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
    $post_sql = $data->query("SELECT * FROM post WHERE id_post = $id_post");
    // controllo sulla presenza in tabella del record corrispondente dell'id richiesto
    if(mysql_num_rows($post_sql) > 0){
    // estrazione dei record
    $post_obj = $data->estrai($post_sql);
    $id_post = $post_obj->id_post;
    $titolo_post = stripslashes($post_obj->titolo_post);
    $testo_post = stripslashes($post_obj->testo_post);
    $autore_post = stripslashes($post_obj->autore_post);
    $data_post = $post_obj->data_post;
    $voto = $post_obj->voto;
    // visualizzazione dei dati

    echo "<p>".$testo_post."</p>\n<br>"; ?>

    <?php if(isset($_SESSION['utente'])){
    echo
    " :: <a href=\"commenti.php?id_post=$id_post\">Inserisci un commento</a>\n";
    echo
    "<br />\n";
    } else {
    echo
    "<b>REGISTRATI PER COMMENTARE</b>";
    }
    ?>
    <?php
    // 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);
    ?>
    <div id="commenti"><?php
    echo "<b>- Autore</b>: " . $autore_commento . " <b>Scritto il</b> ". $data->format_data($data_commento) . "\n";
    ?></div>
    <?php
    echo "" . $testo_commento;
    echo
    "<br>";
    }
    echo
    "</ul>\n";
    }else{
    echo
    "Nessun commento per questo post";
    }
    }else{
    // notifica in assenza di record
    echo "Non esiste alcun post per questo id.";
    }
    // chiusura della connessione a MySQL
    $data->disconnetti();
    ?>
    </body>
    </html>

    questa è la pagina da cui si può commentare (commenti.php):

    Codice PHP:
    <?php
    // inclusione del file di classe
    include "funzioni_mysql.php";
    // istanza della classe
    $data = new MysqlClass();
    // chiamata alla funzione di connessione
    $data->connetti();

    // valorizzazione delle variabili con i parametri dal form
    if(isset($_POST['submit'])){
    if(!isset(
    $_POST['autore']) || !isset($_POST['commento']) || !isset($_POST['post_id']) || !is_numeric($_POST['post_id']))
    {
    echo
    "Tutti i campi sono obbligatori";
    }else{
    $autore = htmlentities(addslashes($_POST['autore']));
    $post_id = $_POST['post_id'];
    $commento = htmlentities(addslashes($_POST['commento']));

    $t = "commenti"; # nome della tabella
    $v = array ($post_id,$autore,$commento,date("Y-m-d")); # valori da inserire
    $r = "id_post,autore_commento,testo_commento,data_commento"; # campi da popolare

    // chiamata alla funzione per l’inserimento dei dati
    $data->inserisci($t,$v,$r);
    header("Location: post.php?id_post=$post_id");
    }
    }else{
    // controllo sull'id del post inviato per querystring
    if( isset($_GET['id_post']) && is_numeric($_GET['id_post']) ){
    $id_post = $_GET['id_post'];
    $sql_commenti = $data->query("SELECT id_post FROM post WHERE id_post='$id_post'");
    if(
    mysql_num_rows($sql_commenti) > 0){
    // viene visualizzato il form solo nel caso in cui l'unico dato inviato sia l'id del post
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Autore:<br>
    <input name="autore" type="text"><br><br>
    Commento:<br>
    <textarea name="commento" cols="30" rows="10"></textarea><br>
    <input name="post_id" type="hidden" value="<?php echo $id_post; ?>"><br>
    <input name="submit" type="submit" value="Invia">
    </form>
    <?php
    // notifiche in caso di querystring vuota o non valida
    }else{
    echo
    "Non è possibile accedere alla pagina da questo percorso.";
    }
    }else{
    echo
    "Commenti non consentiti, articolo inesistente.";
    }
    }
    // disconnessione
    $data->disconnetti();
    ?>
    </body>
    </html>

    e questo è il codice che permette di visualizzare in fondo alla pagina post.php i commenti scriti:

    Codice PHP:
    <?php
    // inizializzazione della sessione
    session_start();
    // controllo sul valore di sessione
    if (!isset($_SESSION['login']))
    {
    // reindirizzamento alla home page 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 records 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();
    ?>

    ora il problema è che io voglio fare in modo che quando si commenta non si possa scrivere il nome dell'autore ma venga in automatico il nome dell'utente in base al login che ha fatto... quindi dovrebbe prendere il valore $username di un altra tabella e stamparlo... ma proprio nn riesco a farlo.. qualcuno mi aiuta?

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Qui:
    Codice PHP:
    $v = array ($post_id,$autore,$commento,date("Y-m-d")); # valori da inserire
    Invece di autore, devi mettere la variabile di sessione.

    Poi, visto che l'utente non può modificare il campo "autore", dovresti eliminare sia l'input dell'autore, sia il controllo isset($_POST['autore'])

    Ciao!

  3. #3
    Guest

    Predefinito

    Non conosco i codici delle classi usate ne la struttura delle tabelle. Vado ad ipotesi, e con un certo grado di semplificazione (soprattutto per la sicurezza, quindi capisci il ragionamento e adeguati di conseguenza per evitare spiacevoli intromissioni).

    Ipotizzo che in $_SESSION['utente'] ci sia memorizzato l'ID dell'utente loggato e che la tabella degli utenti si users,

    Codice PHP:
    <?php
    // query per l'estrazione del'username
    $utente_sql = $data->query("SELECT username FROM users WHERE iduser = $_SESSION['utente']");

    $utente_obj = $data->estrai($utente_sql)){
    $username = $utente_obj->username;
    ?>
    ...

    Autore:<br>
    <input name="autore" type="text" value="<?php echo $username ?>"><br><br>

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Citazione Originalmente inviato da simpleticket Visualizza messaggio
    Non conosco i codici delle classi usate ne la struttura delle tabelle. Vado ad ipotesi, e con un certo grado di semplificazione (soprattutto per la sicurezza, quindi capisci il ragionamento e adeguati di conseguenza per evitare spiacevoli intromissioni).

    Ipotizzo che in $_SESSION['utente'] ci sia memorizzato l'ID dell'utente loggato e che la tabella degli utenti si users,

    Codice PHP:
    <?php
    // query per l'estrazione del'username
    $utente_sql = $data->query("SELECT username FROM users WHERE iduser = $_SESSION['utente']");

    $utente_obj = $data->estrai($utente_sql)){
    $username = $utente_obj->username;
    ?>
    ...

    Autore:<br>
    <input name="autore" type="text" value="<?php echo $username ?>"><br><br>
    Occhio che in quel modo verrà scritto il valore nell'input, ma l'utente potrà modificarlo.

    Ciao!

  5. #5
    Guest

    Predefinito

    Si era proprio quello che volevo fare, ovvero precompilare il form.
    Se proprio si vuole eliminare la soluzione di alemoppo è meglio, considera però cosa contiene la variabile di sessione e cosa registri sul DB (Se una è l'ID dell'utente e nel DB scrivi il NOME, devi prima recuperare questo e poi scriverlo...)

  6. #6
    Guest

    Predefinito

    ok appena posso provo!! grazie!!

  7. #7
    Guest

    Predefinito

    il problema è che la variabile $username è di un altra tabella.. come faccio a fargli capire di prenderla dall'altra tabella??

    le tabelle che ho sono:

    utenti:
    -id
    -username
    -password
    -email

    post:
    -id_post
    titolo_post
    -autore_post
    -testo_post
    -data_post

    commenti:
    -id_commento
    -id_post
    -autore_commento
    -testo_commento
    -data_commento
    -approvato



    devo forse inserire anche la colonna username nella tabella post o commenti per metterle in relazione??

    e poi nel codice che visualizza i commenti non devo modificare nulla?

  8. #8
    Guest

    Predefinito

    Se leggi bene il codice che ti ho postato e conosci almeno le basi (ma le basi basi) di come si fanno le query ti accorgi che c'è un FROM users (che nel tuo caso deve diventare FROM utenti) ...

  9. #9
    Guest

    Predefinito

    solo che io volevo fare in modo che chi scrive non può modificare il nome utente... per quello che avete detto nel tuo modo invece si potrebbe modificare no?

  10. #10
    Guest

    Predefinito

    al posto di farlo scrivere sul campo lo passi come valore alla funzione che ti indicava alemoppo.

  11. #11
    Guest

    Predefinito

    è proprio cio che non riesco a fare xD

  12. #12
    Guest

    Predefinito

    cancelli tutta sta parte:

    Codice PHP:
    Autore:<br>
    <input name="autore" type="text" value="<?php echo $username ?>"><br><br>
    e cambi questa

    Codice PHP:
    $v = array ($post_id,$autore,$commento,date("Y-m-d")); # valori da inserire
    in

    Codice PHP:
    $v = array ($post_id,$username,$commento,date("Y-m-d")); # valori da inserire
    lasciando il codice che ti avevo detto prima (aggiustandolo per adattarlo alla struttura del tuo progetto).

  13. #13
    Guest

    Predefinito

    non funziona.. farò un po' di prove.. grz comunque

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da wiiu Visualizza messaggio
    non funziona.. farò un po' di prove.. grz comunque
    Ti avevo già scritto che non conoscendo tutto il codice (specialmente la classe che interroga il DB) ho scritto un po' ad intuito.
    Adesso sta a te capire come adattarlo ai tuoi bisogni.

  15. #15
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    1- devi eliminare il campo dal form dove richiedi il nome dell'utente, quindi eliminare questo:

    Codice HTML:
    <input name="autore" type="text"><br>
    2-Non essendoci più il campo autore, l'if:

    Codice PHP:
    if(!isset($_POST['autore']) || !isset($_POST['commento']) || !isset($_POST['post_id']) || !is_numeric($_POST['post_id']))
    Fallirà sempre. Devi rimuovere la condizione sull'autore.

    3-Infine, se il nick cel'hai in $_SESSION['utente'] , e come osservava giustamente simpleticket è la stringa contenente il nick e non l'id dell'utente, fai una cosa come:

    Codice PHP:
    $v = array ($post_id,$_SESSION['utente'],$commento,date("Y-m-d")); # valori da inserire
    Ciao!

  16. #16
    Guest

    Predefinito

    ho fatto così:

    Codice PHP:
    <?php
    // inclusione del file di classe
    include "funzioni_mysql.php";
    // istanza della classe
    $data = new MysqlClass();
    // chiamata alla funzione di connessione
    $data->connetti();

    // valorizzazione delle variabili con i parametri dal form
    if(isset($_POST['submit'])){
    if(!isset(
    $_POST['commento']) || !isset($_POST['post_id']) || !is_numeric($_POST['post_id']))
    {
    echo
    "Tutti i campi sono obbligatori";
    }else{
    $autore = htmlentities(addslashes($_POST['autore']));
    $post_id = $_POST['post_id'];
    $commento = htmlentities(addslashes($_POST['commento']));

    $t = "commenti"; # nome della tabella
    $v = array ($post_id,$_SESSION['utente'],$commento,date("Y-m-d")); # valori da inserire
    $r = "id_post,autore_commento,testo_commento,data_commento"; # campi da popolare

    // chiamata alla funzione per l’inserimento dei dati
    $data->inserisci($t,$v,$r);
    header("Location: post.php?id_post=$post_id");
    }
    }else{
    // controllo sull'id del post inviato per querystring
    if( isset($_GET['id_post']) && is_numeric($_GET['id_post']) ){
    $id_post = $_GET['id_post'];
    $sql_commenti = $data->query("SELECT id_post FROM post WHERE id_post='$id_post'");
    if(
    mysql_num_rows($sql_commenti) > 0){
    // viene visualizzato il form solo nel caso in cui l'unico dato inviato sia l'id del post
    ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    Commento:<br>
    <textarea name="commento" cols="30" rows="10"></textarea><br>
    <input name="post_id" type="hidden" value="<?php echo $id_post; ?>"><br>
    <input name="submit" type="submit" value="Invia">
    </form>
    <?php
    // notifiche in caso di querystring vuota o non valida
    }else{
    echo
    "Non è possibile accedere alla pagina da questo percorso.";
    }
    }else{
    echo
    "Commenti non consentiti, articolo inesistente.";
    }
    }
    // disconnessione
    $data->disconnetti();
    ?>
    </body>
    </html>
    però quando provo ad inviare un commento dice
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"ertert","2012-12-19")' at line 1
    Ultima modifica di wiiu : 19-12-2012 alle ore 19.01.20

  17. #17
    Guest

    Predefinito

    devo frs sostituire

    Codice PHP:
    $username = htmlentities(addslashes($_POST['autore']));
    con

    Codice PHP:
    $_SESSION['utente'] = stripslashes($utenti_obj->username);
    ????

  18. #18
    Guest

    Predefinito

    Citazione Originalmente inviato da wiiu Visualizza messaggio
    devo frs sostituire

    Codice PHP:
    $username = htmlentities(addslashes($_POST['autore']));
    con

    Codice PHP:
    $_SESSION['utente'] = stripslashes($utenti_obj->username);
    ????
    Io non rimpiazzerei il valore della variabile di sessione, ma mi pare sia naturale fare


    Codice PHP:
    $username = stripslashes($utenti_obj->username);

  19. #19
    Guest

    Predefinito

    ho provato.. non va comunque... c'è qualche istruzione giusta che non gli do...


    non è che devo dirgli di prendere l'informazione anche dalla tabella utenti in questa riga??

    $t = "commenti"; # nome della tabella

  20. #20
    Guest

    Predefinito

    o forse devo modificare qualche parametro anche nella pagina che visualizza la lista dei commenti... perchè adesso mi fa postare ma non compare nessun nome..

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •