[PHP] Upload immagine in un form con target _blank: non funziona

  • Creatore Discussione Creatore Discussione Ciakko
  • Data di inizio Data di inizio

Ciakko

Nuovo Utente
5 Giu 2014
11
0
1
Salve a tutti, sono relativamente nuovo del forum, anche se vi seguo da parecchio.
Mi diverto con la programmazione per il web in attesa di poterne fare un lavoro, e sperimento su sperimento incappo a volte in dubbi esistenziali, eccone uno.
Ho la necessità di aprire una nuova finestra all'invio del mio form (multipart/form-data) per cui uso target="_blank", target="_new" oppure associo il target al mio bottone o input con formtarget. Con i dati di testo non ho alcun problema mentre con le immagini ho un problema strano, ossia il php riceve un file con la sua estensione ma non con una grandezza, ossia vuoto.
Questo è il php che elabora l'immagine:
PHP:
if (preg_match('/jpeg/i', $_FILES['userFile']['type'])){
$estensione = 'jpeg';}
else if (preg_match('/png/i', $_FILES['userFile']['type'])){
$estensione = 'png';}
else if (preg_match('/gif/i', $_FILES['userFile']['type'])){
$estensione = 'gif';}
else die ('<h1>Errore!!!</h1><br/><h3>Estensione ('.$type.') non supportata</h3>');


list($width, $height) = getimagesize ($_FILES['userFile']['tmp_name']);

echo 'Tipo di file: '.$_FILES['userFile']['type'].'<br>';
echo 'Larghezza file: '.$width.'<br>';
echo 'Altezza file: '.$height.'<br>';

$handle = fopen ($_FILES['userFile']['tmp_name'], 'r+') or die ('<h1>Errore</h1><br/><h3>impossibile aprire il file immagine prodotto</h3>');
$image = fread ($handle, filesize($_FILES['userFile']['tmp_name'])) or die('<h1>Errore</h1><br/><h3>impossibile leggere il file immagine</h3>');
fclose ($handle);

A schermo ottengo questo:
Tipo di file: image/jpeg
Larghezza file:
Altezza file:

Warning: fread(): Length parameter must be greater than 0 in ...
Errore
impossibile leggere il file immagine

Se provo il codice offline con Mamp funziona, online no e chiaramente se il form lo invio alla stessa pagina il tutto funziona correttamente. Non ho idea del perché succeda questo e se ci sia una soluzione.
Mi farebbe piacere ogni idea o soluzioni alternative.
Grazie mille.
 
Ultima modifica di un moderatore:
Ciao, il target="_blank" va utilizzato davanti all' href
 
Ti posto un esempio:

HTML:
<a href="image.jpg" target=_blank><img src="image.jpg" height=49 width=49></a><a href="image2.jpg" target=_blank><img src="image2.jpg" height=49 width=49></a>
//e così via


Codice:
<script language="JavaScript">
lista=new Array('<img src="http://www.miosito.it/immagini/image.jpg" width=196, height=195>','<img src= "http://www.miosito.it/immagini/image2.jpg" width=196, height=195>')
titolo= new Array("image", "image2")
maxL=new Array(220,220,322,196)
maxH=new Array(250,250,260,150)
function apri(conta) {
L=maxL[conta]
H=maxH[conta]
finestra= window.open('vuoto.htm','nome','width=400,height=400')
finestra.focus()
finestra.resizeTo(L,H)
finestra.document.write('<html><title>'+titolo[conta]+'</title><body>' + lista[conta] +'</body></html>')
finestra.document.close()
}
</script>[/B]
 
:) Grazie, lo so, ma non è il mio caso. Io invio un form non ho un link. Il target è riferito al tag form o al bottone di invio.
 
ciao
prova a modificare
PHP:
list($width, $height) = getimagesize ($_FILES['userFile']['name']);
e subito dopo metti un va_dump per verificare
PHP:
var_dump($width, $height);//poi lo togli
 
ciao
allora prima dei controlli sul file metti un altro var_dump per verificare che la trasmissione sia giusta
PHP:
<?php
echo "<pre>";
var_dump($_FILES['userFile']);
echo "</pre>";
//il tag pre ti serve per ordinare bene quello che eventualmente ti restituisce
//... ecc
?>
se ti ta NULL vuol dire che la trasmissione dal form non avviene, se ok ti dovrebbe dare tutti i valori di $_FILES['userFile']['tmp_name'] ecc...
piccolo dubbio probabilmente stupido
nel tag form hai messo enctype="multipart/form-data" ?
 
Ciao, sì il form è settato su enctype="multipart/form-data".
Non ho tempo ora di testare con un codice pulito e ridotto all'osso se la situazione si ripresenta ugualmente, se fosse così sembra una "falla" nel trasporto dei dati. Magari dipende dalla versione di php, da qualche settaggio del server che imposta la cartella del file temporaneo o semplicemente html non supporta l'invio in post di files su una nuova finestra.
Sono solo supposizioni, speravo che qualcuno avesse avuto lo stesso mio problema.
Grazie lo stesso a tutti, aggiornerò più avanti.
Ciao
 

Discussioni simili