• User

    Nome utente collegato a una riga di testo

    Ciao a tutti, anche se scrivo per la prima volta mi sono iscritto qualche giorno fa. Devo ammettere che grazie alle vostre guide sono riuscito a implementare all'interno del mio sito alcune funzioni in php.

    Ora però sono arrivato a un ostacolo che non riesco a superare. Dopo aver creato una sezione privata del mio sito, ho creato una piccola chat in ajax e gli utenti iscritti possono inviare righe di testo.
    Il problema è che non riesco ad associare la riga di testo a quel determinato utente. Ecco il codice.

    <?
    $user='';
    $password='
    ';
    $host='';
    $db='
    ';
    ?>
    <?
    $testo=$_GET['testo']; //variabile che prende il contenuto testo della chat
    mysql_connect($host,$user,$password)or die("Inserisci i dati correttamente");
    mysql_select_db("$db")or die("Errore database");
    $prova=mysql_query("insert into messaggi(testo) values('$testo')");
    ?>
    <?
    mysql_connect($host,$user,$password)or die("Inserisci i dati correttamente");
    mysql_select_db("$db")or die("Errore database");
    $id=$_SESSION['login'];
    $sql="SELECT * FROM utenti WHERE utenti.id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
    $row=mysql_fetch_array($query);
    $prova=mysql_query("select * from messaggi order by id desc limit 15");
    while($array=mysql_fetch_array($prova)){
    echo"<b>Qui andrebbe il nome utente</b>: $array[testo]<br>"; }
    ?>

    Questo è quanto sono riuscito a elaborare, a meno errori di copiatura dal file, ho testato il codice ed apparentemente funziona.
    Infatti quando apro la chat, scrive regolarmente il testo. Ovviamente non stamperà il nome utente perché non sono riuscito a implementarlo.
    Il nome utente e il testo vengono da due diverse tabelle mysql.

    Qualcuno ha qualche dritta per aggiungere il nome utente?
    Vi ringrazio in anticipo


  • Consiglio Direttivo

    Ciao Lionel e bentrovato 😉

    Dato che hai implementato un'area privata immagino che non ti verrà difficile recuperare l'id utente di chi scrive, giusto? Sicuramente dalla sessione 😄

    Non devi far altro che aggiungere un altro campo alla tabella messaggi: id_user.
    E quindi variare lo script in questo modo:
    [php]$id_user=$_SESSION['id']; //sto dando per scontato che nella tua sessione sia presente l'id utente
    $testo=$_GET['testo'];
    ...........
    ...........
    $prova=mysql_query("insert into messaggi(testo,id_user) values('$testo','$id_user')");[/php]Questo per quanto riguarda la creazione del Record nella tabella.
    Invece per visualizzarlo dovrai recuperare anche l'id_user, oltre che il testo e quindi associare tramite una SELECT l'effettivo nome utente corrispondente a quell'id_user:
    [php]$sql="SELECT utenti.nome, messaggi.testo FROM utenti JOIN messaggi ON utenti.id = messaggi.id_user";
    $query=@mysql_query ($sql) or die (mysql_error());
    while($array=mysql_fetch_array($query)){
    echo"<b>$array['id']</b>: $array[testo]<br>"; }
    [/php]
    Penso così debba andare, facci sapere. :ciauz:


  • User

    Intanto ti ringrazio per la tua risposta celere. Ho seguito i tuoi consigli ma il risultato è un errore:

    Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/apache2-default/gestisci.php on line 23
    Nella prima parte non ha segnalato errori, ed è questa :

    <?
    $id=$_SESSION['id'];
    $testo=$_GET['testo'];
    mysql_connect($host,$user,$password)or die("non riesco a connettermi");
    mysql_select_db("$db")or die("non riesco selezionare il database");
    $prova=mysql_query("insert into messaggi(testo,id) values('$testo','$id')");
    ?>
    Ho cambiato il record id_user con il record presente nel mio database, cioè id.

    La seconda parte è questa:
    Aggiungo le tabelle mysql così ti fai un'idea di come sono strutturare:

    utenti: (id, user, pass, mail)
    messaggi: (id, utente, testo)
    Ora il codice:

    <?
    $sql="SELECT utenti.user, messaggi.testo FROM utenti JOIN messaggi ON utenti.id = messaggi.id";
    $query=@mysql_query($sql) or die (mysql_error());
    while($array=mysql_fetch_array($query)){
    echo"<br>$array['id']</br>: $array[testo]<br>"; } }
    ?>

    Come si può notare ho selezionato in utenti, il record user (che sarebbe il riferimento al tuo record 'nome').
    L'errore è relativo alla riga 23 cioè il ciclo while, ma immagino che l'errore risalga alla riga precedente del ciclo.


  • User Attivo

    Prova cosi:
    <?php
    $sql="SELECT utenti.user, messaggi.testo FROM utenti JOIN messaggi ON utenti.id = messaggi.id";
    $query=@mysql_query($sql) or die (mysql_error());
    while($array=mysql_fetch_array($query)){
    echo"<br>".$array['id']."</br>: ".$array['testo']."<br>"; } }
    ?>


  • User

    Prova cosi:
    <?php
    $sql="SELECT utenti.user, messaggi.testo FROM utenti JOIN messaggi ON utenti.id = messaggi.id";
    $query=@mysql_query($sql) or die (mysql_error());
    while($array=mysql_fetch_array($query)){
    echo"<br>".$array['id']."</br>: ".$array['testo']."<br>"; }
    ?>
    In questo modo il codice non presenta errori. Ma la chat smette di funzionare, non invia più neanche il testo.
    Facendo caso al database, ho notato che il database registra l'invio della stringa.


  • User Attivo

    Prova in questo modo:

                             <?
    

    $user='';
    $password='
    ';
    $host='';
    $db='
    ';
    ?>
    <?
    $testo=$_GET['testo']; //variabile che prende il contenuto testo della chat
    mysql_connect($host,$user,$password)or die("Inserisci i dati correttamente");
    mysql_select_db("$db")or die("Errore database");
    $prova=mysql_query("insert into messaggi(testo) values('$testo')");
    ?>
    <?
    $id=$_SESSION['login'];
    $sql="SELECT * FROM utenti WHERE utenti.id='$id'";
    $query=@mysql_query($sql) or die (mysql_error());
    $row=mysql_fetch_array($query);

    $sql="SELECT utenti.user, messaggi.testo FROM utenti JOIN messaggi ON utenti.id = messaggi.id";
    $query=@mysql_query($sql) or die (mysql_error());
    while($array=mysql_fetch_array($query)){
    echo"<br>".$array['id']."</br>: ".$array['testo']."<br>";
    }
    ?>


  • User

    Ho risolto, grazie a tutti, i vostri consigli mi sono tornati davvero preziosi.
    Alla fine il problema stava nel codice ajax che avevo sviluppato. In poche parole dopo aver seguito i vostri consigli non riusciva più a trovare i dati inviati tramite il form dei messaggi per colpa di una variabile imposta sul codice ajax. Infatti il database registrava tutto ma di fatto nelle pagine non veniva eseguito nulla...

    Allora mi sono detto visto che ora so come richiamare gli utenti e il testo, perché non creare una chat interamente in php?
    Ebbene, probabilmente con molta fortuna, tante prove e qualche guida trovata in giro per la rete e il forum, sono riuscito a implementare una chat in php.

    L'ho testata e funziona egregiamente. Quindi come sono stato aiutato, sono disponibile ad aiutare tutti coloro che hanno bisogno di creare una piccola chat.

    Grazie ancora!