Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [chat_php] accorgimenti per migliorare funzionalità.

    Buongiorno a tutti,

    Ho da poco scoperto questo sito (e questo forum) e devo ammettere che sta già diventando la mia fonte di conoscenza personale per quanto riguarda i vari linguaggi di programmazione, specialmente l'html e il php, con i quali mi sto cimentando da non molto tempo.

    Andando a descrivere il problema, mi è stato chiesto di realizzare una piccola chat in php.
    Ce ne sono molte già fatte qui su html.it ma ho deciso di prendere una "base" già costruita e molto "cruda" per poi modificarla a mio piacimento (che è un po' quello che si fa di solito, poi).

    La chat di per sè è molto semplice:

    - Registrazione e Login utente. (database MySql)
    - Pagina principale divisa in 2 iFrame: uno per visualizzare e uno per inserire.

    premetto che è funzionante ma vorrei inserire appunto alcuni accorgimenti per migliorarne il funzionamento:

    - Togliere l'auto refresh dell' iFrame dove vengono visualizzati i record.

    normalmente non lo toglierei ma mi è stato inoltre chiesto di far partire un messaggio acustico quando viene inserito un nuovo record da parte di un utente.

    inserendo un oggeto audio tramite il tag <object> ottengo il risultato sperato ma il problema è che devo fare un refresh del frame di visualizzazione perchè altrimenti finchè l'utente non aggiorna la pagina, il messaggio non compare sullo schermo (e quindi neanche il suono), rendendo inutile l'inserimento di questo file audio.

    se non è chiaro provo a spiegarmi così:

    Gli utenti sono loggati e hanno di fronte la pagina della chat con i 2 iFrame. Uno scrive e quando la pagina fa autorefresh tutti leggono i nuovi messaggi inseriti in quell'arco di tempo.
    Se inserisco il segnale acustico lasciando l'autorefresh, ad ogni refresh sentiranno il segnale ma magari nessuno ha scritto nulla e quindi il segnale è inutile. Se tolgo il refresh l'utente deve aggiornare manualmente la pagina e siamo da capo.
    Aggiungendo un refresh dopo aver inserito il nuovo record mi permette di sentire il suono sulla mia macchina, ma gli altri dovranno comunque fare refresh.

    Spero di essermi spiegato abbastanza bene, insomma, inserisco il codice del frame di visualizzazione e inserimento in db:


    chat_visualizza.php

    <?


    session_start();

    include('connessione.php');



    ?>



    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />



    <html xmlns="http://www.w3.org/1999/xhtml">



    <head>

    <meta http-equiv="refresh" content="300, chat_visualizza.php">

    <link rel="stylesheet" type="text/css" href="css/style.css">



    <title>Visualizzazione chat</title>

    </head>



    <body>



    <font face = "verdana" size = "2">



    <?



    $query = "SELECT * FROM chat ORDER BY data DESC ";

    $result = mysql_query($query) or die(mysql_error());



    for ($i = 1; $i <30; $i++)

    {



    $riga = mysql_fetch_array($result);



    $nome = stripslashes($riga['nick']);

    $mss = stripslashes($riga['messaggio']);

    echo ($riga['data']." - "."".$nome."".": ".$mss."

    ");



    }



    mysql_close($db);



    ?>



    </font>



    </body>



    </html>

    chat_salva.php

    <html>

    <head>

    <link rel="stylesheet" type="text/css" href="css/style.css">

    </head>

    <body>





    <?



    echo(date_default_timezone_set("Europe/Paris"));



    session_start();

    include('connessione.php');



    if (!empty ($_POST['azione']) )

    {

    if (isSet($_POST['azione']) && $_SESSION['nick'] != "")

    {
    $nome = $_SESSION['nick'];

    $attuale = date("Y-m-d H:i:s");

    $mss = htmlspecialchars($_POST['azione']);



    $query ="INSERT INTO chat SET nick = '$nome', messaggio = '$mss', data = '$attuale' ";

    mysql_query($query) or die(mysql_error());



    }



    }



    mysql_close($db);

    header("Location: chat_visualizza.php", true);





    ?>

    </body>

    </html>
    Già che ci sono, ci sarebbe un'altra cosina che dovrei mettere a posto (anche se secondaria).
    Una volta che l'utente si slogga o chiude il browser, la session decade ma quando torna nel frame di visualizzazione vengono comunque visualizzati gli ultimi x record. C'è un modo per "pulire" il frame e far si che al prosimo login si trovi la chat pulita?

    Beh insomma, spero di non essermi dilungato troppo per il primo Topic qui, per qualsiasi chiarimento non esistate ovviamente.

    In attesa, vi saluto. Ciao!
    "la mia luce brilla come una stella nella notte più buia"

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    devi usare ajax (o un framework tipo jQuery), mi sa
    leggiti qualche guida online

  3. #3
    Ah diamine, era ciò che temevo.

    Ti riferisci ad entrambe le problematiche?

    Purroppo non ne so quasi nulla di Java, io provo a darci un'occhiata e vediamo comunque. Grazie
    "la mia luce brilla come una stella nella notte più buia"

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    Originariamente inviato da Carnival*

    Ti riferisci ad entrambe le problematiche?
    credo di si va provato

    Originariamente inviato da Carnival*
    Purroppo non ne so quasi nulla di Java, io provo a darci un'occhiata e vediamo comunque. Grazie
    ajax è la possibilità di fare rischieste asincrone e modificare le pagine senza refresh con "javascript" che non è java. Sono due cose ben distinte

  5. #5
    Rianimo questo vecchio thread solo per una cosina veloce.

    Alla fine me la sono cavata con i problemi indicati sopra, ora però ho bisogno di un ulteriore consiglio:

    Nell'iframe di visualizzazione, creando una query per visualizzare i record dall'alto verso il basso e non viceversa, al refresh del frame ovviamente la barra torna alla posizione di partenza.
    E' possibile con PHP dire alla barra di scorrimento di settarsi "bottom" al refresh?

    Altrimenti lascio la query com'era prima e la chat funziona in ogni caso, è solo ua cosina in più che mi è stata richiesta..

    Grazie!
    "la mia luce brilla come una stella nella notte più buia"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.