Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Palautelomake jossa myös liitetiedosto?

rAzr [29.09.2007 21:53:01]

#

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!

lapm [29.09.2007 22:42:22]

#

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ä.

rAzr [30.09.2007 22:01:31]

#

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);
}
?>

Merri [30.09.2007 22:22:52]

#

$_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']);

rAzr [06.10.2007 20:50:18]

#

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);
}
?>

lapm [09.10.2007 07:41:13]

#

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ä.

pistemies [14.10.2007 17:49:01]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta