• User Attivo

    creare una minichat o tagboard

    Salve a tutti...:)

    Vorrei sentire la vostra su una cosa che vorrei realizzare...

    Praticamente vorrei creare una piccola minichat o tagboard all interno di un sito...che sia accessibile solo agli utenti iscritti....
    Dovrebbe funzionare cosi'...
    Una volta fatto il login nel sito dovrebe comparire nella pagina index in un piccolo spazio questa minichat...
    Nella minichat nel momento che io scrivo e clicco su un pulsante invio dovrebbe comparire il nome con cui mi sono iscritto al sito linkato al profilo....cioè se qualcuno clicca sul nome va sul profilo...vabè credo che quest ultima coa nn sia difficile da fare...
    Vorrei poi dar la possibilità di poter inserire deglismile...faccine..nei messaggi che un utente invia...:)

    Come potrei cominciare per realizzare la cosa??

    Grazie a tutti:):wink3:


  • Consiglio Direttivo

    @carlitos1982 said:

    Praticamente vorrei creare una piccola minichat o tagboard all interno di un sito...che sia accessibile solo agli utenti iscritti....
    Dovrebbe funzionare cosi'...
    Una volta fatto il login nel sito dovrebe comparire nella pagina index in un piccolo spazio questa minichat...

    Beh...basta controllare che l'utente sia loggato e quindi controllo da effettuare sulla sessione/cookie che lo identifica 😉
    Un if ed è fatta 😉

    @carlitos1982 said:

    Nella minichat nel momento che io scrivo e clicco su un pulsante invio dovrebbe comparire il nome con cui mi sono iscritto al sito linkato al profilo....cioè se qualcuno clicca sul nome va sul profilo...
    dato che sicuramente salverai l'id dell'utente che posta, tramite quello ti costruisci dinamicamente il nome/link

    @carlitos1982 said:

    Vorrei poi dar la possibilità di poter inserire deglismile...faccine..nei messaggi che un utente invia...:)
    dipende da che strada vuoi intraprendere, o un semplice replace delle stringhe equivalenti all'emoticon...o un lavoro un po' più laborioso con tanto di pop-up e Js (per come avviene con l'editor di questo forum insomma 😉 )

    Questa dovrebbe essere proprio la base-base, poi potrebbe dipendere da dove va implementato 😉


  • ModSenior

    da considerare che se vuoi creare una vera e propria chat che quindi si aggiorni in automatico senza dover aggiornare manualmente la pagina, avviene un uso immenso di risorse...

    EDIT http://www.giorgiotave.it/forum/php-mysql/82112-progetto-mini-chat.html oliviero stava facendo una cosa del genere... non sò se hanno abbandonato l'idea oppure è in vacanza...


  • User Attivo

    Per quanto riguardo il controllo sulle sessioni per vedere sel utenete e loggato non e un problema....
    [PHP]
    <?
    //Apro la sessione e...
    session_start();
    // opto quindi per la visualizzazione ai solo iscritti
    if($_SESSION['logged']==1){
    //se si...
    ?> [/PHP]
    la minichat vorrei inserirla nella index.php richiamata dalla funzione require o include

    facendo un esempio...
    la pagina minichat.php la richiamo con un require nella index.php

    posso fare il tutto con una sola pagina o servono piu' pagine???Cioè sia la pagina che raccoglie il messaggio e quello che la stampa avideo possono esser su una sola pagina?
    cioè mi basta la sola pagina minichat.php?Per l aggiornamento vorrei aggiungere un refresh ogni 40 secondi...


  • Consiglio Direttivo

    @carlitos1982 said:

    posso fare il tutto con una sola pagina o servono piu' pagine???Cioè sia la pagina che raccoglie il messaggio e quello che la stampa avideo possono esser su una sola pagina?
    Si, puoi implementare se vuoi tutto nella stessa pagina.
    Per l aggiornamento vorrei aggiungere un refresh ogni 40 secondi...
    Metti tutto dentro un div e tramite un Js (per PHP dovresti aggiornare tutta la pagina) fai l'aggiornamento ogni tot secondi 😉


  • User Attivo

    @Samyorn said:

    Si, puoi implementare se vuoi tutto nella stessa pagina.

    Metti tutto dentro un div e tramite un Js (per PHP dovresti aggiornare tutta la pagina) fai l'aggiornamento ogni tot secondi 😉

    Ok...partiamo per gradi...
    Ho una tabella iscritti in cui ho il campo nick,aggoungo un altro campo messaggi?
    Cioe' il campo che raccoglierà e mostrerà a video ciò che l utente scrive..ok?


  • Consiglio Direttivo

    beh, no
    per i messaggi dovrai creare un tabella apposita con i seguenti campi:
    id (auto-increment), id_user, testo, data

    alla quale dovrai correlare un form che invii a questa tabella l'id dell'user che posta (hidden data), il testo che verrà inserito nella input box e la data del messaggio 😉


  • User Attivo

    @Samyorn said:

    beh, no
    per i messaggi dovrai creare un tabella apposita con i seguenti campi:
    id (auto-increment), id_user, testo, data

    alla quale dovrai correlare un form che invii a questa tabella l'id dell'user che posta (hidden data), il testo che verrà inserito nella input box e la data del messaggio 😉

    Ok...procedo con la creazione della tabella e il form....

    appena fatto posto il tutto...:)


  • User Attivo

    ok
    Ho creato la tabella cn trecampi

    id (auto increment) nick e testo,
    data nn l ho messo perchè nn voglio che esca....

    poi ho creato tre pagine

    questa e minichat.php
    [PHP]
    <?
    //Apro la sessione e...
    session_start();
    //verifico che dopo il login io abbia la chiave di sessione ad 1
    if($_SESSION['logged']==1)
    //se si...?>

    <html>

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>Minichat</title>
    </head>

    <body>

    <form method="POST" action="minichat2.php">
    <p><textarea rows="2" name="testochat" cols="36"></textarea><input type="submit" value="Invia" style="border-style: double; border-width: 3px"></p>
    </form>

    </body>

    </html>
    [/PHP]

    che punta a minichat2.php
    che sarebbe questa
    [PHP]
    <?
    //Apro la sessione e...
    session_start();
    //verifico che dopo il login io abbia la chiave di sessione ad 1
    if($_SESSION['logged']==1){
    //se si...

    //recupero i valori dal form minichat
    $iduser = $_SESSION[nickname];
    $testochat = $_POST['testochat'];

    //mi connetto al datase
    $link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
    //seleziono il database
    mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());
    //procedo ainserire i valori nei campi della tabella minichat
    $strsql="INSERT INTO minichat (id_user,testo)";
    $strsql.=" VALUES ('$iduser','$testochat')";

    $rs=@mysql_query("$strsql",$link) or die("Errore query database: " . mysql_error());
    //faccio un ciclo while
    while ($riga = mysql_fetch_array($rs)) {
    $str_nickname = $riga['nickname'];
    $str_testochat = $riga['testochat'];

    echo "<tr><td><font face="Comic Sans MS">$str_nickname</font></td><td>$str_testochat</td></tr>";
    }//qui chiudi il while
    }//qui chiudi l'IF
    else {
    //altrimenti...
    echo "Non sei loggato...";
    //annullo tutte le chiavi di sessioni se esistono
    session_unset();
    session_destroy();
    header("Location: login.htm");
    }
    ?>
    [/PHP]

    e poi minichat3 che sarebbe quella che stampa a video il tutto

    [PHP]

    <?
    //Apro la sessione e...
    session_start();
    // opto quindi per la visualizzazione ai solo iscritti
    if($_SESSION['logged']==1){
    //se si...
    ?> <div align="center">
    <font face="Franklin Gothic Medium" size="7" color="#008080">Minichat</font><table width="100%" border="2" cellspacing="0" height="35" bordercolor="#FF9999">
    <tr>
    <td align="left" valign="top" width="15%">
    <font face="Comic Sans MS" color="#0099FF"><b>Nick</b></font></td>
    <td align="left" valign="top" width="19%">
    <div align="center"><b><font size="4" face="Comic Sans MS" color="#0099FF">Messaggio</font></b></div>
    </td>
    <?
    //mi connetto al datase
    $link = mysql_connect("$db_host", "$db_database", "$db_username", "$db_password") or die("Errore connessione: ". mysql_error());
    //seleziono il database
    mysql_select_db('my_italiawebchat') or die("Errore apertura database: " . mysql_error());
    //seleziono i campi da visualizzare per singolo utente
    $strsql="SELECT id_user,testo FROM minichat ORDER BY id";

    $rs=@mysql_query("$strsql",$link) or die("Errore query database: " . mysql_error());
    //faccio un ciclo while
    while ($riga = mysql_fetch_array($rs)) {
    $str_nickname = $riga['id_user'];
    $str_testo = $riga['testo'];

    echo "<tr><td><font color="#0099FF" face="Comic Sans MS"><br><a href="profiloaltri.php?nickname=".$str_nickname.""><span style="text-decoration: none"><font color="##FF6600"><br>$str_nickname</a></td><td><font color="#0099FF" face="Comic Sans MS"></tr>";
    echo "$str_testo";
    }//qui chiudi il while
    }//qui chiudi l'IF
    else {
    //altrimenti...
    echo "Non sei loggato...";
    //annullo tutte le chiavi di sessioni se esistono
    session_unset();
    session_destroy();
    header("Location: login.htm");
    }
    ?>
    [/PHP]
    Funziona si....però c'è un problema....come ben si vede sono 3 pagine....
    Cioè per come ho pensato io di afre la chat nn va bene...

    Praticamente nella prima pagina cioè inq uella in cui scrivo il messaggio ...una volta cliccato su invia sempre nella stessa pagina dovrebbe apparire il contenuto di ciò che io ho fatto nella 3 pagina che ho creato...come posso fare per metterle assieme??


  • User Attivo

    Ho pensato di aggiungere un require nel primo file minichat1.php e richiamare il file che mostra il tutto avideo cioè minichat3.php....
    che nedite?


  • Consiglio Direttivo

    XD
    mi stavo chiedendo appunto perché hai fatto 3 file dato che volevi tutto in una pagina XD

    Allora: in index metti un semplicissimo if
    [php]<?php
    if (loggato)
    {
    include "minichat.php";
    }
    ?>
    [/php]il file minichat.php conterrà: inserimento, visualizzazione e form:
    (immagino che già nella index ci sia l'assegnazione della sessione).
    [php]<div id="minichat">
    <?php
    include "config.php"; // file di connessione al Db
    $id_user="";
    $text="";

    $id_user=$_SESSION['nickname'];
    $text=htmlentities($_POST['text']);

    if ((empty($text))== false) // se $text non è vuoto o nullo
    {
    $sql = "INSERT INTO minichat (id_user, testo) VALUES ('$id_user','$text')";
    $query= @mysql_query ($sql) or die (mysql_error());
    }

    $sql_select="SELECT id_user, testo FROM minichat ORDER BY id";
    $query_select= @mysql_query($sql_select) or die (mysql_error());
    ?>
    <table>
    <caption>Minichat</caption>
    <th colspan="2">Messaggi</th>
    <?
    while($row=mysql_fetch_array($query_select))
    {
    echo "<tr><td>".$row['id_user']."</td><td>".$row['testo']."</tr>";
    }
    ?>
    </table>
    <form action="index.php" name="chat" method="POST">
    <textarea rows="2" name="text" cols="36"></textarea>
    <input type="submit" value="Invia">
    </form>
    </div>[/php]non l'ho testato ma credo non dovrebbero esserci problemi 🙂
    Ovviamente puoi personalizzarlo per come preferisci 😉
    Ho messo l'essenziale 😉


  • User Attivo

    Sto testando la minichat....ma nn va...
    ho composta la pagina index.php cosi'
    [php]
    <?
    //Apro la sessione e...
    session_start();
    // opto quindi per la visualizzazione ai solo iscritti
    if($_SESSION['logged']==1){
    //se si...
    include "minichat.php";
    }
    ?>[/php]e fin qui' tutto bene...nella index.php la pagina minichat.php e visibile solo agli utenti loggati...

    la pagina minichat.php cosi'
    [php]
    <div id="minichat">
    <?
    //Apro la sessione e...
    session_start();
    //verifico che dopo il login io abbia la chiave di sessione ad 1
    if($_SESSION['logged']==1)
    //se si...?>
    <?
    include "config.php"; // file di connessione al Db
    $id_user="";
    $text="";

    $id_user=$_SESSION['nickname'];
    $text=htmlentities($_POST['text']);

    if ((empty($text))== false) // se $text non è vuoto o nullo
    {
    $sql = "INSERT INTO minichat (id_user, testo) VALUES ('$id_user','$text')";
    $query= @mysql_query ($sql) or die (mysql_error());
    }

    $sql_select="SELECT id_user, testo FROM minichat ORDER BY id";
    $query_select= @mysql_query($sql_select) or die (mysql_error());
    ?>
    <table>
    <caption>Minichat</caption>
    <th colspan="2">Messaggi</th>?>
    <?
    while($row=mysql_fetch_array($query_select))
    {
    echo "<tr><td>".$row['id_user']."</td><td>".$row['testo']."</tr>";
    }
    ?>
    </table>
    <form action="index.php" name="chat" method="POST">
    <textarea rows="2" name="text" cols="36"></textarea>
    <input type="submit" value="Invia">
    </form>
    </div>[/php]qui' però succede una strana...

    a video mi stampa la parte di codice di php che va da
    include "config.php"; // file di connessione al Db $id_user=""; $text=""; $id_user=$_SESSION['nickname']; $text=htmlentities($_POST['text']); if ((empty($text))== false) // se $text non è vuoto o nullo { $sql = "INSERT INTO minichat (id_user, testo) VALUES ('$id_user','$text')"; $query= @mysql_query ($sql) or die (mysql_error()); } $sql_select="SELECT id_user, testo FROM minichat ORDER BY id"; $query_select= @mysql_query($sql_select) or die (mysql_error()); ?>

    e sotto questa parte di codice compare la textarea col tasto invio...
    in cui ha se provo a scrivere qualcosa nn esce nulla.....:(:bho:
    ci sto provandoo a risolvere ma nn riesco:x


  • ModSenior

    prova a sostituire <? con <?php


  • User Attivo

    @Thedarkita said:

    prova a sostituire <? con <?php
    Ho risolto Grazie:)

    Ciao thedarkita:) mi ricordo di te...mi hai dato una mano in passato in molte situazioni:);)
    mi fa piacere rivederti:wink3:

    Ora la chat funziona....però....vorrei far si che...una volta raggiunta la soglia dei 10 messaggi inviati la pagina nn deve scendere piu'.....sennò va ad occuparmi tutto lo spazio della pagina:(
    Praticamente raggiunti i 10 mess..dovrebbe ridimensionarsi e partire da 0....spero di esser stato chiaro°_°


  • ModSenior

    Puoi usare LIMIT nella query e far msotrare solo gli ultimi 10 messaggi facendo cosi:
    SELECT id_user, testo FROM minichat ORDER BY id LIMIT 10

    😉


  • User Attivo

    @Thedarkita said:

    Puoi usare LIMIT nella query e far msotrare solo gli ultimi 10 messaggi facendo cosi:
    SELECT id_user, testo FROM minichat ORDER BY id LIMIT 10

    😉

    Si..:)
    ho fatto cosi'...però ora succede che raggiunti i 10 messaggi inviati non mi mostra piu' a video quelli successivi....cioè se scrivo dopo i 10 mess inviati nn leggo piu' nulla...:(


  • ModSenior

    Dovresti ordinarli in modo decrescente (ORDER BY id DESC)
    Però hai i primi in cima, se devi mostrarli alla fine, ti basta generare un array e stamparli al contrario


  • User Attivo

    @Thedarkita said:

    Dovresti ordinarli in modo decrescente (ORDER BY id DESC)
    Però hai i primi in cima, se devi mostrarli alla fine, ti basta generare un array e stamparli al contrario
    Ok...si esatto escono in cima...:)
    però va bene cosi' dai..;)
    Ora provo a far in modo di inserirci delle smile.....:)
    se ho problemi posto..:)


  • ModSenior

    ok

    buon lavoro 😉


  • User Attivo

    @Thedarkita said:

    ok

    buon lavoro 😉
    Grazie:)
    Allora...ho inserito delle faccine..questo e lo script
    [PHP]
    <div id="minichat">
    <?
    //Apro la sessione e...
    session_start();
    //verifico che dopo il login io abbia la chiave di sessione ad 1
    if($_SESSION['logged']==1)
    //se si...?>
    <?
    include "config.php"; // file di connessione al Db
    $id_user="";
    $text="";

    $id_user=$_SESSION['nickname'];
    $text=htmlentities($_POST['text']);

    if ((empty($text))== false) // se $text non è vuoto o nullo
    {
    $sql = "INSERT INTO minichat (id_user, testo) VALUES ('$id_user','$text')";
    $query= @mysql_query ($sql) or die (mysql_error());
    }

    $sql_select="SELECT id_user, testo FROM minichat ORDER BY id DESC LIMIT 10";
    $query_select= @mysql_query($sql_select) or die (mysql_error());
    ?>
    <table>
    <caption>Minichat</caption>
    <th colspan="2">Messaggi</th>
    <?
    while($row=mysql_fetch_array($query_select))
    {
    echo "<tr><td>".$row['id_user']."</td><td>".$row['testo']."</tr>";
    }
    ?>
    </table>
    <form action="index.php" name="chat" method="POST">
    <textarea rows="2" name="text" cols="36"></textarea>
    <input type="submit" value="Invia"><br>
    <img src="faccine/x.gif" OnClick="document.chat.text.value+='x'">
    <img src="faccine/faccia.gif" OnClick="document.chat.text.value+='°_°'">

    </form>
    </div>[/PHP]
    Mi funziona...però vorrei che nel campo textarea al momento del clik sulla faccina apparisse la faccina stessa invece del valore a lettera ...:(
    Come potrei fare..?