Se clicco refresh il form va in automatico

brugne92

Nuovo Utente
22 Mag 2014
3
0
0
Ciao a tutti, ho un problema con la seguente form: si tratta di un upload di foto.
Praticamente in questa form io selezione l'album su cui inserire la foto da un menù select e poi scelgo la foto. Funziona a meraviglia. Ho inserito poi il controllo if isset($_FILE......) così da lanciare una funzione esterna solo se la foto è stata caricata. Il problema è che se io clicco nel pulsante refresh del browser, la form viene eseguita nuovamente e mi carica la stessa foto nell'album, anche se non vedo alcuna foto selezionata nel riquadro apposito!( cioè mi esce nessun file selezionato).
Inserendo dopo la chiamata alla funzione questa riga:

header("Location: album.php"); che è la stessa pagina in cui è presente il form per l'upload della foto, il problema si risolve, ma non compaiono più i messaggi echo presenti nella funzione upload.
Ho provato quindi a cercare se era possibile dare un delay a header e l'unica cosa che ho trovato è questa:
header("Refresh: 5; url=albu.php"); Ma non funziona! Cioè mi fa il refresh della pagina
ma mi ricarica anche la foto !( cioè esegue la form nuovamente)
Ho già provato anche a inserire il controllo isset($_Post ...)

questa è la form
PHP:
<?

@include 'config.php';
@include 'upload.php';
$sql = "SELECT * FROM album ";
$result = mysql_query($sql)or die (mysql_error());

if (isset($_FILES['file']))
{
upload();





}
echo "

<form enctype=\"multipart/form-data\"
action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
<fieldset>
<legend>CARICA FOTO</legend>
<select name=\"album\" >
<option value=\"\">Seleziona un album dove caricare la foto </option>";

while($row = mysql_fetch_array($result) )
{
?>
<option value="<?php echo $row['nome'];?>"><?php echo $row['nome'];?></option>
<?
}
?>
<?
echo "

</select>

<input type=\"hidden\" name=\"MAX_FILE_SIZE\"
value=\"300000\" />
<input type=\"file\" name=\"file\" size=\"40\" />
<input type=\"submit\" value=\"Invia\" name=\"submit\" />
</fieldset>
</form>";

?>


questa è la funzione

<?
function upload()
{
if($_POST['album']=="")
{
echo" <h3>DEVI SCEGLIERE UN ALBUM DOVE CARICARE LA FOTO!!</h3>";
return false;}
$result = false;
$immagine = '';
$size = 0;
$type = '';
$nome = '';
$max_size = 300000;
$result = @is_uploaded_file($_FILES['file']['tmp_name']);
if (!$result)
{
echo "Impossibile eseguire l'upload.";
return false;
}else{
$size = $_FILES['file']['size'];
if ($size > $max_size)
{
echo "Il file è troppo grande.";
return false;
}
$type = $_FILES['file']['type'];
$nome = $_FILES['file']['name'];
$tmp_name = $_FILES['file']["tmp_name"];
$immagine = @file_get_contents($_FILES['file']['tmp_name']);
$immagine = addslashes ($immagine);
$moveResult= move_uploaded_file($tmp_name, "uploads/".$nome);

if ($moveResult == true) {

echo "<p id='info-message'>HO CARICATO LA FOTO NELL'ALBUM :&nbsp; $_POST[album] </p>
<script>
setTimeout(function(){
document.getElementById('info-message').style.display = 'none';

}, 3000);
</script>";
//echo "HO CARICATO LA FOTO NELL'ALBUM :&nbsp;";

//echo $_POST['album'];
} else {
echo "ERROR: File not moved correctly";
}
@include 'config.php';
$sql = "INSERT INTO immagini (nome,album) VALUES ('$nome','$_POST[album]')";
$result = @mysql_query ($sql) or die (mysql_error());
return true;

}
}
?>
Grazie mille anticipatamente!!
 
Ultima modifica di un moderatore:
Ciao a tutti, ho un problema con la seguente form: si tratta di un upload di foto.
Praticamente in questa form io selezione l'album su cui inserire la foto da un menù select e poi scelgo la foto. Funziona a meraviglia. Ho inserito poi il controllo if isset($_FILE......) così da lanciare una funzione esterna solo se la foto è stata caricata. Il problema è che se io clicco nel pulsante refresh del browser, la form viene eseguita nuovamente e mi carica la stessa foto nell'album, anche se non vedo alcuna foto selezionata nel riquadro apposito!( cioè mi esce nessun file selezionato).
Inserendo dopo la chiamata alla funzione questa riga:

header("Location: album.php"); che è la stessa pagina in cui è presente il form per l'upload della foto, il problema si risolve, ma non compaiono più i messaggi echo presenti nella funzione upload.
Ho provato quindi a cercare se era possibile dare un delay a header e l'unica cosa che ho trovato è questa:
header("Refresh: 5; url=albu.php"); Ma non funziona! Cioè mi fa il refresh della pagina
ma mi ricarica anche la foto !( cioè esegue la form nuovamente)
Ho già provato anche a inserire il controllo isset($_Post ...)

questa è la form
PHP:
<?

@include 'config.php';
@include 'upload.php';
$sql = "SELECT * FROM album ";
$result = mysql_query($sql)or die (mysql_error());

if (isset($_FILES['file']))
{
upload();





}
echo "

<form enctype=\"multipart/form-data\"
action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">
<fieldset>
<legend>CARICA FOTO</legend>
<select name=\"album\" >
<option value=\"\">Seleziona un album dove caricare la foto </option>";

while($row = mysql_fetch_array($result) )
{
?>
<option value="<?php echo $row['nome'];?>"><?php echo $row['nome'];?></option>
<?
}
?>
<?
echo "

</select>

<input type=\"hidden\" name=\"MAX_FILE_SIZE\"
value=\"300000\" />
<input type=\"file\" name=\"file\" size=\"40\" />
<input type=\"submit\" value=\"Invia\" name=\"submit\" />
</fieldset>
</form>";

?>


questa è la funzione

<?
function upload()
{
if($_POST['album']=="")
{
echo" <h3>DEVI SCEGLIERE UN ALBUM DOVE CARICARE LA FOTO!!</h3>";
return false;}
$result = false;
$immagine = '';
$size = 0;
$type = '';
$nome = '';
$max_size = 300000;
$result = @is_uploaded_file($_FILES['file']['tmp_name']);
if (!$result)
{
echo "Impossibile eseguire l'upload.";
return false;
}else{
$size = $_FILES['file']['size'];
if ($size > $max_size)
{
echo "Il file è troppo grande.";
return false;
}
$type = $_FILES['file']['type'];
$nome = $_FILES['file']['name'];
$tmp_name = $_FILES['file']["tmp_name"];
$immagine = @file_get_contents($_FILES['file']['tmp_name']);
$immagine = addslashes ($immagine);
$moveResult= move_uploaded_file($tmp_name, "uploads/".$nome);

if ($moveResult == true) {

echo "<p id='info-message'>HO CARICATO LA FOTO NELL'ALBUM :&nbsp; $_POST[album] </p>
<script>
setTimeout(function(){
document.getElementById('info-message').style.display = 'none';

}, 3000);
</script>";
//echo "HO CARICATO LA FOTO NELL'ALBUM :&nbsp;";

//echo $_POST['album'];
} else {
echo "ERROR: File not moved correctly";
}
@include 'config.php';
$sql = "INSERT INTO immagini (nome,album) VALUES ('$nome','$_POST[album]')";
$result = @mysql_query ($sql) or die (mysql_error());
return true;

}
}
?>
Grazie mille anticipatamente!!


ciao prova a modificare solo questo.....
PHP:
if(isset($_POST['album']==""))
 
in che senso? comunque io non ho quella riga.. ho soltanto il controllo if ($_POST['album']=="")
 
Ciao, allora io ho lo stesso problema, ovvero invii i dati via form e se ricarichi la pagina "rielabora i dati", per ovviare questo problema ho usato il normalissimo:

PHP:
header("location: pagina.php");

come giustamente hai fatto notare se usi questo metodo non ti mostra il messaggio di avvenuto invio dei dati, allora fai una cosa furba crea una cosa del genere:

PHP:
header("location: pagina.php?successo=1");

e poi nella pagina in base a come gestisci i messaggi lo adatti.

PHP:
if(isset($_GET['successo']) AND ($_GET['successo']== 1)) {

messaggio di conferma 

}
 

Discussioni simili