evitare submit stessi dati

Ciao

Come ho già anticipato nella mia discussione precedente sto sviluppando un sistema per caricare, ridimensionare e visualizzare le immagini con jquery, php e mysql.

Sono già a buon punto. Però mi sono accorto di un problema.

Una volta riempiti i campi necessari per l'operazione di upload e cliccato sul pulsante submit

I dati e l'immagine relativa vengono caricati regolarmente; però se l'utente ri-clicca sul pulsante submit

vengono caricati di nuovo la stessa immagine con gli stessi dati. Vorrei evitare questo problema (azzerando tutto e

in pratica se l'utente dovesse sbadatamente rifare un submit in più fare in modo che non succeda neinte o venga avvertito).

Cosa dovrei fare?

Questo il codice (ancora non definitivo devo implementare le funzioni per il controllo dell'imput ecc ecc)

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data">
Titolo:<br />
<input name="titolo" type="text" size="20" maxlength="25"><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 />
<?php
if(isset($_POST['Submit'])){
  // faccio un po' di inclusioni...
  @include 'config.php';
  @require 'function.php';
  @require 'function_res.php';

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

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

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

     // creo ridimensionamento
   @makeresize($path_imgp,$path,$nome,$tipo); 
    // creo la miniatura
    @makeThumb($path_imgt,$path,$nome,$tipo);
   
  
   $min= "tb_" . $nome;
    // aggiorno il database
    $query = "INSERT INTO images (Titolo,Descrizione,Nome,Tipo,thumb) VALUES('$titolo','$descrizione','$nome','$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."; 
  }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!";
  }
} 
?>
</form>

Grazie

inviato 6 anni fa
frankphp
modificato 6 anni fa
X 0 X

nel form puoi mettere un campo nascosto con un valore random, la prima volta che viene fatto l'upload lo metti in sessione, la seconda volta lo trovi già in sessione e mostri un messaggio di errore

oppure appena dopo l'upload fai un redirect ad un'altra pagina con un messaggio di esito

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

nel form puoi mettere un campo nascosto con un valore random, la prima volta che viene fatto l'upload lo metti in sessione, la seconda volta lo trovi già in sessione e mostri un messaggio di errore

oppure appena dopo l'upload fai un redirect ad un'altra pagina con un messaggio di esito

 :bye:

Ok Gianni, provo con la seconda soluzione.

Non ho capito bene il primo consiglio però. Valori random?

Mi interessa la cosa (magari mi torna utile per un altro progetto.

Fammi capire per piacere (un po' di codice...please ;))

Ciao e grazie

risposto 6 anni fa
frankphp
X 0 X

sembra che un semplice:

echo "<meta http-equiv=refresh content=3;url=$PATH_INFO>";

inserito qui:

.........

   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>";

..........

sembra che sia più che sufficiente. Se non ci sono controindicazioni che non conosco ( sembra efficace e non

ho riscontrato propblemi apparenti) uso questa soluzione.

Che ne dici Gianni?

Grazie

risposto 6 anni fa
frankphp
X 0 X

Il tag <meta> andrebbe messo all'interno del tag <head> della pagina

per il resto non vedo grossi problemi

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Il tag <meta> andrebbe messo all'interno del tag <head> della pagina

per il resto non vedo grossi problemi

 :bye:

Grazie

risposto 6 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda