Newsgroup: it.comp.www.php
Titolo: problema con upload dei file tra più form

Salve a tutti,
ho il seguente problema. Sto creando un form per l'inserimento di dati
anagrafici degli utenti, che comprende anche la possibilità di fare
l'upload di un file. Questi dati inseriti poi vanno a finire in un
database MySql. Mi è stata chiesto che, prima dell'inserimento
definitivo delle informazioni nel database, gli utenti possano
visualizzare una pagina riepilogativa di conferma, nella quale vengano
visualizzati i dati riportati nel primo form, in modo che ogni utente
possa verificare la correttezza delle informazioni. Ora, per passare le
varibili dal form di inserimento alla pagina di conferma, utilizzo il
metodo INPUT TYPE="HIDDEN", nella cui proprietà VALUE stampo il valore
della variabile con <?echo($_POST('variabile'));?>. Così riesco a
portarmi i valori da un form all'altro. Il problema si pone per
l'upload dei file, per il quale lo stesso meccanismo non funziona. Ho
provato a passare nel form di conferma i valori $_FILES[xxxx][name] e
$_FILES[xxxx][tmp_name], e i valori di questi vengono passati
correttamente nella pagina seguente, ma l'upload non viene effettuato.
Qualcuno saprebbe illuminarmi??
Grazie a tutti

 Grazie a tutti
-- 
!!! SODDISFATTI O RIMBORSATI !!! Nessuno si è mai lamentato della nostra 
offerta 2x1. Morire in 2 e pagare per 1.
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

Scusami, non capisco... I nomi dei file li ho riportati, ed i valori
rispettivi passano correttamente... ma poi nella form finale non carica
il file. Credo sia, come accenni tu, un problema legato al percorso, ma
non conosco bene l'array globale $_FILES, per cui non riesco a gestire
la cosa... potrei avere maggiori chiarimenti?
GRAZIE!!

 
de nada ..
-- 
SEZIONE DIVENTIMENTO & AFFINI: "Qual è il poliziotto più sfortunato? 
Quello che muore al posto di  blocco. E quello più fortunato? Blocco!"


 possa verificare la correttezza delle informazioni. [...]
Si puo' fare cosi':
Definisci una struttura dati che contiene un file uploadato:
class UpldFile {
    public $name = "";     nome originale sul client
    public $type = "";     tipo MIME dichiarato dal client
    public $size = 0;      dimensione (B)
    public $file = "";     file temp. dove si trova sul server
}
Quando ricevi il POST riempi la struttura dati, avendo cura di spostare il
file in un altro file temporaneo (di norma il file temp. viene cancellato
al termine dello script che ha ricevuto il POST). Piu' o meno:
$f = new UpldFile();
$f->name = $_FILES[pippo]['name'];
$f->type = $_FILES[pippo]['type'];
ecc....
Metti questi dati in sessione (se usi le sessioni) oppure serializzi il
tutto e lo metti in un hidden field per portartelo dietro. Occhio che
in questo secondo caso devi validare il campo hidden quando ti ritorna
dal form, perche' potrebbe essere artefatto. A questo scopo si puo'
proteggere il dato con un MAC.
Nella pagina di conferma dovrai mostrare il file se una immagine, o
presentare un sunto del contenuto, o perlomeno nome/dimensione/tipo.
Se e' una immagine dovrai metterci un link a uno script (upldimg.php)
che genera l'immagine.
Se i dati del file sono in sessione, nessun problema. Se passi i dati
di $f via parametro GET, allora dovrai generare il link e le cose si
complicano un po':
echo "<img src=upldimg.php?f='", EncodeWithMAC( serialize($f) ), "'>";
Lo script upldimg.php verra' chiamato dal browser per ottenere l'img.
Lo script estrae il parametro f, lo controlla, e mette in output
l'img con il tipo MIME corretto:
<? /* upldimg.php */
$f_s = DecodeWithMAC( $_GET['f'] );
if ( $f_s === NULL ){
    echo "-- invalid MAC --";
    exit;
}
$f = unserialize($f_s);
header("Content-Type: " . $f->type);
readfile($f->file);
?>
Le funzioni di codifica/decodifica per controllare i campi hidden di
ritorno e i parametri GET di ritorno fanno questo:
function EncodeWithMAC($s)
{
    return base64_encode($s) . "," . md5($s . "xYzT");
}
function DecodeWithMAC($e)
{
    ($s, $m) = split($e, ",");
    if ( md5($s) === $m )
        return $s;
    else
        return NULL;
}
(codice da verificare, ma dovrebbe dare l'idea).
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

Uso le sessioni comunque, quindi un problema in meno.
Grazie ancora!!!
Valeria