strano comportamento di $_FILES nel controllo

aganju

Nuovo Utente
5 Feb 2013
10
0
0
Ciao,

ho un strano comportamento in uno script per quanto riguarda l'upload immagini.
Ho una pagina di modifica prodotti e quindi anche delle immagini.
La funzione logica della pagina è che se nella modifica del prodotto non seleziono immagini, lo script "salta" il passaggio per l'upload e continua con il resto dello script.
il punto è che nonostante abbia messo un controllo su $_FILES dopo l'invio del form,
$_FILES['fleImage']['name'] risulta sempre NON vuoto.
Eppure con print_r($_FILES) se non seleziono un immagine, all'invio del form, mi dice giustamente il contrario.
PHP:
echo"<pre>";  
print_r($_FILES);  
echo"</pre>";  

$name = $_FILES['fleImage']['name'];  
if (empty($name))  
{ echo "è vuoto";  
} else { 
echo "Non è vuoto";}

mi sono allora creato una semplice pagina di prova con il form e i controlli uguali alla pagina originale
PHP:
<!DOCTYPE html>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
</head>  
<body>  

<form action="" method="post" enctype="multipart/form-data" name="prova">  
<input name="fleImage" type="file" id="fleImage" class="box" multiple="multiple">  
<input name="ciao" type="submit" value="Modifica Prodotto">  
</form>  

<?php  
echo"<pre>";  
print_r($_FILES);  
echo"</pre>";  

$name = $_FILES['fleImage']['name'];  
if (empty($name))  
{ echo "é vuoto";  
} else {echo "Non è vuoto";} ?>  
</body>  
</html>
questa pagina di test invece funziona correttamente.
ma perchèèè??? quali sono le differenze?
illuminatemi :dipser:
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Se anche nessun file viene selezionato la variabile viene inviata, quindi ti consiglio di controllare se effettivamente c'è stato un upload locale temporaneo, cioè se c'era veramente un file

PHP:
 echo !empty($_FILES['fleImage']['tmp_name']) ? "File inviato" : "Nessun file inviato";
 

aganju

Nuovo Utente
5 Feb 2013
10
0
0
umhh..

PHP:
echo"<pre>";
print_r($_FILES);
echo"</pre>";

 echo !empty($_FILES['fleImage']['tmp_name']) ? "File inviato" : "Nessun file inviato";  

if (empty($_FILES['fleImage']['tmp_name'])) {

echo "é vuoto"; 
} else {
echo "Non è vuoto";
}
 }

mi dice che il file è stato inviato....

Non ho capito come funziona questa storia. Cioè, anche se non invio un file, $_FILES['fleImage']['tmp_name'] viene valorizzato lo stesso? Se si, come faccio a risolvere questo problema?

grazie per la risposta!
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Bah forse combini qualcos'altro prima perché a me funziona perfettamente in locale, anche inviando un form col file vuoto o senza form
 

aganju

Nuovo Utente
5 Feb 2013
10
0
0
anche a me funziona utilizzando quella pagina di prova che ho postato all'inizio.
Comunque, nel caso che mi interessa, non credo di fare cose complicate da determinare questo malfunzionamento. Ti spiego brevemente.

dal form di modifica invio (o non invio) i dati:
Codice:
<form action="processProduct.php?action=modifyProduct&productId=<?php echo $productId; ?>" method="post" enctype="multipart/form-data" name="frmAddProduct" id="frmAddProduct">

e li invio al file processProduct.php che tramite uno switch, in base all' $action che riceve, processa i dati tramite una funzione:

PHP:
$action = isset($_GET['action']) ? $_GET['action'] : '';

switch ($action) {

case 'modifyProduct' :
		prova();
		break;

}

function prova()
{


echo"<pre>";
print_r($_FILES);
echo"</pre>";

 echo !empty($_FILES['fleImage']['tmp_name']) ? "File inviato" : "Nessun file inviato";  

if (empty($_FILES['fleImage']['tmp_name'])) {

echo "é vuoto"; 
} else {
echo "Non è vuoto";
}
 }

tutto qui! Non mi sembra che sia una cosa complicata o no? :crying:
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
A me funziona correttamente utilizzando un form di prova e lo stesso codice quindi mi viene da chiederti se per caso tu non invii ugualmente il file, sennò a questo punto non so che dirti dato che non ci sono errori
 

aganju

Nuovo Utente
5 Feb 2013
10
0
0
quindi mi viene da chiederti se per caso tu non invii ugualmente il file

ma quale file? :dipser:

se con print_r($_FILES) mi dice che l'array è vuoto...

Codice:
Array
(
    [fleImage] => Array
        (
            [name] => Array
                (
                    [0] => 
                )

            [type] => Array
                (
                    [0] => 
                )

            [tmp_name] => Array
                (
                    [0] => 
                )

            [error] => Array
                (
                    [0] => 4
                )

            [size] => Array
                (
                    [0] => 0
                )

        )

)

ma con !empty() mi dice che non lo è!
Come si fa a capire dov'è il problema? a parte print_r, dato che non ci sono errori come si può risalire o cosa si può fare per capire cosa c'è li che rompe i maroni??:incazz:

Grazie comunque per l'aiuto Nefyt
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Non avevo mica visto che il campo è col multiple attivo :vampiro:, quindi come ti dice il print_r sono degli array contenenti tutti i dati dei file, fai un controllo di questo genere

PHP:
echo count($_FILES['fleImage']['tmp_name'])>0 ? 'File inviati' : 'Nessun file inviato';
//premessa operatore ternario o normale costrutto if/else non cambia niente, abbrevia solamente
 

aganju

Nuovo Utente
5 Feb 2013
10
0
0
si ho fatto, ma a cosa serve? non cambia nulla. Il print_r mi stampa sempre la stessa cosa che ho postato prima e mi dice sempre file inviato
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
si ho fatto, ma a cosa serve? non cambia nulla. Il print_r mi stampa sempre la stessa cosa che ho postato prima e mi dice sempre file inviato

Devi contare i file inviati oppure controlli il valore, in pratica non puoi trattare quelli come stringhe dato che sono degli array perché il multiple è attivo, quindi devi controllare i loro elementi

Con empty prova cosi
PHP:
echo !empty($_FILES['fleImage']['tmp_name'][0]) ? 'Almeno un file è stato inviato' : 'Nessun file inviato';
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusate ma forse è la mia solita pu.....ta, ma ho notato che il print_r restituisce
Array
(
[fleImage] => Array
(
[name] => Array
(
[0] =>
)

[type] => Array
(
[0] =>
)

[tmp_name] => Array
(
[0] =>
)

[error] => Array
(
[0] => 4
)

[size] => Array
(
[0] => 0
)

)
da cui [fleImage][name] è a sua volta un array
per cui non sarebbe da fare
$name = $_FILES['fleImage']['name'][0];
?
non ho mai usato l'attributo multiple, ma intuisco se uno seleziona due file il print_r dovrebbe restituire
Array
(
[fleImage] => Array
(
[name] => Array
(
[0] => file_1.jpg
[1] => file_2.jpg
)
eccc....
o il mio è un racionamento sbagliato

edit
nefyt: ci siamo incrociati
 
Ultima modifica:

aganju

Nuovo Utente
5 Feb 2013
10
0
0
PHP:
!empty($_FILES['fleImage']['tmp_name'][0]

ecco la soluzione!! porca @]*! :quote: tutta colpa di quel <input name="fleImage[]"> Non sapevo che nel caso di [] nel $_FILES bisognava ragionare come un array anche se vuoto!!

grazie Nefyt avanzi una bella birrozza! :fonzie:
 
Discussioni simili
Autore Titolo Forum Risposte Data
E Strano comportamento di 'use' in php PHP 2
jonnino2004 strano comportamento del posizionamento su google SEO e Posizionamento 5
A [PHP] Strano comportamento Form PHP 1
S Comportamento strano php/html... PHP 10
A Strano comportamento dello slash / al fondo dell'URL HTML e CSS 1
B gestione eventi con addEventListener,comportamento strano dell'handle Javascript 2
M Comportamento strano di questo script per caricamento file sql in database PHP 7
C strano comportamento file css HTML e CSS 2
M Strano comportamento pagina HTML e CSS 4
S strano comportamento a:hover su immagine HTML e CSS 7
V Strano comportamento sessioni PHP 6
J strano comportamento di due codici apparentemente identici..... PHP 1
SolidSnake4 strano comportamento script Ajax 6
S comportamento strano delle sessioni PHP 0
PoLe Strano comportamento del PC Sicurezza e Virus 4
S Strano comportamento di 'Subscribed Threads' Supporto Mr.Webmaster 2
moustache text box + post php con IE si comporta in modo strano PHP 16
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
S Strano problema con i title su Google SEO e Posizionamento 3
E strano errore php/mysql PHP 8
elpirata Strano problema con include PHP 5
K strano focus input type="text" HTML e CSS 4
felino Google My Business: uno strano errore... Social Media Marketing 3
F Strano problema.. HTML e CSS 6
K strano errore su R.array Sviluppo app per Android 3
T problema strano con procedura di controllo da database, di dati immessi in un form asp Classic ASP 5
P Windows 7 rete e strano file batch Reti LAN e Wireless 1
I Hide a tempo crea uno strano effetto jQuery 2
X Strano collegamento HTML e CSS 16
neo996sps Strano problema con explode di una data PHP 4
K Strano errore in una query mysql da php PHP 5
M Windows xp: problemi con un messaggio benvenuto strano Windows e Software 2
catellostefano Codice strano Javascript 2
E problema strano con db per i permessi PHP 1
D Errore strano durante l'uso di mail() PHP 2
Y strano errore con immissione nickname e password PHP 8
M Problema di connessione strano. Reti LAN e Wireless 2
A Warning strano PHP 2
borgo italia strano codice HTML e CSS 2
SolidSnake4 strano errore PHP 12
borgo italia strano fenomeno PHP 1
SolidSnake4 strano problema template HTML e CSS 6
SolidSnake4 strano problema con ie6 HTML e CSS 6
@ Progetto strano n° 3.... Presenta il tuo Sito 9
@ Altro progetto strano... Presenta il tuo Sito 4
@ Progetto un pò strano... Presenta il tuo Sito 0
B Problema Strano Su DIV. mi scompare tutto!! HTML e CSS 8
L Problema strano con i link Flash 2
C problema strano css HTML e CSS 5
M Problema indicizzazione di www.meedl.com su google ! E' un problema veramente strano! SEO e Posizionamento 1

Discussioni simili