• User

    Impedire l' invio multiplo dei messaggi con il refresh

    Come dal titolo, nella mia chat in PHP/MYSQL quando invio un messaggio prima di tutto il primo messaggio che invio non lo stampa in output, però appena faccio il refresh lo leggo, poi successivamente quando scrivo gli altri sempre di un messaggio indietro và...perchè manca un refresh automatico. E seconda cosa quando aggiorno la pagina con F5 il messaggio viene rinviato...come posso evitare questo e fare un refresh automatico? Ho provato con la funzione ```
    <meta http-equiv="refresh" content="5">


  • ModSenior

    Ciao ralph007,
    la soluzione migliore è usare ajax, sul sito jquery trovi esempi base per utilizzare ajax facilmente e non credo avrai problemi a capirli. In caso basta chiedere nel forum, indicando dove hai problemi e troverai sicuramente qualcuno che ti aiuterà. 🙂
    Altrimenti metti in una variabile di sessione l'ultimo messaggio, e fai un controllo impedendo il reinvio dell'ultimo, anche se la soluzione in ajax è a mio avviso migliore.


  • User

    oppure ti fai un redirect in php subito dopo aver inserito il messaggio

    [php]
    header('Location: ritorna alla pagina precedente della chat');
    [/php]


  • User

    Ho provato non funziona! Comunque vi posto la chat! Non riesco..sono giorni e giorni che cerco su internet, ma non riesco... 😞

    ecco la chat..provatela...

    chat.php

    <?php include 'db.php';
    session_start(); 
    $nick = htmlspecialchars($_POST['nick']);
    if($nick != "Nick"){
    $_SESSION['Nick'] = $nick;
    }
    ?>
    <html>
    <head> 
        <title>Chat</title>
    <body>
    <br><br><center><table style="background-color: blue; height: 100px; width: 475px;"
    cellpadding="2" cellspacing="2">
    </td>
    </table>
    <tr>
    <table
    style="background-color: white; height: 500px; width: 475px;"
    id="tabella" align="center" border="0">
    <tbody>
    <tr>
    <td style="font-size: 15px; width: 616px;" valign="top"></script>
    <div
    style="overflow: auto; margin-left: 0px; height: 400px; width: 450px;">
    <?php
    
    if(isset($_POST['nick']) && !empty($_POST['nick']) ){
     $_SESSION['nick'] = htmlentities(addslashes($_POST['nick']));
    }
    if(isset($_SESSION['nick'])){
    
    $query =  mysql_query("SELECT * FROM `chat` ORDER BY `time` DESC");
    
    while($result = mysql_fetch_array($query)) {
    
    print "<b><font color='blue'>".$result['nick']."</font>: </b> ".$result['post']." <br>";
    }
    }
    ?>
    </div>
    </td>
    <?php print  htmlspecialchars($_SESSION['nick']); ?>;
    </div>
    </td> 
    </tr>
    </div>
    <tr>
    <td style="border-color: black; width: 616px;" height="25">
    <form action="" method="post"
    style="margin: 0px; background-color: green; height: 35px; width: 400px;">
    <input
    style="border-style: solid; width: 100px; background-color: white;"
    name="testo"><input name="utente"
    value="<?php print  htmlspecialchars($_SESSION['nick']); ?>;"
    type="hidden">
    <input name="submit" value="INVIA"
    style="border-style: solid; border-color: black; background-color: black; color: white;"
    type="submit"></form>
    </tr>
    </tbody>
    </table>
    <table
    <?php if(!empty($_POST['testo']) && !empty($_POST['utente'])) {
    $text = mysql_real_escape_string( htmlentities( stripslashes( $_POST['testo'] )));
    $utente = mysql_real_escape_string( htmlentities( stripslashes( $_POST['utente'] )));
    $text=stripslashes($text);
    
    mysql_query("INSERT INTO `chat` (`time` ,`nick` , `post`  
    )VALUES (
    NOW( ), '{$utente}', '{$text}');");
    }
    ?>
    

    db.php

    <?php
    /* CONNESSIONE AL DATABASE */
    
    
    $mysql['host'] = "localhost";
    $mysql['user'] = "ralph007"";
    $mysql['pass'] = "";
    $database = "my_ralph007";
    mysql_connect($mysql['host'], $mysql['user'], $mysql['pass']) or die(mysql_error());
    mysql_select_db($database) or die(mysql_error());
    $time_refresh = 0;
    ?>
    

  • User

    che errore ti da il redirect scusa??

    se è un errore tipo Headers alredy sent

    ti basta posizionare un ob_start(); all'inizio pagina

    il redirect deve funzionare perchè ti reindirizza alla pagina della chat come un refresh e ti fa visualizzare i dati correttamente dall'ultimo inserito oppure
    quando inserisci una nuova risposta la simuli tu prelevando i dati recuperati dal form tanto sicuramente sarà l'ultimo messaggio evitando anche il refresh.

    Spero mi sia spiegato bene XD


  • User

    ma è brutto da vedere...


  • User

    @ldgweb said:

    che errore ti da il redirect scusa??

    se è un errore tipo Headers alredy sent

    ti basta posizionare un ob_start(); all'inizio pagina

    il redirect deve funzionare perchè ti reindirizza alla pagina della chat come un refresh e ti fa visualizzare i dati correttamente dall'ultimo inserito oppure
    quando inserisci una nuova risposta la simuli tu prelevando i dati recuperati dal form tanto sicuramente sarà l'ultimo messaggio evitando anche il refresh.

    Spero mi sia spiegato bene XD

    GRAZIE FUNZIONA PERFETTAMENTE 😛 :bigsmile:


  • User

    Vabbè comunque se gli altri utenti scrivono i messaggi io nn li vedo se nn aggiorno..funziona solo con i miei messaggi..quindi non mi serve a nulla..