Autor | Zpráva | ||
---|---|---|---|
hladis Profil |
#1 · Zasláno: 2. 7. 2012, 12:13:53
Dobrý den... Mám skript na odeslání mailu:
<?php @session_start(); $to = $_POST['to']; $title= $_POST['title']; $from = $_POST['from']; $text = $_POST['text']; $capchta = $_POST['captcha']; if ($_SESSION['captcha'] != $_REQUEST['captcha']) echo("Špatně opsán kód!"); elseif ($title == "") echo("Nenapsal jsi žádný předmět!"); elseif ($from == "") echo("Zadejte vaši přezdívku/emailovou adresu!"); elseif ($text == "") echo("Nenapsal jsi žádný text!"); elseif (!ereg("^.+@.+\\..+$", $to)) echo("Adresa příjemce není platnou emailovou adresou!"); elseif (!mail($to, $title, $text, 'From: ' . $from)) echo("Email se nepodařilo odeslat."); else echo("Email byl úspěšně odeslán."); ?> a chtěl bych tam šikovně vložit podmínku, která upravuje proměnnou "from" - když bude prázdná, tak bude mít hodnotu "neodpovídat", a když bude odpovídat podmínce "(!ereg("^.+@.+\\..+$", $to))", tak se odešle jako emailová adresa. Dále bych chtěl k odeslanému textu nějaký text přidat. Jak se to dělá, to si najdu sám, ale nevím, jak je to se znaky - vím, že kdybych do toho napsal prostě <a href="http://adresa">adresa</a>, tak mi to neodešle. PHP moc neovládám, a proto se obracím na vás - věřím, že mi pomůžete... Děkuji :) |
||
ATi Profil |
elseif(empty($from)) { $from = "neodpovidat"; } elseif ($from == "") echo("Zadejte vaši přezdívku/emailovou adresu!"); Udělal bych to takhle,protože porovnávat dvě proměnné v jedné podmínce není dobré. Tedy: $to = $_POST['to']; $title= $_POST['title']; $from = $_POST['from']; $text = $_POST['text']; $capchta = $_POST['captcha']; if ($_SESSION['captcha'] != $_REQUEST['captcha']) echo("Špatně opsán kód!"); elseif ($title == "") echo("Nenapsal jsi žádný předmět!"); elseif ($text == "") echo("Nenapsal jsi žádný text!"); elseif (empty($from)) { $from = "neodpovidat"; } elseif (!ereg("^.+@.+\\..+$", $from)) echo("Adresa příjemce není platnou emailovou adresou!"); elseif (!ereg("^.+@.+\\..+$", $to)) echo("Adresa příjemce není platnou emailovou adresou!"); elseif (!mail($to, $title, $text, 'From: ' . $from)) echo("Email se nepodařilo odeslat."); else echo("Email byl úspěšně odeslán."); ?> |
||
Amunak Profil |
ATi
Jestli se nepletu, zapsal jsi skoro to samé, jen trochu jinak. Skript se na tom zastaví tak jako tak, protože se řetězec podmínek if/elseif/else zastaví. hladis: Ještě by taky bylo dobré ověřovat, jestli jsou pole vůbec odeslaná. Jinak bude to přiřazení na začátku házet notice. Nepoužívej ereg, ale preg_match. Funkce ereg je zastaralá. Připsal jsem tam taky definici kódování, pokud používáš utf-8, je pak větší šance, že se v mailu diakritika nerozbije. V kódu jsem zvýraznil ty dvě věci které jsi tam chtěl přidat. Netestoval jsem to a psal jsem to tady na diskuzi, takže je možné, že jsem se někde přepsal. define('PRIDANY_TEXT', '<a href="http://adresa">adresa</a>'); define('EMAIL_MATCH', '~^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$~i'); $odeslat = true; foreach(array('to', 'title', 'text', 'captcha') as $k) { if(!isset($_POST[$k]) || empty($_POST[$k])) { echo 'Položka "' . $k . '" musí být vyplněná.'; $odeslat = false; ${$k} = $_POST[$k]; } } if(!isset($_POST['from']) || empty($_POST['from'])) $from = 'neodpovídat'; elseif(preg_match(EMAIL_MATCH, $_POST['from'])) { $from = $_POST['from']; } else $odeslat = false; if ($_SESSION['captcha'] != $_REQUEST['captcha']) { echo("Špatně opsán kód!"); $odeslat = false; } if(!preg_match(EMAIL_MATCH, $to)) { echo "Adresa příjemce není platnou emailovou adresou."); $odeslat = false; } $head = "MIME-Version: 1.0\r\n" . "From: $from\r\n" . "Content-type: text/plain; charset=UTF-8"; if($odeslat) { if (!mail($to, '=?UTF-8?B?' . base64_encode($title) . '?=', $text . PRIDANY_TEXT, $head)) echo("Email se nepodařilo odeslat."); else echo("Email byl úspěšně odeslán."); } |
||
koudelacek Profil * |
#4 · Zasláno: 3. 7. 2012, 16:56:36
Proč je ten titulek zakodovany ?
|
||
Amunak Profil |
#5 · Zasláno: 3. 7. 2012, 17:00:09
koudelacek:
Právě kvůli češtině. |
||
koudelacek Profil * |
#6 · Zasláno: 3. 7. 2012, 17:03:27 · Upravil/a: koudelacek
Amunak:
Pokud si tam nastavil kódování utf8, tak není problém ne ? ( já nevím jak to je, ptám se, ať kdyžtak vím, protože taky něco zrovna dělám a stačilo mi přidat utf8 a diakritika mi běží ok ) A ještě pokud tam chce cpát odkazy, tak Content-type: text/html
|
||
Amunak Profil |
#7 · Zasláno: 3. 7. 2012, 17:15:49
koudelacek:
Ten content-type je pravda, přemýšlel jsem nad tím, ale pak by taky bylo vhodné vstup od uživatele ošetřit pomocí htmlspecialchars. Nejsem si jistý jestli je bezpečné předmět nezakódovat. Podle normy je to takhle správně, a je to přinejhorším stejně spolehlivé jako to nechat nezakódované. |
||
koudelacek Profil * |
#8 · Zasláno: 3. 7. 2012, 17:21:39
A pokud si předmět píšu vlastní ?
|
||
Amunak Profil |
#9 · Zasláno: 3. 7. 2012, 17:25:57
koudelacek:
Pokud je bez diakritiky, normálně ho tam zadáš. Jestli s diakritikou, tak ho prostě vepíšeš tam kde je $title . A příště si založ vlastní téma.
|
||
koudelacek Profil * |
#10 · Zasláno: 3. 7. 2012, 17:29:58
Omouvám se a díky.
|
||
Časová prodleva: 12 let
|
0