Autor Zpráva
Darell
Profil *
Prosím o radu na co bych se měl zaměřit. Vytvořil jsem formulář (1.) s možností připojení souboru (chtěl bych jpeg, ale zatím to zkouším s txt, ale to není teď důležité), ktery je obsluhován scriptem (2.) formular.php . Textova cast přijde v pořádku na e-mail, ale příloha se zobrazí, pod nazvem "attachment" s nulovou velikostí souboru a bez přípony (vlastně i pokud přílohu nevyberu). A ještě se mě tam objeví další příloha "část 1.2.txt" opět s textovým obsahem formuláře...což mě tak netrápí. Vytvořil jsem na webserveru adresář temp, s právy 777 ..., ale zrejme se tam nic nezapisuje, nějak na to nemůžu přijít, kde je chyba. No tedy vím, že je mezi klávesnici a židlí. Vím že se to tady řešilo, ale odpověď, konkrétně na tohle jsem zde nenašel


(1.) formular

<form action="formular.php" method="post" ENCTYPE="multipart/form-data" style="font-size: 12px; line-height: 18px; font-weight: bold; font-family: Arial;
 position: relative; width: 405px; height: 350px; top: 0px; float: left margin-left: 0px; margin-right: 0px;
  margin-top: 15px; margin-bottom: 0px">

<input type="radio"  name="puntik" value="Diplomatický pas" style="margin-right: 5px"> Diplomatický pas<br>

<input type="radio" name="puntik" value="Cestovní pas" style="margin-right: 8px" checked>Cestovní pas  <br>   <BR>

Jméno: <input type=text size=16 name="jmeno" value="" style="margin-left: 68px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px"> <br>

Příjmení: <input type=text size=16 name="prijmeni" value="" style="margin-left: 60px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px"> <br>

Datum Narození: <input type=text size=16 name="dnarozeni" value="" style="margin-left: 17px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px"> <br>

Místo narození: <input type=text size=16 name="mnarozeni" value="" style="margin-left: 24px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px"> <br>  <BR>

Fotografia:  <input type=file name="fotka" value="" style="margin-left: 51px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px" > <br> <BR>

Doplňující údaje: <textarea rows="4" cols="15" name="dlouhytext" value="" style="margin-left: 20px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px">
</textarea><br>   <BR><BR>

   <input type="reset" value="vymazat" style="margin-left: 115px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px" >

   <input type=submit value=odeslat style="margin-left: 52px; margin-right: 0px;
  margin-top: 0px; margin-bottom: 0px">
</form>


(2.) script
<?

$jmeno =" jmeno ".$_POST['jmeno']." \r\nprijmeni ".$_POST['prijmeni']." \r\ndnarozeni ".$_POST['dnarozeni']." \r\nmnarozeni ".$_POST['mnarozeni']." \r\nfotka ".$_POST['fotka']." \r\ndlouhytext ".$_POST['dlouhytext'].
" \r\npuntik ".$_POST['puntik'];


if ($akce == "odeslat") { /* Bylo stisknuto tlacitko Odeslat */


$nazevsouboru = $fotka_name;
 
if ($fotka_type == "text/plain" or $fotka_type="text/html") {

if (copy ($fotka, "temp/$nazevsouboru")) {
print "</table><center><span id=text>File $nazevsouboru with length $soubor_size b was validated succesfully.
";
}
else {
print "<span id=text>There was an error. Try it again!
";
}
}
else {
print "<span id=text>This is not MIME type file.
";
} 

if ($fotka_name == "") { /* nebyla vybrana priloha, posleme e-mail obycejne */

if ( Mail("pas@zemeslezska.eu", $jmeno ) )
echo "Formulář byl odeslán";
else echo "Formulář se nepodařilo odeslat";
 }
  }

else {                 /* priloha byla vybrana */
                       /* nejprve sestrojime hlavicky */

$envelope["from"] = "pas@zemeslezska.eu";
$envelope["to"] = "pas@zemeslezska.eu";

/* nyni sestrojime nekolik casti dopisu */
/* 1. cast - uvodni, tou rekneme, ze dopis ma vice casti s ruznymi typy dat */

$part1["type"] = TYPEMULTIPART;
$part1["subtype"] = "mixed";

 /* 2. cast - do dopisu pripojime prilohu */
 /* nejprve zadany soubor nacteme */


$f = fopen ("temp/$fotka_name", "r"); /* otevren pro cteni */
$obsah = fread ($f, filesize("temp/$fotka_name")); /* nacteme obsah do promenne */
fclose ($f); 

//v octet-stream je parametr pro name

$part2["type"] = TYPEAPPLICATION;
$part2["encoding"] = ENCBINARY;
$part2["subtype"] = "octet-stream; name=\"" . BaseName($fotka_name) . "\"";
$part2["description"] = $fotka_name;
$part2["contents.data"] = "$obsah"; 

 /* 3. cast - do dopisu vlozime zadany text */
    $part3["type"] = TYPETEXT;
    $part3["subtype"] = "plain";
    $part3["description"] = "text";
    $part3["contents.data"] = $jmeno;

 /* Cely dopis ulozime do pole body */
    $body[1] = $part1;
    $body[2] = $part2;
    $body[3] = $part3;

/* celou zpravu vytvorime a ulozime do promenne $zprava: */
    $zprava = imap_mail_compose ($envelope, $body);



    /* drive nez posleme zpravu funkci Mail musime rozdelit
       zvlast hlavicku a zvlast telo: */

    $pom = StrPos($zprava, "\r\n\r\n");
    $hlavicka = SubStr($zprava, 0, $pom+2);
    $telo = SubStr($zprava, $pom, StrLen($zprava) - $pom);

    if (mail ("pas@zemeslezska.eu", 'Zpráva z webu', $telo, $hlavicka)) {
       print "<h4>E-mail byl úspěšně odeslán!</h4>";
    }
    else {
       print "<h4>E-mail se nepodařilo odeslat!</h4>";
    }
  }



?>
AM_
Profil
Zkus použít nějakou hotovou třídu pro práci s maily, např. phpmailer (nejsem si 100% jistý, že podporuje přílohy, pokud ne, tak jinou), funkce mail() je taková dost neohrabaná.
Darell
Profil *
Asi to zkusím s tím phpmailerem, když ho většina doporučuje. ..Díky
fopen
Profil *
celkom sa osvedcil phpmailer
ale aj tak je lepsie kotrolovat upload
if(@is_uploaded_file($_FILES['fotka']['tmp_name'])){
	$mail->AddAttachment($_FILES['fotka']['tmp_name'], $_FILES['attachment']['name']);
} else {
	echo'Error: '.$_FILES['fotka']['error'];
}

a v tvojom skripte nevidim sparcovanie premennej $_FILES , mozno tam je chyba...

formularovy prvok typu "file" nepotrebuje parameter value
toto uplne postacuje
<input type="file" name="fotka">
AM_
Profil
fopen
na řádku 2 má být zřejmě 'fotka' místo 'attachment', ne?
fopen
Profil *
AM_
no jasne, sory za preklep...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: