Terve! Oisko kellään valmista esimerkkiä palautelomakkeesta johon voi liittää liitetiedoston? Itse olen miettinyt & etsinyt pääni puhki, enkä keksinyt koodia. Kiitän jokaisesta vastauksesta!
No eikös tuo mene ihan normaalilla tiedoston upload menetelmällä? Muistat vaan että se pitää vastaannottaa sitten $_POST metodilla. Mallia voi katsella koodivinkeistä löytyvistä tiedosto upload scripteistä.
Mikäs vikana, ei tule sähköpostiin tiedostoa?
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> Nimi:<br> <input type="text" name="nimi"><br> Email:<br> <input type="text" name="email"><br> Aihe:<br> <input type="text" name="aihe"><br> Viesti:<br> <textarea name="viesti"></textarea> <br> <input type="file" name "filu"> <input type="submit" value="Lähetä"> </form> <?php // Kerätään lomakeen kentät $aihe = $_POST['aihe']; $nimi = $_POST['nimi']; $email = $_POST['email']; $viesti = $_POST['viesti']; $tiedosto = $_POST ['filu']; // Otetaan IP $ip = $_SERVER['REMOTE_ADDR']; // Käsitellään jos nimi kenttä on annettu if (isset($_POST['nimi'])) { // Muodostetaan rivi, mikä lähetetään sähköpostiviestinä $posti = "Viesti:\n$viesti\nLähettäjä: $nimi | Email: $email | IP: $ip | Tiedosto: $tiedosto"; // Lähetetään viesti VAIHDA OSOITTEESI! mail("omaosoitteesi",$aihe,$posti); } ?>
$_FILES sisältää tiedot tiedostosta. Siitä löytyy useampi tieto: size, tmp_name, name ja type
tmp_name = tiedoston väliaikaissijainti ja -nimi palvelimella
name = tiedoston nimi (koneella jolta lähetettiin)
type = tiedostomuoto
size = tiedoston koko
Käytännössä siis:
// kopioi sisältö $tiedosto = file_get_contents($_FILES['filu']['tmp_name']); // poista väliaikaistiedosto unlink($_FILES['filu']['tmp_name']);
Ei toimi vieläkään, mikä nyt olisi vikana? (ei lähetä tiedostoa sähköpostiin, muut formin tiedot kyllä tulevat)
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post"> Nimi:<br> <input type="text" name="nimi"><br> Email:<br> <input type="text" name="email"><br> Aihe:<br> <input type="text" name="aihe"><br> Viesti:<br> <textarea name="viesti"></textarea> <br> <input type="file" name "filu"> <input type="submit" value="Lähetä"> </form> <?php // Kerätään lomakeen kentät $aihe = $_POST['aihe']; $nimi = $_POST['nimi']; $email = $_POST['email']; $viesti = $_POST['viesti']; $tiedosto = file_get_contents($_FILES['filu']['tmp_name']); // poista väliaikaistiedosto unlink($_FILES['filu']['tmp_name']); // Otetaan IP $ip = $_SERVER['REMOTE_ADDR']; // Käsitellään jos nimi kenttä on annettu if (isset($_POST['nimi'])) { // Muodostetaan rivi, mikä lähetetään sähköpostiviestinä $posti = "Viesti:\n$viesti\nLähettäjä: $nimi | Email: $email | IP: $ip | Tiedosto: $tiedosto"; // Lähetetään viesti VAIHDA OSOITTEESI! mail("oma.@osoite.fi",$aihe,$posti); } ?>
Mahtaisikohan johtua siittä että yrität tekstinä siirtää binääristä dataa joten se pitäisi koodata vaikka base64 formaattiin ennen sähköpostiin lisäämistä. Ihan vaan tällainen villi veikkaus päästä.
rAzr kirjoitti:
Ei toimi vieläkään, mikä nyt olisi vikana? (ei lähetä tiedostoa sähköpostiin, muut formin tiedot kyllä tulevat)
Ei se ihan noin tapahdu.
Ensinnäkin tuo upload-homma on "viallinen".
Form-elementtiin täytyy tehdä lisäys:
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post" ENCTYPE="multipart/form-data">
Liitetiedosto täytyy määritellä myös lähetys-koodissa:
Content-Type: "application/octet-stream"
Tuota väliaikaistiedostoa files-tmp_name ei tarvitse erikseen poistaa, se posituu automaattisesti muutaman sekunnin kuluttua. Eri asia, jos kopioit tiedoston johonkin verkkosivulla olevaan hakemistoon.
Aihe on jo aika vanha, joten et voi enää vastata siihen.