Upload di un file all'interno di un modulo di registrazione

simonedig

Nuovo Utente
11 Mag 2012
12
0
0
Salve ho creato un modulo di registrazione formato da una tabella contenente una serie di Input di testo (tra cui un input di file) ed un pulsante submit finale che invia l'email di conferma, scrive i valori su database sql e dovrebbe caricare nella cartella uploads il file indicato come allegato ma quest ultima cosa non funziona...dunque ora posto il codice html e php:
HTML:
...<td width="25%" bgcolor="#FFFF99" align="right"><font color="#000080">Professione</font></td>
           <td width="51%" height="15" bgcolor="#F4F4F4" colspan="2"><input rows="1" name="professione" size="40"></td>
           </tr>
           <tr>
           <td width="25%" bgcolor="#FFFF99" align="right"><font color="#000080"><strong>Allega</strong></font></td>
           <td width="77%" height="15" bgcolor="#F4F4F4" colspan="3">
	   <input name="docAllegato" type="file" action="upload"/>[/PHP] 
           ...
PHP:
          mysql_query("INSERT INTO RegistrazioneSocio VALUES  ('$nome','$cognome','$data_americana_nascita','$natoa','$indirizzoResidenza','$citta','$cap','$provincia','$docRiconoscimento','$docNumero','$docRilasciatoDa','$data_americana_Rilascio','$codiceFiscale','$professione','$appartamento','$periodo','$telefono','$cellulare','$fax','$email','$data_americana_Scadenza','$note','$consenso','$docAllegato')") OR DIE($messaggio = mysql_error());

$uploads_dir = './uploads';

        $tmp_name = $_FILES["docAllegato"]["tmp_name"];
        $name = $_FILES["docAllegato"]["name"];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");

Come mai l'upload non funziona?
 
Grazie mille ho risolto!!! era proprio quello il problema!! come uno sciocco mi sono sbattuto per una sciokkezza :)...ti ringrazio davvero per la tempestivita nella risposta ;)
 
Grazie mille ho risolto!!! era proprio quello il problema!! come uno sciocco mi sono sbattuto per una sciokkezza :)...ti ringrazio davvero per la tempestivita nella risposta ;)
Di nulla, questo problema fece perdere ore anche a me da quella volta è la prima cosa che mi viene in mente quando sento dire upload :p
 
Guarda ti giuro che è stato un vero massacro...è dalle 15 di oggi pomeriggio che cerco di capire quale fosse il problema :)...comunque meglio cosi...la prossima volta ci andrà meglio ad entrambi ;)...ma scusa se ti disturbo ancora per un minuto, adesso che sono finalmente riuscito a fare l'upload ho rilevato un altro tipo di problema...ovvero quando invio i dati se ci sono errori di digitazione oppure non sono stati compilati tutti i campi obbligatori vorrei che l'utente avesse la possibilita di completare l'inserimento dati ed eventualmente correggere gli errori...ho utilizzato questo script che tuttavia non funziona e non capisco il perchè...spero sia di nuovo una sciocchezza :)
PHP:
echo "<script language =\"Javascript\">\n";
echo "window.setTimeout(\"history.back();\", 500);\n";
echo "</script>\n";
echo '<script type="text/javascript">alert("Attenzione!!! Non sono stati compilati tutti i campi contrassegnati da asterisco. Tali campi sono obbligatori per confermare la registrazione");</script>';
il punto è che il messaggio compare quindi lo script funziona...ma allora perchè tutti i dati nelle textbox scopaiono?
 
Scompaiono tutti? Con history(-1); hai provato? Sennò potresti stampare le eventuali variabili post se esistenti

Codice:
<input type='text' name='lol' value="<? @echo $_POST['lol']; ?>">
 
Si purtroppo ho provato ma non riesco...scompaiono comunque tutti i campi...ho letto un po in giro che una soluzione potrebbe essere l'utilizzo dell'array $_SESSION anche se per il momento non sto riuscendo ad avere risultati...forse sbaglio io il modo di programmarlo...non riesco a capire perchè con history non vengono memorizzati i valori...
 
ciao
ti faccio un piccolo esmpio di come usare le sessioni per "ricordarsi" i valori inseriti
PHP:
<?php
session_start();//questa DEVE essere la prima istuzione
if(isset($_POST['Submit']){
	$_SESSION['nome']=$_POST['nome'];
	//eccetera tutto quello che ci vuole
	//se poi quando tutto è OK unsetti la sessione con unset($_SESSION);
}

if(isset($_SESSION['nome']){
	$nome=$_SESSION['nome'];
}else{
	$nome="";
}
?>

<form name="form1" method="post" action="">
  <p>
    <input name="nome" type="text" id="nome" value="<?php echo $nome;?>">
  </p>
  <p>
    <input type="submit" name="Submit" value="Invia">
  </p>
</form>
poi alcune osservazioni:
i controlli lato client con js sono scenografici, ma facilmente bypassabili, visto che devi inserire i dati nel db e sorattutto uplodare dei file dovresti fare i controlli lato client con php.
 
ciao
ti faccio un piccolo esmpio di come usare le sessioni per "ricordarsi" i valori inseriti
PHP:
<?php
session_start();//questa DEVE essere la prima istuzione
if(isset($_POST['Submit']){
	$_SESSION['nome']=$_POST['nome'];
	//eccetera tutto quello che ci vuole
	//se poi quando tutto è OK unsetti la sessione con unset($_SESSION);
}

if(isset($_SESSION['nome']){
	$nome=$_SESSION['nome'];
}else{
	$nome="";
}
?>

<form name="form1" method="post" action="">
  <p>
    <input name="nome" type="text" id="nome" value="<?php echo $nome;?>">
  </p>
  <p>
    <input type="submit" name="Submit" value="Invia">
  </p>
</form>
poi alcune osservazioni:
i controlli lato client con js sono scenografici, ma facilmente bypassabili, visto che devi inserire i dati nel db e sorattutto uplodare dei file dovresti fare i controlli lato client con php.
Ok grazie mille ora funziona perfettamente...comunque potresti spiegarti meglio??? scusami ma non sono molto pratico dato che sono pochi giorni che mi interfaccio con il php...cosa intendi per bypassare?? comunque se ho capito bene il tuo consiglio ho eliminato un paio di script come ad esempio
Codice:
<script language="Javascript">
	window.open("utentenonattivato.php");
	alert('<?php echo $messaggio?>');
</script>
ed ho inserito questo codice php trovato sul web:
PHP:
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'utentenonattivato.php';
header("Location: http://$host$uri/$extra");
purtroppo ora non mi fa più andare sulla pagina "utentenonattivato.php" ma mi stampa a video questo errore:
Warning: Cannot modify header information - headers already sent by (output started at /web/htdocs/www.amiciresidencetarvisio.com/home/form.php:60) in /web/htdocs/www.amiciresidencetarvisio.com/home/form.php on line 330
da cosa può dipendere??
 
ciao
l'errore è dato dalla header che deve venire PRIMA di qualsiasi output html, anche uno spazio è considerato output
es.
PHP:
 <!--qui metto uno spazio-->
<?php
$host  = $_SERVER['HTTP_HOST']; 
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
$extra = 'utentenonattivato.php'; 
header("Location: http://$host$uri/$extra");//ti da l'errore Warning: Cannot modify header information....
//....
?>
altro es un echo " " è un out, quindi bisogna stare attenti a dove si usa, se serve si può modificare il flusso, ma questo eventualmente lo vediamo poi.

per spiegarti lo script
l'istruzione session_start(); genera le sessioni, DEVE essere messa in tutte le pagine in cui si usano le sessioni
verifico che sia stato premuto il pulsante di submit e se si passo in sessione il valore proveniente dal form ($_POST['nome'])
in pratica valorizzo una sessione chiamata 'nome', le sessioni rimangono attive (si ricordano) sino a che non esco dal bw
nel form verifico prima che la sessione esista e se si valorizzo una variabile che metterò nel value dell'input.
è evidente che la prima volta che accedo al form la session['nome'] non esiste e quindi value="", se invece avevo scritto un nome sbagliato e ritorno al form la casella dell'input mostreà il nome sbagliato che (volendo) posso correggere.
quando tutto è ok elimino le sessioni perche, come detto rimangono nel bw sino a che non si esce, per cui il form rimarrebbe sempre riempito con i vecchi valori.

poi non ho detto che devi eliminare i js (servono comunque come avviso o altro) ma i controlli devono essere fatti ANCHE lato server che non sono (almeno molto difficilmente) aggirabili.
(es. se disattivo js dal bw i controlli js non hanno più effetto)
i controlli ti servono per evitare che qualcuno ti invii es. un file distruggi_tutto.exe o che per esempio come nome ti invi qualche porcheria, capisci l'importanza dei controlli?
 

Discussioni simili