ugrás a tartalomhoz

Fájl csatolása küldött emailhez PHP-ben

ariel · 2006. Ápr. 23. (V), 13.04
Sziasztok!

Eddig html-ben próbálkoztam olyan űrlapot készíteni, amihez file-t is lehet csatolni. Sajnos nem sikerült.
Most megpróbáltam php-ban csinál(gat)ni az űrlapot. Nem tanultam php-t, csak önszorgalomból, de hát az még nem sok. Eljutottam addig, hogy
<?php
$do = ($_POST['do']);

if($do == "send")
{
$recipient = "emailcimem##kukac##mail.hu";
$subject = ($_POST['subject']);
$name = ($_POST['name']);
$email = ($_POST['email']);
$message = ($_POST['message']);
$file = ($_POST['file']);     //itt szeretnék file-t csatolni az űrlaphoz
mail("$recipient", "$subject", "$message", "$email");

echo ("<p>Az ûrlapot sikeresen elküldte!</p>");
}
?>

El is küldi nekem azokat, amiket a mail függvényben megadtam, viszont ha egy mezővel többet írok bele kiiratásra, akkor az alábbi hibaüzenetet kapom:

Warning: mail(): SAFE MODE Restriction in effect. The fifth parameter is disabled in SAFE MODE.

Tehát gondolom a SAFE MODE nem tudja már az ötödik paramétert átküldeni. Ha több mezőt szeretnék átvinni, akkor vajon mi a megoldás? És hogyan kell file-t csatolni az űrlaphoz? (Valamint checkbox-ot és radio buttont.) Tudna valaki segíteni benne? Sajnos php-ben még nagyon-kezdő vagyok és ez fontos lenne!!
 
1

ott lehet fájlt csatolni?

Hojtsy Gábor · 2006. Ápr. 23. (V), 13.49
Hol írták, hogy az ötödik paraméterben lehet fájlt csatolni? Ilyen nincs. A csatolt fájlt az üzenet elkódolt változatával együtt az üzenet törzse kell hogy tartalmazza. Ilyen összetett levelek küldéséhez valamilyen kész függvénytár használata javasolt, mert kézzel nem ennyire egyszerű (a próbálkozásodnál jelentősen bonyolultabb) műveletsort igényel. A HTML_Mime_Mail kulcsszóval lehet elindulni a kereséssel.
2

Fájl csatolása küldött emailhez PHP-ben

Anonymous · 2006. Ápr. 23. (V), 15.53
Amellett, hogy rossz az elképzelés, miért van minden változó zárójelben?
És miért van minden POST-olt változó alapján érték adva új változónak?
És miért vannak a változók idézőjelbe rakva a mail() parancsban?
Öt sort spórolhatnál, ha az extract() parancsot használnád.
extract($_POST,EXTR_OVERWRITE);
mail($recipient, $subject, $message, $email);
Gyulus
3

Biztonság

Poetro · 2006. Ápr. 24. (H), 10.45
Azért ez eléggé lyukas volt. Mi van, ha nem csak ezen paraméterket POST-olja valaki, hanem még mondjuk 200 másikat is, amivel az egész kód a feje tetejére áll, és ha véltelen valami olyan változó van a POST-ban, ami egy ismert / ismeretlen bug miatt mondjuk kódként értelmeződik, akkor még súlyosabb problémák jöhetnek elő.
Szóval óvatosan azzal az extract-al, főleg az EXT_OVERWRITE paraméterrel. Még ha a beküldő nem is írt a csatolt kódjában különböző ellenőrző rutinokat, jobb azért a módszere mint az általad javasolt megoldás.
Persze másként is csinálhatta volna. Pl:
<?php
function validate($data, $field_name) {
 //validáljuk a tartalmat
 return $validated_data;
}
$fields = array('subject', 'name', 'email', 'message', 'file');
foreach($fields as $field) {
  $$field = validate($_POST[$field], $field);
}
mail($recipient, $subject, $message, $email);
?>