Visualizzazione risultati 1 fino 7 di 7

Discussione: evitare il re-upload dati con aggiornamento pagina

  1. #1
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito evitare il re-upload dati con aggiornamento pagina

    Ciao

    Ho una semplice pagina in html e php per caricare immagine e relativi dati (questi ultimi in una tabella del database).

    Funziona ma mi sono reso conto che aggiornando la pagina del browser o semplicemente ritornando alla stessa da un'altra pagina vengono di nuovo inviati i dati e caricata la stessa immagine. In pratica l'operazione viene ripetuta.

    Come si può evitare che ciò accada?

    Grazie

  2. #2
    Guest

    Predefinito

    Potresti controllare che nella tabella del database non ci siano dei dati ripetuti. Per esempio se nella tabella hai un campo "Nome" che richiedi di inviare tramite il form di upload, potresti controllare che il nome inviato non sia già presente in un altro record. Per farlo potresti impostare il campo "Nome" come UNIQUE, in modo da non dover fare una query di controllo ad ogni upload. Poi, ovviamente, tutto dipende da come hai strutturato la tabella.

  3. #3
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da RigheDiCodice Visualizza messaggio
    Potresti controllare che nella tabella del database non ci siano dei dati ripetuti. Per esempio se nella tabella hai un campo "Nome" che richiedi di inviare tramite il form di upload, potresti controllare che il nome inviato non sia già presente in un altro record. Per farlo potresti impostare il campo "Nome" come UNIQUE, in modo da non dover fare una query di controllo ad ogni upload. Poi, ovviamente, tutto dipende da come hai strutturato la tabella.

    Non credo che funzionerebbe.

    Il nome dell'immagine (anche della stessa) cambia perchè aggiungo al nome dell'immagine la data di upload (per evitare che immagini differenti con lo stesso nome possano essere confuse e sovrascritte).

    Soluzioni alternative?

  4. #4
    Guest

    Predefinito

    Quando fai l'upload setti una variabile (tipo boleana) a 1,all inizio del inserimento dei dati verifichi se questa variabile è uguale o diversa da 1.
    Se è diversa vuol dire che non sei già passato per l'upload
    Se è uguale vuol dire che hai fatto l'upload e quindi ingnori la richiesta ;)

    Magari fai con una variabile di sessione che poi si risetta a 0 quando vai su un altra pagina tipo la home o una pagina verso comunque fai un reindirizzamento e che è sicuro che la gente ci vada.

    byee fammi sapere se ti sono stato "utile " ;)

  5. #5
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    Citazione Originalmente inviato da pxy Visualizza messaggio
    Quando fai l'upload setti una variabile (tipo boleana) a 1,all inizio del inserimento dei dati verifichi se questa variabile è uguale o diversa da 1.
    Se è diversa vuol dire che non sei già passato per l'upload
    Se è uguale vuol dire che hai fatto l'upload e quindi ingnori la richiesta ;)

    Magari fai con una variabile di sessione che poi si risetta a 0 quando vai su un altra pagina tipo la home o una pagina verso comunque fai un reindirizzamento e che è sicuro che la gente ci vada.

    byee fammi sapere se ti sono stato "utile " ;)
    scusami la pagina è questa:

    Codice PHP:
    <?php
    session_start
    ();

    ..............................





    <
    b>Inserisci un titolo di max 25 caratteri e una descrizione di max 150 caratteri;<br>
    I file supportati sono di tipo: Jpeg, Gif e PNG;<br>
    La dimensione dell'immagine non pu&ograve; superare i 2MB.</b><br><br>


    <form method="post" action="<?php echo $_SERVER['
    PHP_SELF']; ?>" enctype="multipart/form-data">
    Titolo:<br />
    <input name="titolo" type="text" size="25" maxlength="25" onkeydown="LimitInput(this.form.titolo,this.form.textcount,25);" onkeyup="LimitInput(this.form.titolo,this.form.textcount,25);"/><br>

    <font size="2">Caratteri rimanenti:</font> <input readonly type="text" name="textcount" size="2" value="25">
    <br><br>

    Descrizione:<br />
    <textarea name="descrizione" cols="20" rows="4">
    </textarea>
    <br>

    Immagine:<br />
    <input type="file" name="imagefile"><br />
    <input type="submit" name="Submit" value="Submit">
    <br /><br />
    </form>
    <?php
    $t=time();

    if(isset($_POST['
    Submit'])){
    // faccio un po'
    di inclusioni...
    @include
    'config.php';
    @require
    'function.php';
    @require
    'function_res.php';



    $iduser=$_SESSION['iduser'];
    $cartella=$_SESSION['cartella'];

    $carfoto_user = $path_imgp.$cartella."/";
    $carthumb_user = $path_imgt.$cartella."/";

    // Creo una array con i formati accettati
    $tipi_consentiti = array("image/gif","image/jpeg","image/png");

    // recupero i dati dal form
    $titolo = @addslashes($_POST['titolo']);
    $descrizione = @addslashes($_POST['descrizione']);
    $nome = @addslashes($_FILES['imagefile']['name']);
    $path = $carfoto_user . stripslashes($nome);
    $tipo = @addslashes($_FILES['imagefile']['type']);

    $massimo_tit = 25;
    $massimo_des = 150;
    $massimo_nome = 30;

    if ((
    strlen($titolo) > $massimo_tit) && (strlen($descrizione) > $massimo_des))
    {
    echo
    "Inserire un titolo di massimo <font color=\"#FF0000\"> <b>" . $massimo_tit . "</b></font>
    &nbsp;caratteri una descrizione di massimo <font color=\"#FF0000\"> <b>"
    . $massimo_des . "</b></font> &nbsp;caratteri<br>";
    }

    elseif (
    strlen($titolo) > $massimo_tit)
    {
    echo
    "Inserire un titolo di massimo <font color=\"#FF0000\"> <b>" . $massimo_tit . "</b></font> &nbsp;caratteri<br>";
    }

    elseif (
    strlen($descrizione) > $massimo_des)
    {
    echo
    "Inserire una descrizione di massimo <font color=\"#FF0000\"> <b> " . $massimo_des . "</b></font> &nbsp;caratteri<br>";
    }

    elseif (
    strlen($nome) > $massimo_nome)
    {
    echo
    "Il nome dell'immagine deve essere massimo di <font color=\"#FF0000\"> <b> " . $massimo_nome . "</b></font> &nbsp;caratteri<br>";
    }

    else {

    $titolo = HtmlEntities($titolo, ENT_COMPAT, "UTF-8");



    // verifico che il formato del file sia tra quelli accettati
    if ((@in_array($_FILES['imagefile']['type'], $tipi_consentiti))&& ($_FILES["imagefile"]["size"] < 2200000)){
    // copio il file nella cartella delle immagini
    @copy ($_FILES['imagefile']['tmp_name'], $carfoto_user . $nome);

    $nomenew = $t."_".$nome;

    // creo ridimensionamento
    @makeresize($carfoto_user,$path,$nomenew,$tipo);
    // creo la miniatura
    @makeThumb($carthumb_user,$path,$nomenew,$tipo);

    unlink($carfoto_user.$nome);


    $min= "tb_" . $nomenew;
    // aggiorno il database
    $query = "INSERT INTO images (id_user,Titolo,Descrizione,Nome,Tipo,thumb) VALUES('$iduser','$titolo','$descrizione','$nomenew','$tipo','$min')";
    $res = @mysql_query($query) or die (mysql_error());
    @
    mysql_close($cn);

    // Stampo a video un po' di informazioni
    echo "Nome: ".$_FILES['imagefile']['name']."<br />";
    echo
    "Dimensione: ".$_FILES['imagefile']['size']."<br />";
    echo
    "Tipo: ".$_FILES['imagefile']['type']."<br />";
    echo
    "Byte: ".$_FILES['imagefile']['size']."<br />";
    echo
    "Copia eseguita con successo.";
    echo
    "<meta http-equiv=refresh content=3;url=$PATH_INFO>";

    }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito
    echo "Impossibile eseguire l'upload. Formato non consentito o immagine troppo grande!";
    }
    }
    }
    ?>

    Come e dove dovrei inserire questa variabile?

    Grazie

  6. #6
    Guest

    Predefinito

    Ok,io ho fatto così e a livello teorico dovrebbe andare, però non l'ho provato ;)

    Posto solo il codice relativo al PHP e salto l'html che rimane identico.

    Prima di tutto apri la sessione ma vabbè

    Codice PHP:
    <?php
    session_start
    ();
    ?>
    Poi qui c'è l'HTML che salto...
    e qui rinizia il PHP

    Codice PHP:
    $t=time();

    if(isset(
    $_POST['Submit'])){
    $variabile = @$_SESSION['contatore'];
    if (
    $variabile != 1) {

    $_SESSION['contatore'] = 1;

    // faccio un po' di inclusioni...
    @include 'config.php';
    @require
    'function.php';
    @require
    'function_res.php';



    $iduser=$_SESSION['iduser'];
    $cartella=$_SESSION['cartella'];

    $carfoto_user = $path_imgp.$cartella."/";
    $carthumb_user = $path_imgt.$cartella."/";

    // Creo una array con i formati accettati
    $tipi_consentiti = array("image/gif","image/jpeg","image/png");

    // recupero i dati dal form
    $titolo = @addslashes($_POST['titolo']);
    $descrizione = @addslashes($_POST['descrizione']);
    $nome = @addslashes($_FILES['imagefile']['name']);
    $path = $carfoto_user . stripslashes($nome);
    $tipo = @addslashes($_FILES['imagefile']['type']);

    $massimo_tit = 25;
    $massimo_des = 150;
    $massimo_nome = 30;

    if ((
    strlen($titolo) > $massimo_tit) && (strlen($descrizione) > $massimo_des))
    {
    echo
    "Inserire un titolo di massimo <font color=\"#FF0000\"> <b>" . $massimo_tit . "</b></font>
    &nbsp;caratteri una descrizione di massimo <font color=\"#FF0000\"> <b>"
    . $massimo_des . "</b></font> &nbsp;caratteri<br>";
    }

    elseif (
    strlen($titolo) > $massimo_tit)
    {
    echo
    "Inserire un titolo di massimo <font color=\"#FF0000\"> <b>" . $massimo_tit . "</b></font> &nbsp;caratteri<br>";
    }

    elseif (
    strlen($descrizione) > $massimo_des)
    {
    echo
    "Inserire una descrizione di massimo <font color=\"#FF0000\"> <b> " . $massimo_des . "</b></font> &nbsp;caratteri<br>";
    }

    elseif (
    strlen($nome) > $massimo_nome)
    {
    echo
    "Il nome dell'immagine deve essere massimo di <font color=\"#FF0000\"> <b> " . $massimo_nome . "</b></font> &nbsp;caratteri<br>";
    }

    else {

    $titolo = HtmlEntities($titolo, ENT_COMPAT, "UTF-8");



    // verifico che il formato del file sia tra quelli accettati
    if ((@in_array($_FILES['imagefile']['type'], $tipi_consentiti))&& ($_FILES["imagefile"]["size"] < 2200000)){
    // copio il file nella cartella delle immagini
    @copy ($_FILES['imagefile']['tmp_name'], $carfoto_user . $nome);

    $nomenew = $t."_".$nome;

    // creo ridimensionamento
    @makeresize($carfoto_user,$path,$nomenew,$tipo);
    // creo la miniatura
    @makeThumb($carthumb_user,$path,$nomenew,$tipo);

    unlink($carfoto_user.$nome);


    $min= "tb_" . $nomenew;
    // aggiorno il database
    $query = "INSERT INTO images (id_user,Titolo,Descrizione,Nome,Tipo,thumb) VALUES('$iduser','$titolo','$descrizione','$nomenew','$tipo','$min')";
    $res = @mysql_query($query) or die (mysql_error());
    @
    mysql_close($cn);

    // Stampo a video un po' di informazioni
    echo "Nome: ".$_FILES['imagefile']['name']."<br />";
    echo
    "Dimensione: ".$_FILES['imagefile']['size']."<br />";
    echo
    "Tipo: ".$_FILES['imagefile']['type']."<br />";
    echo
    "Byte: ".$_FILES['imagefile']['size']."<br />";
    echo
    "Copia eseguita con successo.";
    echo
    "<meta http-equiv=refresh content=3;url=$PATH_INFO>";

    }else{
    // stampo un messaggio di errore nel caso in cui il file sia di un formato non consentito
    echo "Impossibile eseguire l'upload. Formato non consentito o immagine troppo grande!";
    }
    }
    }
    else {
    echo (
    "<br><br><center>Hai già inviato un file! Se ne vuoi inviare un altro <a href='annulla_blocco.php'>clicca qui!</a></center>");
    }
    }
    Dopo nellas tessa cartella di questo file sopra fai un altro file che chiami "annulla_blocco.php" che dentro ha questo

    Codice PHP:
    <?php
    session_start
    ();
    $_SESSION['contatore'] = 0;
    header( "location: index.php" );
    ?>
    Che permette di inviare un secondo file.
    Essendo fatto con le sessioni se qualcuno esce dalla pagina e poi rientra non gli "appare" il blocco ;)
    Ultima modifica di pxy : 15-04-2010 alle ore 07.29.21 Motivo: Sbagliata al condizione if

  7. #7
    gianlucaweb non è connesso Utente attivo
    Data registrazione
    01-01-2003
    Messaggi
    470

    Predefinito

    mi sembra una buona soluzione. Proverò pure questa. Intanto
    pare che dopo l'upload indirizzando con header ad una pagina di conferma e poi ritornando indietro alla stessa pagina il problema non si verifichi più.

    Grazie

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •