Effettua l'accesso o una nuova registrazione.

Inserisci il nome utente, la password e la durata della sessione.
 


Autore Topic: evitare submit stessi dati  (Letto 414 volte)

Offline frankphp

  • Membro Senior
  • ****
  • Post: 469
    • Mostra profilo
evitare submit stessi dati
« il: 06/02/10 20:20:27 »
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
« Ultima modifica: 06/02/10 20:22:58 da frankphp »

Offline Gianni

  • Moderatore
  • *****
  • Post: 7.086
    • Mostra profilo
Re: evitare submit stessi dati
« Risposta #1 il: 06/02/10 22:40:15 »
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:
If you think education is expensive try ignorance

Offline frankphp

  • Membro Senior
  • ****
  • Post: 469
    • Mostra profilo
Re: evitare submit stessi dati
« Risposta #2 il: 07/02/10 13:37:45 »
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

Offline frankphp

  • Membro Senior
  • ****
  • Post: 469
    • Mostra profilo
Re: evitare submit stessi dati
« Risposta #3 il: 07/02/10 18:26:12 »
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

Offline Gianni

  • Moderatore
  • *****
  • Post: 7.086
    • Mostra profilo
Re: evitare submit stessi dati
« Risposta #4 il: 07/02/10 19:22:33 »
Il tag <meta> andrebbe messo all'interno del tag <head> della pagina

per il resto non vedo grossi problemi

 :bye:
If you think education is expensive try ignorance

Offline frankphp

  • Membro Senior
  • ****
  • Post: 469
    • Mostra profilo
Re: evitare submit stessi dati
« Risposta #5 il: 08/02/10 14:44:12 »
Il tag <meta> andrebbe messo all'interno del tag <head> della pagina

per il resto non vedo grossi problemi

 :bye:


Grazie