• User Newbie

    Form con dati troppo lunghi

    Salve a tutti.
    Sto facendo uno script per poter scrivere su file di testo tramite form.
    il mio script va abbastanza bene.... l'unico problema me lo da quando nel form inserisco dati troppo lunghi.
    In pratica quando clicco sul pulsante "invia" non mi fa niente e i form rimangono li. Se però i miei dati non sono relativamente lunghi.... non ho problemi.
    Come faccio? ve lo posto

    index.html :
    <html>
    <head>
    <title>Pannello di controllo</title>
    <link rel="stylesheet" href="../stile.css" type="text/css">
    </head>
    <body>
    <center>
    <table width=600>
    <tr><td align="center" background="../sfondo.jpg"><font color="#ffffff" size="5"><b>:: PANNELLO DI CONTROLLO ::</b></font></td></tr>
    <tr><td>
    <form method=get action="verifica.php">
    <br><b>TITOLO</b><br>
    <input type="text" name="titolo" size="40">
    <br><b><i>Anteprima</i></b><br>
    <input type="text" name="anteprima" size="80">
    <p>Editoriale<br>
    <textarea name="articolo" rows="15" cols="80"></textarea> </p>
    <br>Immagine<br>
    <input type="text" name="immagine" size="20">
    <br>
    <input type="submit" value="Invia">
    <input type="reset" value="Cancella">
    </form>
    </dt></tr>
    <tr><td><center>:: <a href="../admin/prova.html">Home</a> ::</center></td></tr>
    <tr><td height="10" width="400" bgcolor="#cccccc"> </td></tr>
    </table>
    </body>
    </html>

    verifica.php :
    <?php
    echo "<center>";
    echo "Ciao ecco i risultati del tuo inserimento:";
    $errore= false;
    If((!$_GET['titolo']) || (!$_GET['anteprima']) || (!$_GET['articolo']) || (!$_GET['immagine'])) {
    #controllo che nessun campo sia vuoto
    $errore=true;
    echo "Non hai compilato tutti i campi <a href="uno.html">torna indietro</a>";
    exit;
    }
    else {
    $_GET['titolo'] = stripslashes($_GET['titolo']);
    $_GET['anteprima'] = stripslashes($_GET['anteprima']);
    $_GET['articolo'] = stripslashes($_GET['articolo']);
    $_GET['titolo'] = str_replace("\n", "<br>", $_GET['titolo']);
    $_GET['anteprima'] = str_replace("\n", "<br>", $_GET['anteprima']);
    $_GET['articolo'] = str_replace("\n", "<br>", $_GET['articolo']);
    }
    che il file sia accessibile
    if (!$apri = fopen ("file.txt","a+")) {
    $errore=true;
    echo "non posso aprire il file";
    }else{
    $apriw = fopen ("file.txt","a+");

    Sul file scrivo titolo e vado a capo,l'anteprima e vado a capo

    l'articolo e vado a capo e il nome dell'immagine

    fputs($apriw,$_GET['titolo']."\n");
    fputs($apriw,$_GET['anteprima']."\n");
    fputs($apriw,$_GET['articolo']."\n");
    fputs($apriw,$_GET['immagine']."\n");
    #chiudo il file
    fclose($apriw);
    }
    #se c'e l'errore mi dice di inserirli di nuovo altrimenti mi fa leggere gli annunci
    if($errore){
    echo"<br> Riinseriscili per favore<br>";
    }
    else{
    echo "<br> <a href="news.php">leggi gli annunci</a>";
    }
    ?>

    news.php :
    <?php
    echo "Ecco i vostri annunci<br>";
    if (!$apri = fopen("file.txt","r")){
    echo "Non posso aprire il file";
    }else{
    #Se il file si può leggere allora con un ciclo while

    leggo tutte le righe del mio file

    while(!feof($apri)){
    #memorizza gli annunci in leggo che adesso è un vettore
    $leggo["titolo"][] = fgets($apri,4096);
    $leggo["anteprima"][] = fgets($apri,4096);
    $leggo["articolo"][] = fgets($apri,4096);
    $leggo["immagine"][] = fgets($apri,4096);
    }

    Conta il numero di annunci

    $numero=count($leggo["titolo"])-1;
    #fa il ciclo for al contrario dall'ultimo al primo
    for($i=$numero-1;$i>=$numero-5;--$i)
    {
    echo " <table><tr><td bgcolor=#0392e0><h3><font color=#ffffff>".$leggo["titolo"]."</font></h3></td></tr>";
    echo ' <tr><td><a href="annunci.php?number='.$i.'">'.$leggo["anteprima"]
    .'</a></td></tr></table>';
    }
    }
    fclose($apri);
    ?>

    All'inizio pensavo che il problema fosse la funzione gets che legge massimo 4096 byte.... però, appunto LEGGE!! io invece non riesco proprio a scrivere dati lunghi


  • Super User

    l'array $_GET contiene le variabili con lo stesso nome dei controlli del form che ha passato i dati. Questi dati però vengono passati sulla querystring che ha una lunghezza limitata.
    Quindi probabilmente il tuo problema sta proprio nel fatto che usi il metodo get per passare i dati.