- Home
- Categorie
- Coding e Sistemistica
- PHP
- Upload file in php da zero
-
Upload file in php da zero
Salve ho un form di invio dati che spedisce a invio.php dove risiede il codice che invia la email a un indirizzo di posta elettronica. A questo voglio aggiungere un upload file, quindi quando ho compilato tutto il form in invio.php che invia il form sottoforma di email all'indirizzo di posta elettronica voglio che mi invia anche il file che ho uplodato.
questo è form.php
[php]
<form action="invio.php" method="post" id="modulo">//ci sono altri campi ma non sn necessari adesso
//nome cognome e testo ognuno con il suo id=""<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input name="file" type="file" class="Stile55" size="30" id="file"/><input name="submit" type="submit" id="submit" value="INVIA" />
<input name="cancella" type="reset" id="cancella" value="RESETTA" />
</span>
<label></label></form>[/php]
A questo punto deve interagire invio.php che viene richiamato da:
<form action="invio.php" method="post" id="modulo">invio.php
[php] <?php
if ((trim($_POST['oggetto']) != "") && (trim($_POST['testo']) != "") && (trim($_POST['nome']) != "") && (trim($_POST['cognome']) != "") && (trim($_POST['mail']) != "") && (trim($_POST['siamo_di']) != "") && (trim($_POST['provincia']) != "")) { //questo fa si che se i campi "oggetto" e "messaggio" sono vuoti la form non invia nessuna mail
$to = " \n [email protected]";
$headers = "From: " . $_POST['mail'] . "\n";
// oggetto della mail
$subject = "Modulo proveniente da www.miositonet";// corpo messaggio
$body = "Contenuto del modulo:\n\n";$body .= "Inviata da: " . trim(stripslashes($_POST["mail"])) . "\n"; //indirizzo e-mail che manda la mail, come si vede riprende l'id del campo destinato all'inserimento della mail del mittente
$body .= "nome: " . trim(stripslashes($_POST["nome"])) . "\n";
$body .= "cognome: " . trim(stripslashes($_POST["cognome"])) . "\n";
$body .= "oggetto: " . trim(stripslashes($_POST["oggetto"])) . "\n";
$body .= "testo: " . trim(stripslashes($_POST["testo"])) . "\n";
$body .= "mail: " . trim(stripslashes($_POST["mail"])) . "\n";$body .= "file: " . trim(stripslashes($_POST["file"])) . "\n"; //UPLOAD FILE
// invio mail
mail($to, $subject, $body, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...echo "La e-mail è stata inviata con successo. Grazie per averci contattato";
} else {// altrimenti
echo "Attenzione, deve compilare tutti i campi per l'invio dei dati, grazie.";}
?>[/php]
Ok, la email mi arriva ma vorrei aggiungere qualcosa a questo script che mi permetta di uploadare il file ed inviarmelo via email..
Ho provato un paio di codici ma non funzionavano, mi dava sempre errore di sintassi.......Sapreste darmi una mano?
grazie di cuore
-
Potresti uploadare il file sul tuo spazio web e magari inviarti il link nel messaggio di posta elettronica...
Semplice e funzionale
-
come se fa?
-
Allora, partiamo dalle basi: la pagina html deve contenere un form con "enctype=multipart/form-data" per poter caricare i file tramite php.
La pagina php che accoglie i dati deve avere questo codice:
[php] if ($_FILES['foto']['name'] != '')
{
$updir = "./dir_upload/";
if (!is_dir($updir))
mkdir($updir);
$ext = $_FILES['foto']['type'];
if ($FILES['foto'] < 500000)
{
if (($ext == 'image/jpeg') | ($ext == 'image/jpg') | ($ext == 'image/pjpeg') | ($ext == 'image/gif') | ($ext == 'image/png') | ($ext == 'image/x-png') | ($ext == 'image/bmp') | ($ext == 'image/tiff'))
{
$nome = str_replace(' ','',$FILES['foto']['name']);
$nome = str_replace("'","",$nome);
$new_path = $updir.$nome;
if (!move_uploaded_file($_FILES['foto']['tmp_name'],$new_path))
die ("errore nel caricamento file!");
else
{
$link_allegato = "url_assoluta_del_sito/$new_path";
/* invia la mail con nel testo la variabile $link_allegato */
}
}
}
}[/php]Spero sia chiaro, se non fosse così continua a chiedere spiegazionip.s. io l'ho fatto in modo ke controlli l'estensione dei file immagine, e una dimensione non superiore a 500k circa, ma tu puoi metterci quello che vuoi, sia come estensione ke come dimensione.
-
Ma alla fine che faccio invia modulo testo e file allegato insieme lo invio con il tasto invia modulo vero?
Poi, io all'inizio del form ho:
<form action="invio.php" method="post" id="modulo">tu mi dici
"enctype=multipart/form-data"Non è che non mi funziona ?
-
infatti l'enctype va inserito insieme a method, id, e action, risultando:
<form action="invio.php" method="post" id="modulo" enctype="multipart/form-data">Ovviamente per caricare un file, devi mettere nel tuo form:
<input type="file" name="allegato">E carichi il tutto col pulsante "invia" del form.
p.s. nel codice php che ti ho scritto prima, dove c'è la variabile "$_FILES['foto']", "foto" è il nome dell'input file ke hai nel form html; se nel form metti un input file con name="allegato" (come ho fatto poco prima), nella pagina php richiamerai quel valore con "$_FILES['allegato']".
-
Stò provando adesso
ma poi i file allegati dove vanno?
-
Vanno in una directory che io ho chiamato:
$updir = "./dir_upload/";
cioè una cartella che sta nella stessa posizione del file "invio.php" che elabora il tutto.
-
La crea da sola?
E il link nella email?
-
Nel codice php che ti ho scritto prima, se non esiste quella directory te la crea automaticamente.
Il link da mettere nella mail è l'url assoluto del tuo sito (compreso di http e di www) concatenato la variabile $new_path.
-
Mi carica i files uploadati sul server, come posso cambiarla directory? La voglio mettere in una cartella che si chiama uploads
e il link nella mia_email per vedere il file allegato?
-
Se vuoi cambiare directory, basta cambiare il valore della variabile $updir nel mio script php;
leggi sopra come è composto il link dell'allegato....
-
Così?
$link_allegato = "http://www.miosito.net/uploads.$new_path";
-
Sostituisci il "." tra uploads e $new_path con "/" e sei a posto!
-
La cartella si è creata dir_upload mi va bene ma i files non ci sono all'interno, non carica....
-
Hai provato a togliere il limite sulla dimensione e il filtro sulle estensioni? Se vuoi tenere queste limitazioni, sei costretto a rispettarle...
-
Ho fatto > al posto di <
if ($_FILES['file'] > 500000)
qua dici?
Non funziona lo stesso.
-
Prova a scrivere** if (true)**, toglilo per ora il controllo, così vediamo se è quello il problema; e così fai anche dove controlla l'estensione del file da caricare; sono quei 2 gli unici controlli che potresti non rispettare nel caricare il file, perchè i permessi di scrittura nella cartella ci sono tutti (0777 di default), l'unico intoppo possono essere quei 2 controlli.
Toglili e riprova.
-
Niente ancora... non carica li files....
-
Ma if (true)
al posto di
if ($_FILES['file'] < 500000)?
Ma alla fine non ci vuole ---> ;