Autor Zpráva
crooner
Profil *
Dobrý den, mohu vás prosim poprosit o kontrolu tohoto kodu nejvíce mě trápí 4. řádek.
$subject = "=?utf-8?B?".base64_encode("Zpráva od " . $name . "z webu Marten Tattoo")."?="; 
$headers = "MIME-Version: 1.0/n";
$headers .= "Content-Type: text/plain; charset=utf-8/n";
$headers .= "From: =?UTF-8?B?".base64_encode ($name) ."?= <$email>/n";   
mail($your_email, $subject, $message, $headers);
crooner
Profil *
nemělo by to být spíš takto?
¨$headers .= "From: =?UTF-8?B?".base64_encode $name ."?= <".$email.">/n"";
prosím o radu


tak takhle ne, hází to parse error
l564
Profil
A zkoušel jste nakouknout do místního FAQ?
crooner
Profil *
no to jsem nezkousel.nenapadlo me,ze tam toto bude.nicmene i kdyz zakoduji hlavičku tak v textu zpravy nemam diakritiku.a to jsem tez nikde nenasel.netusim kde delam chybu,predmet funguje bez problemu.ma v v promenne message byt tez.based64.....?
l564
Profil
Vyzkoušel jste vůbec ty funkce které jsou v tom FAQ?

A pokud se nechcete mořit hlavičkami, tak doporučuji třídu phpmailer
crooner
Profil *
ok diky za radu
crooner
Profil *
tak jsem to vyzkoušel, ale mám chybu v zápisu a čeština není příliš slibná (kromě předmětu). php se učím, jsem na začátku a mam ve 13. řádku chybu v zápisu, ale nevím jak je to správně, protože když to přestane chybu hlásit, tak to hodí chybu v mailu. koukněte mi na to prosím, už si nevím moc rady. možná to předělám na phpmailer, ale rád bych věděl kde je tu chyba. předem děkuji
<?php 
$your_email = "cr.petrak@seznam.cz"; 
$empty_fields_message = "<p>Please go back and complete all the fields in the form.</p>"; 
$thankyou_message = "<p>Thank you. Your message has been sent.</p>"; 
$name = stripslashes($_POST['txtName']); 
$email = stripslashes($_POST['txtEmail']); 
$message = stripslashes($_POST['txtMessage']);
$message .= base64_encode($message);
$subject = "=?utf-8?B?".base64_encode("Zpráva od " . $name . "z webu Marten Tattoo")."?="; 
$headers = "MIME-Version: 1.0/n";
$headers .= "Content-Type: text/plain; charset=utf-8/n";
$headers .= "Content-Transfer-Encoding: base64";
$headers .= "From: =?UTF-8?B?" .base64_encode ($name) ."?=" . < $email > .";   
if (!isset($_POST['txtName'])) { 
?> 

<html> 
<head> 
        
  
     
</head> 

<body> 
        <form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" /> 

        <p>Your name:<br /> 
        <input type="text" title="Enter your name." name="txtName" class="txtName" /></p> 

        <p>Your email address:<br /> 
        <input type="text" title="Enter your email address." name="txtEmail" class= 
        "txtEmail" /></p> 

        <p>Your message:<br /> 
        <textarea title="Enter your message." name="txtMessage" rows="12" cols="40"> 
</textarea></p> 

        <p><label title="Send your message."><input type="submit" value="Send" class= 
        "submit" /></label></p><?php 
                                } 
                                elseif (empty($name) || empty($email) || empty($message)) { 
                                echo $empty_fields_message; 
                                } 
                                else { 
                                $referer = $_SERVER['HTTP_REFERER']; 
                                $this_url = ".$_SERVER["REQUEST_URI]http://".$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]; 
                                if ($referer != $this_url) { 
                                echo "You do not have permission to use this script from another URL."; 
                                exit; 
                                } 
                                mail($your_email, $subject, $message, $headers); 
                                echo $thankyou_message; 
                                } 
                                ?> 
</body> 
</html> 
abc
Profil
crooner:
Na 13. řádku máš blbě umístěné ty <>
Zkus takto:
$headers .= "From: =?UTF-8?B?" .base64_encode ($name) ."?=<" . $email .">;

Nemusíš ani používat PHPmailer, bohatě bude stačit fce ze zdějšího FAQ
Davex
Profil
Pro vložení znaku konce řádku do řetězce se používá kombinace \n a nikoliv /n. Na řádcích 11 a 12 chybí konec řádku úplně. V tomto konkrétním případě je pro vložení konce řádku do hlavičky dokonce vhodnější konstanta PHP_EOL.

$headers = "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-Type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: base64" . PHP_EOL;
$headers .= "From: =?UTF-8?B?" .base64_encode ($name) ."?= <$email>" . PHP_EOL;  

Ještě bys měl zpracování formuláře lépe zabezpečit a filtrovat znaky, které nemůže obsahovat e-mailová adresa - především znak konce řádku a ostatní "bílé" znaky.
crooner
Profil *
tak bohužel nefunguje ani jedna varianta ($name) ."?= <$email>" a ani x dalších, nezobrazuje se jméno ani mail:/


no takže pokrok, přehrál jsem web na jiný server a tam se jméno zobrazuje tak jak má, sice jsem ještě trošku poupravil 13. řádek, ale jede. co je horší, že v textu se nezobrazuje diakritika, i když celé stránky kóduju v utf-8. když přidám funkci base64_enc... tak přijde ještě větší změť znaků, zvláštní. netušíte kde by mohla být chyba?
crooner
Profil *
může být zápis takto?
$message = stripslashes($_POST['txtMessage']) . PHP_EOL;
$message .= "=?utf-8?B?".base64_encode($message)."?=" . PHP_EOL;
Davex
Profil
crooner:
může být zápis takto?
Ne, to je trochu šílené.

Správně by mělo být.

$message = chunk_split(base64_encode(stripslashes($_POST['txtMessage'])));

Také by se mělo definovat kódování stránky s formulářem v HTML.

<head>
<meta charset="utf-8">
crooner
Profil *
díky moc, hlavičku html mám zadanou v zoufalosti jsem jí doplnil i přesto, že skript includuju do index.php, použil jsem i skript z faq na auto utf, zkusím tvou radu a už se křížkuji, aby to fungovalo, ještě jednou dík


super, nevím sice jestli nejásám předčasně, ale na webu endora už všechno běží jak má, zobrazení správné. ale na webzdarma nikoliv. tak nevim co se tomu skriptu zase stalo...
Davex
Profil
Pokud se tomu skriptu něco stane, tak se obvykle rozbrečí a vypíše nějaké chybové hlášky. Teď si mohu jen tipnout, že na webzdarma používáš prehistorickou verzi PHP, kde ještě nebyla definována konstanta PHP_EOL, a proto si ji musíš dodefinovat sám.

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: