• User Newbie

    problema POSTDATA

    ciao a tutti, sono nuovo del forum 🙂

    ho un problema con un guestbook che ho realizzato in php.

    quando un visitatore invia un messaggio, esso compare immediatamente nella pagina del guestbook. però se lo stesso visitatore esegue un refresh della pagina, compare il seguente messaggio:
    "la pagina che si sta cercando di vedere contiene POSTDATA, se si riinviano i dati, qualsiasi azione che hai effettuato sarà ripetuta."

    se il visitatore preme ok, il suo messaggio si duplica, se lo rifà si triplica, ecc...

    come lo risolvo questo bug? avete qualche consiglio? (in linguaggio non troppo complesso, vi prego 😄 ... programmo da poco.. )


  • Super User

    @knoxville said:

    ciao a tutti, sono nuovo del forum 🙂

    ho un problema con un guestbook che ho realizzato in php.

    quando un visitatore invia un messaggio, esso compare immediatamente nella pagina del guestbook. però se lo stesso visitatore esegue un refresh della pagina, compare il seguente messaggio:
    "la pagina che si sta cercando di vedere contiene POSTDATA, se si riinviano i dati, qualsiasi azione che hai effettuato sarà ripetuta."

    se il visitatore preme ok, il suo messaggio si duplica, se lo rifà si triplica, ecc...

    come lo risolvo questo bug? avete qualche consiglio? (in linguaggio non troppo complesso, vi prego 😄 ... programmo da poco.. )

    Dimmi come è articolato il tuo guestbook in fatto di pagine e dimmi il loro scopo... Ho capito il tuo problema ma mi devi spiegare meglio per avere una risposta soddisfacente 😄


  • User Newbie

    ecco le parti in php della pagina:

     <?php
    /* Inserimento messaggio nel database */
    if &#40;trim&#40;$_POST&#91;"Nome"&#93;&#41; != ""&#41;
    &#123;
    $sql = "INSERT INTO `MarinelliGuestbook` VALUES &#40;";
    $sql .= "'" . $_POST&#91;"Nome"&#93; . "',";
    $sql .= "'" . $_POST&#91;"Messaggio"&#93; . "',";
    $sql .= "''&#41;";
    mysql_query&#40;$sql&#41;
    or die&#40;"**Query \"INSERT INTO\" failed**"&#41;;
    &#125;
    
    /* caricamento messaggi e suddivisione in pagine */
    
    if &#40;$DA != 0&#41;
    &#123;
    $result = mysql_query&#40;"SELECT Nome,Messaggio FROM `MarinelliGuestbook` ORDER BY ID desc LIMIT $DA,50"&#41;
    //$result = mysql_query&#40;"SELECT Nome,Messaggio FROM `MarinelliGuestbook` ORDER BY ID desc LIMIT $DA,$A"&#41;
    or die&#40;"**Query failed**"&#41;;
    &#125;
    else
    &#123;
    $result = mysql_query&#40;"SELECT Nome,Messaggio FROM `MarinelliGuestbook` ORDER BY ID desc LIMIT 0,50"&#41;
    or die&#40;"**Query failed**"&#41;;
    &#125;
    
    for &#40;$i = 1; $i < $numero_pagine+1; ++$i&#41;
    &#123;
    $da = 0 + $a;
    $a = $da + 50;
    echo "<a href=\"http://www.carlosmarinelli.it/guestbook.php?DA=$da&A=$a\">" . $i . "</a> ";
    &#125;
    
    echo "**";
    
    if &#40;$DA == 0&#41;
    echo "
    da 1 a 50 ";
    else
    &#123;
    echo "
    da " . $DA;
    echo " a " . $A . " ";
    &#125;
    ?>
    
    
    <?php
    
    /* Stampa dei messaggi presenti nel database */
    print "<table border=\"1\" cellpadding=\"1\" cellspacing=\"0\" width=\"100%\" bordercolorlight=\"#910000\" bordercolordark=\"#E0E6E6\">";
    while &#40;$line = mysql_fetch_array&#40;$result, MYSQL_ASSOC&#41;&#41;
    &#123;
    print "<tr>";
    print "<td width=\"15%\"><font size=\"2\" face=\"Verdana\">**" . $line&#91;"Nome"&#93; . "</font>**</td>\n";
    print "<td width=\"85%\"><font size=\"2\" face=\"Verdana\">" . $line&#91;"Messaggio"&#93; . "</font></td>\n";
    print "</tr>";
    &#125;
    print"</table>"
    ?>
    
    
    
    <h2><font face="Verdana" size="3" color="#910000">Lascia
    un messaggio nel guestbook di Marinelli!</font></h2>
    <form method="POST" action="guestbook.php">
    <div align="center">
    <table border="0" cellpadding="2" cellspacing="0" width="80%">
    <tr>
    <td width="23%">
    **<font face="Verdana" size="2">Nome</font>**</td>
    <td width="77%">
    <font face="Verdana" size="2"><input type="text" name="Nome" size="41"></font></td>
    </tr>
    <tr>
    <td width="23%">
    **<font face="Verdana" size="2">Messaggio</font>**</td>
    <td width="77%">
    <font face="Verdana" size="2"><textarea rows="3" name="Messaggio" cols="31"></textarea></font></td>
    </tr>
    <tr>
    <td width="23%">
    </td>
    <td width="77%">
    <p align="center">
    <input type="submit" value="Invia" name="B1">
    </td>
    </table>
    </div>
    </form>
    
    

  • Super User

    @knoxville said:

    ecco le parti in php della pagina:

    <?php
    /* Inserimento messaggio nel database */
    if &#40;trim&#40;$_POST&#91;"Nome"&#93;&#41; != ""&#41;
    &#123;
    $sql = "INSERT INTO `MarinelliGuestbook` VALUES &#40;";
    $sql .= "'" . $_POST&#91;"Nome"&#93; . "',";
    $sql .= "'" . $_POST&#91;"Messaggio"&#93; . "',";
    $sql .= "''&#41;";
    mysql_query&#40;$sql&#41;
    or die&#40;"**Query \"INSERT INTO\" failed**"&#41;;
    &#125;
    
    /* caricamento messaggi e suddivisione in pagine */
    
    if &#40;$DA != 0&#41;
    &#123;
    $result = mysql_query&#40;"SELECT Nome,Messaggio FROM `MarinelliGuestbook` ORDER BY ID desc LIMIT $DA,50"&#41;
    //$result = mysql_query&#40;"SELECT Nome,Messaggio FROM `MarinelliGuestbook` ORDER BY ID desc LIMIT $DA,$A"&#41;
    or die&#40;"**Query failed**"&#41;;
    &#125;
    else
    &#123;
    $result = mysql_query&#40;"SELECT Nome,Messaggio FROM `MarinelliGuestbook` ORDER BY ID desc LIMIT 0,50"&#41;
    or die&#40;"**Query failed**"&#41;;
    &#125;
    
    for &#40;$i = 1; $i < $numero_pagine+1; ++$i&#41;
    &#123;
    $da = 0 + $a;
    $a = $da + 50;
    echo "<a href=\"http://www.carlosmarinelli.it/guestbook.php?DA=$da&A=$a\">" . $i . "</a> ";
    &#125;
    
    echo "**";
    
    if &#40;$DA == 0&#41;
    echo "
    

    da 1 a 50 ";

    else
    {
    echo "
    da " . $DA;
    echo " a " . $A . " ";
    }
    ?>

    <?php

    /* Stampa dei messaggi presenti nel database */
    print "<table border="1" cellpadding="1" cellspacing="0" width="100%" bordercolorlight="#910000" bordercolordark="#E0E6E6">";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
    {
    print "<tr>";
    print "<td width="15%"><font size="2" face="Verdana">" . $line["Nome"] . "</font></td>\n";
    print "<td width="85%"><font size="2" face="Verdana">" . $line["Messaggio"] . "</font></td>\n";
    print "</tr>";
    }
    print"</table>"
    ?>

    <h2><font face="Verdana" size="3" color="#910000">Lascia
    un messaggio nel guestbook di Marinelli!</font></h2>
    <form method="POST" action="guestbook.php">
    <div align="center">
    <table border="0" cellpadding="2" cellspacing="0" width="80%">
    <tr>
    <td width="23%">
    <font face="Verdana" size="2">Nome</font></td>
    <td width="77%">
    <font face="Verdana" size="2"><input type="text" name="Nome" size="41"></font></td>
    </tr>
    <tr>
    <td width="23%">
    <font face="Verdana" size="2">Messaggio</font></td>
    <td width="77%">
    <font face="Verdana" size="2"><textarea rows="3" name="Messaggio" cols="31"></textarea></font></td>
    </tr>
    <tr>
    <td width="23%">
    </td>
    <td width="77%">
    <p align="center">
    <input type="submit" value="Invia" name="B1">
    </td>
    </table>
    </div>
    </form>

    quindi fai tutto su una pagina... ciò non è molto conveniente:

    1. Hai il problema con POST ed il refresh
    2. A livello di codice non è che ci si capisca molto...

    Ti conviene invece usare 3 files:
    in uno: visualizzi i messaggi e fai la paginazione dei dati
    nel secondo: c'è il form per l'invio del messaggio
    nel terzo: ricevi i dati dal form, li organizzi ( levi slashes o ' di troppo, inserisci le faccine ) ed infine mandi il risultato a MySQL