Visualizzazione risultati 1 fino 22 di 22

Discussione: aiuto con php per inserimento username nei commenti

  1. #1
    Guest

    Predefinito aiuto con php per inserimento username nei commenti

    ciao spero possiate aiutarmi... prima di esporvi il problema vi dico la struttura dell'inseriemnto dei commenti che sto usando:

    tabelle:

    CREATE TABLE `articoli` (
    `art_id` int(11) NOT NULL auto_increment,
    `art_autore` varchar(40) NOT NULL default '',
    `art_titolo` varchar(100) NOT NULL default '',
    `art_articolo` text NOT NULL,
    `art_data` date NOT NULL default '0000-00-00',
    PRIMARY KEY (`art_id`)
    ) ;


    CREATE TABLE `commenti1` (
    `com_id` int(5) NOT NULL auto_increment,
    `com_art` int(11) NOT NULL default '0',
    `com_autore` varchar(40) NOT NULL default '',
    `com_testo` varchar(255) NOT NULL default '',
    PRIMARY KEY (`com_id`)
    );

    CREATE TABLE `utenti` (
    `id_` int(11) NOT NULL auto_increment,
    `username` varchar(30) NOT NULL default '',
    `password` varchar(100) NOT NULL default '',
    `email` varchar(60) NOT NULL default '',
    PRIMARY KEY (`id`)
    );

    la pagina che visualizza tutti gli articoli (index.php):

    Codice PHP:
    <?

    // includiamo il file di configurazione
    @include "configr.php";

    // includiamo la pagina contenente il codice per la creazione delle anteprime
    @require "anteprima.php";

    // estraiamo i dati relativi agli articoli dalla tabella
    $sql = "SELECT * FROM articoli ORDER BY art_data DESC";
    $query = @mysql_query($sql) or die (mysql_error());

    //verifichiamo che siano presenti records
    if(mysql_num_rows($query) > 0){
    // se la tabella contiene records mostriamo tutti gli articoli attraverso un ciclo
    while($row = mysql_fetch_array($query)){
    $art_id = $row['art_id'];
    $autore = stripslashes($row['art_autore']);
    $titolo = stripslashes($row['art_titolo']);
    $data = $row['art_data'];
    $articolo = stripslashes($row['art_articolo']);

    //valorizziamo una variabili con il link all'intero articolo


    echo "<h2>".$titolo."</h2>";

    // creaimo l'anteprima che mostra le prime 30 parole di ogni singolo articolo
    // per farlo utilizzo una funzione che vi presenterò più avanti
    echo @anteprima($articolo, 30, $link);
    echo
    "<br><br>";

    // formattiamo la data nel formato europeo
    $data = preg_replace('/^(.{4})-(.{2})-(.{2})$/','$3-$2-$1', $data);

    // stampiamo una serie di informazioni
    echo "Scritto da <b>". $autore . "</b>";
    echo
    "| Articolo postato il <b>" . $data . "</b>";
    echo
    "<a href=\"articolo.php?id=$art_id\">Leggi tutto</a>";
    echo
    "| Commenti: ";

    // mostriamo il numero di commenti relativi ad ogni articolo
    $conta = "SELECT COUNT(com_id) as conta from commenti1 WHERE com_art = '$art_id'";
    $conto = @mysql_query ($conta);
    $tot = @mysql_fetch_array ($conto);
    echo
    $sum2 = $tot['conta'];
    echo
    "<hr>";
    }
    }else{
    // se in tabella non ci sono records...
    echo "Nessun articolo presente.";
    }
    ?>
    la pagina che visualizza un articolo (articolo.php):

    Codice PHP:
    <?
    // controlliamo che sia stato inviato un id numerico alla pagina
    if(isset($_GET['id'])&&(is_numeric($_GET['id']))){
    // valorizziamo la variabile relativa all'id dell'articolo e includiamo il file di configurazione
    $art_id = $_GET['id'];
    @include
    "configr.php";

    // selezioniamo dalla tabella i dati relativi all'articolo
    $sql = "SELECT art_autore,art_titolo,art_data,art_articolo FROM articoli WHERE art_id='$art_id'";
    $query = @mysql_query($sql) or die (mysql_error());

    // se per quell'id esiste un articolo..
    if(mysql_num_rows($query) > 0){
    // ...estraiamo i dati e mostriamoli a video
    $row = mysql_fetch_array($query) or die (mysql_error());
    $autore = stripslashes($row['art_autore']);
    $titolo = stripslashes($row['art_titolo']);
    $data = $row['art_data'];
    $articolo = stripslashes($row['art_articolo']);
    echo
    "<h2>".$titolo."</h2>" . $articolo . "<br><br>";
    $data = preg_replace('/^(.{4})-(.{2})-(.{2})$/','$3-$2-$1', $data);
    echo
    "Scritto da <b>". $autore . "</b>";
    echo
    "| Articolo postato il <b>" . $data . "</b>";

    // link alla pagina dei commenti
    echo "<br><a href=\"insert_comment.php?id=$art_id\">Invia un commento</a><br><br>";

    // visualizzianmo tutti i commenti
    $sql_com = "SELECT com_autore, com_testo FROM commenti1 WHERE com_art='$art_id'";
    $query_com = @mysql_query($sql_com) or die (mysql_error());
    if(
    mysql_num_rows($query_com) > 0){
    echo
    "Commenti:<br>";
    while(
    $row_com = mysql_fetch_array($query_com)){
    $com_autore = stripslashes($row_com['com_autore']);
    $com_testo = stripslashes($row_com['com_testo']);
    echo
    $com_testo . "<br>";
    echo
    "Inserito da <b>". $com_autore . "</b>";
    echo
    "<hr>";
    }
    }
    }
    }else{
    // se per l'id non esiste un articolo..
    echo "Nessun articolo trovato.";
    }
    ?>
    la pagina per inserire un commento (insert_comment.php):

    Codice PHP:
    <?php include("sopra.php"); ?>

    <div id="contenuto">
    <h1>Inserisci un tuo commento:</h1>
    <?
    // includiamo il file di configurazione
    @include "configr.php";

    // se sono stati inviati dei parametri valorizziamo con essi le variabili
    // per l'inserimento nella tabella
    if(isset($_POST['submit'])){
    if(isset(
    $_POST['autore'])){
    $autore = addslashes($_POST['autore']);
    }
    if(isset(
    $_POST['testo'])){
    $testo = addslashes($_POST['testo']);
    }
    if(isset(
    $_POST['id'])){
    $com_art = addslashes($_POST['id']);
    }

    // popoliamo i campi della tabella commenti con i dati ricevuti dal form
    $sql = "INSERT INTO commenti1 (com_autore, com_testo, com_art) VALUES ('$autore', '$testo', '$com_art')";

    // se l'inserimento ha avuto successo inviamo una notifica
    if (@mysql_query($sql) or die (mysql_error())){
    echo
    "Commento inserito con successo.";
    }
    }else{
    //controlliamo che l'id dell'articolo sia realamente esistente
    if(isset($_GET['id'])&&(is_numeric($_GET['id']))){
    $com_art = addslashes($_GET['id']);
    $sql = "SELECT art_id FROM articoli WHERE art_id='$com_art'";
    $query = @mysql_query($sql) or die (mysql_error());
    if(
    mysql_num_rows($query) > 0){
    // se non sono stati inviati dati dal form mostriamo il modulo per l'inserimento
    ?>
    <form action="insert_comment.php" method="post">
    Autore:<br>
    <input name="autore" type="text" size="20"><br>
    Testo:<br>
    <textarea name="testo" cols="40" rows="10"></textarea><br>
    <input name="id" type="hidden" value="<? echo $com_art; ?>">
    <input name="submit" type="submit" value="Invia">
    </form>
    <?
    // se l'id dell'articolo non esiste o non è numerico inviamo delle notifiche
    }else{
    echo
    "Impossibile inserire un commento.";
    }
    }else{
    echo
    "Impossibile inserire un commento.";
    }
    }
    ?>

    allora nel mio sito c'è la possibilità di registrarsi e quindi di eseguire un accesso con i propri dati contenuti nella tabella utenti.
    io vorrei riuscire a fare in modo che quando uno pubblica un commento ad un articolo in automatico l'autore del commento deve coincidere con il suo username.

    mi aiutate? come modifico il codice php? devo modificare anche qualcosa nelle tabelle??


    grazie dell'aiuto
    Ultima modifica di wiiu : 21-12-2012 alle ore 23.28.45

  2. #2
    Guest

    Predefinito

    Basta che al posto di
    Codice PHP:
    if(isset($_POST['autore'])){
    $autore = addslashes($_POST['autore']);
    }
    metti l'username utilizzato per eseguire l'accesso, che quindi sarà ricavabile utilizzando una query e la variabile $_SESSION, per esempio
    Codice PHP:
    $query = 'SELECT username FROM utenti WHERE id_ = ' . $_SESSION['id'];

  3. #3
    Guest

    Predefinito

    lo inserisco proprio nella posizione di quello precedente o in un altra parte del codice?? eee devo modificare anche altri valori??
    lo so che sono domande stupide ma sono ignorante in questo campo, sorry

  4. #4
    Guest

    Predefinito

    Sì, nello stesso posto va bene. Poi sarebbe meglio anche non mettere la input autore se è già connesso, perché è inutile fargli inserire il suo nome se poi prendi il suo username.
    Se vuoi che se l'utente non è connesso debba scrivere il suo nome, invece se è connesso usi il suo username, allora metti
    Codice PHP:
    if(!$connesso) // controllo se non è connesso
    {
    ?>
    Autore:<br>
    <input name="autore" type="text" size="20"><br>
    <?
    }
    Per quanto riguarda le altre pagine non c'è nulla da dire, perché è solo in insert_comment.php che fai inserire il nome dell'autore, mentre nelle altre visualizzi semplicemente i vari dati.
    Ultima modifica di orgxiiipu : 22-12-2012 alle ore 00.13.32

  5. #5
    Guest

    Predefinito

    ok però mettiamo che io voglio far commentare solo chi è registrato... tutta la parte di codice che comprende com_autore potrei cancellarla.. no? e potrei anche cancellare la voce dalla tabella...

    EDIT:

    oppure devo dirgli di far coincidere la variabile $com_autore con username.. ma come??
    Ultima modifica di alemoppo : 22-12-2012 alle ore 11.11.33 Motivo: Non fare post consecutivi: usa il tasto "Edita" per editare i messaggi.

  6. #6
    Guest

    Predefinito

    Allora in questo caso dovrai mettere la condizione di prima per tutta la pagina, in questo senso:
    Codice PHP:
    <?php include("sopra.php");
    if(
    $connesso) // Se è connesso visualizzi la parte di inserimento dei commenti
    {
    // Qui metti tutto il resto del codice (escluso il tag ?> finale)
    }
    else // Altrimenti visualizzi un messaggio di errore
    {
    echo 'Devi essere registrato per lasciare un commento.';
    }
    ?>
    $com_autore è preso dal DB, quindi sarà l'username se modifichi l'inserimento come ti ho detto nel mio primo post.
    Ultima modifica di orgxiiipu : 22-12-2012 alle ore 00.24.20

  7. #7
    Guest

    Predefinito

    non riesco azzz.. magari quando hai 5 minuti di tempo potresti provare a modificare tu la parte per l'inserimento dei commenti e a postarla?? così cerco di capire..

  8. #8
    Guest

    Predefinito

    Ok, suppongo che al momento del login tu abbia settato una session contenente l'id dell'utente, ma non sapendo come si chiama la chiamerò $_SESSION['idutente'], poi dovrai mettere il nome che hai usato
    Codice PHP:
    <?php include("sopra.php");

    if(isset(
    $_SESSION['idutente'])) // se è settata la variabile session allora è connesso
    {
    <
    div id="contenuto">
    <
    h1>Inserisci un tuo commento:</h1>
    <?
    // includiamo il file di configurazione
    @include "configr.php";

    // se sono stati inviati dei parametri valorizziamo con essi le variabili
    // per l'inserimento nella tabella
    if(isset($_POST['submit'])){
    // trovo l'username
    $sql = "SELECT username FROM utenti WHERE id_ = " . $_SESSION['idutente'];
    $query = @mysql_query($sql) or die (mysql_error());
    $row = mysql_fetch_array($query) or die (mysql_error());

    $autore = $row['username'];

    if(isset(
    $_POST['testo'])){
    $testo = addslashes($_POST['testo']);
    }
    if(isset(
    $_POST['id'])){
    $com_art = addslashes($_POST['id']);
    }

    // popoliamo i campi della tabella commenti con i dati ricevuti dal form
    $sql = "INSERT INTO commenti1 (com_autore, com_testo, com_art) VALUES ('$autore', '$testo', '$com_art')";

    // se l'inserimento ha avuto successo inviamo una notifica
    if (@mysql_query($sql) or die (mysql_error())){
    echo
    "Commento inserito con successo.";
    }
    }else{
    //controlliamo che l'id dell'articolo sia realmente esistente
    if(isset($_GET['id'])&&(is_numeric($_GET['id']))){
    $com_art = addslashes($_GET['id']);
    $sql = "SELECT art_id FROM articoli WHERE art_id='$com_art'";
    $query = @mysql_query($sql) or die (mysql_error());
    if(
    mysql_num_rows($query) > 0){
    // se non sono stati inviati dati dal form mostriamo il modulo per l'inserimento
    ?>
    <form action="insert_comment.php" method="post">
    Testo:<br>
    <textarea name="testo" cols="40" rows="10"></textarea><br>
    <input name="id" type="hidden" value="<? echo $com_art; ?>">
    <input name="submit" type="submit" value="Invia">
    </form>
    <?
    // se l'id dell'articolo non esiste o non è numerico inviamo delle notifiche
    }else{
    echo
    "Impossibile inserire un commento.";
    }
    }else{
    echo
    "Impossibile inserire un commento.";
    }
    }
    }
    else{
    echo
    "Devi essere connesso per lasciare un commento.";
    }
    ?>

  9. #9
    Guest

    Predefinito

    1° grazie mille... 2° il nome della sessione si chiama $_SESSION['utente'] e l'ho sostituito...

    però quando provo ad inviare il commento mi dice Unknown column 'id_' in 'where clause'

    allora ho provato a cambiare id_ in id e mi dice Unknown column 'wiiu' in 'where clause'
    Ultima modifica di wiiu : 22-12-2012 alle ore 01.08.57

  10. #10
    Guest

    Predefinito

    Posso capire dall'errore Unknown column 'wiiu' in 'where clause' e dal fatto che si chiama $_SESSION['utente'] che tu salvi l'username come session e non il suo id (che sarebbe meglio), comunque basta cambiare la query in
    Codice PHP:
    $sql = "SELECT username FROM utenti WHERE username = '" . $_SESSION['utente'] . "'";

  11. #11
    Guest

    Predefinito

    ho provato a fare come hai detto.. ora posta il commento.. ma non compare proprio l'autore.. forse devo modificare qualcosa nella pagina articolo.php?

    EDIT:

    perchè sono andato a vedere nella tabella commenti e nel campo com_autore memorizza il nome utente però non lo stampa poi..
    Ultima modifica di alemoppo : 22-12-2012 alle ore 11.10.45

  12. #12
    Guest

    Predefinito

    (Invece di continuare a fare doppi post dovresti modificare il post precedente)
    Ma il commento esce o non stampa proprio nulla?
    Perché il codice della pagina mi sembra a posto, al massimo prova a stampare a video la query con una
    Codice PHP:
    echo $sql_com;
    appena dopo
    Codice PHP:
    $sql_com = "SELECT com_autore, com_testo FROM commenti1 WHERE com_art='$art_id'";
    e prova a eseguire la query stampata direttamente da SQL (con PHPMyAdmin se lo usi) e vedi se escono sia il testo che l'autore del commento.

  13. #13
    Guest

    Predefinito

    il commento lo stampa, l'autore no anche se nella tabella del DB sotto la voce com_autore l'ha memorizzato...

    non dipenderà da questa riga? --> echo "Inserito da ". $com_autore . "";


    ho provato a scrivere echo $sql_com; e stampa questo:SELECT com_autore, com_testo FROM commenti1 WHERE com_art='3'
    Ultima modifica di wiiu : 22-12-2012 alle ore 01.56.40

  14. #14
    Guest

    Predefinito

    Non vedo come potrebbe. Quella riga stampa semplicemente l'username dell'autore, che evidentemente è vuota, per qualche motivo a me sconosciuto.
    Prova a eseguire la query manualmente, come ti ho detto nel post precedente e magari anche una
    Codice PHP:
    print_r($row_com);
    appena dentro al while e dimmi cosa succede, per capire se è un problema di PHP o di MySQL, perché, sarà l'ora, ma non riesco assolutamente a vedere l'errore.

    Edit: Ok, ora eseguila così com'è su PHPMyAdmin o in una pagina vuota se non usi PHPMyAdmin e vedi che valori hanno i due campi.
    Ultima modifica di orgxiiipu : 22-12-2012 alle ore 02.04.09

  15. #15
    Guest

    Predefinito

    scusa l'ignoranza ma come faccio a eseguirla manualmente da phpmyadmin??


    mettendogli print_r($row_com); stampa : Array ( [0] => wiiu [com_autore] => wiiu [1] => rtrtey [com_testo] => rtrtey ) rtrtey
    Ultima modifica di wiiu : 22-12-2012 alle ore 02.09.40

  16. #16
    Guest

    Predefinito

    Ok, non serve più che tu la esegua manualmente, ma nel caso tu ne abbia bisogno in futuro, andando in una tabella qualunque o selezionando il tuo database, tra le varie schede ce n'è una chiamata SQL (tra Struttura e Cerca), andando lì ti basta inserire la query e MySQL la eseguirà.

    Ok, la variabile è a posto considerando la print_r, quindi prova un po' a sostituire questo
    Codice PHP:
    echo $com_testo . "<br>";
    echo
    "Inserito da <b>". $com_autore . "</b>";
    con
    Codice PHP:
    echo $row_com['com_testo'] . "<br>";
    echo
    "Inserito da <b>". $row_com['com_autore'] . "</b>";
    Se così funziona dev'esserci qualche problema con stripslashes().

  17. #17
    Guest

    Predefinito

    così funzionaaaaaaaaaa

  18. #18
    Guest

    Predefinito

    A questo punto puoi fare così
    Codice PHP:
    $com_autore = $row_com['com_autore'];
    $com_testo = stripslashes($row_com['com_testo']);
    echo
    $com_testo . "<br>";
    echo
    "Inserito da <b>". $com_autore . "</b>";
    e dovrebbe funzionare. Poi normalmente un username non dovrebbe avere caratteri speciali quali l'apostrofo e le virgolette, quindi stripslashes() sull'autore non è essenziale, ma nel caso tu voglia farlo comunque (e stripslashes() si rifiuta proprio di funzionare) puoi usare str_replace().

  19. #19
    Guest

    Predefinito

    così non stampa più il testo xD se lo tengo come prima non va bene?


    scusa sbagliavo io funziona!! non so come ringraziarti!!!
    Ultima modifica di wiiu : 22-12-2012 alle ore 13.38.15

  20. #20
    Guest

    Predefinito

    Di nulla.

  21. #21
    Guest

    Predefinito

    a posto ;)
    Ultima modifica di wiiu : 22-12-2012 alle ore 14.27.05

  22. #22
    Guest

    Predefinito

    Se com_data è di tipo DATE (o DATETIME) va bene, ma quando la prendi con la SELECT la data ha il formato YYYY-MM-DD. Se vuoi un altro formato devi usare
    Codice PHP:
    $sql_com = "SELECT com_autore, com_testo, UNIX_TIMESTAMP(com_data) AS com_data FROM commenti1 WHERE com_art='$art_id'";
    e poi
    Codice PHP:
    echo "il " . date("d/m/Y", $com_data) . "<br>";
    così avrebbe il formato DD/MM/YYYY, ma puoi cambiare il formato (cioè "d/m/Y") seguendo le istruzioni del manuale (per esempio se com_data è di tipo DATETIME puoi anche mettere l'ora con "d/m/Y h:i:s" come formato).

Regole di scrittura

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