Diskuze: úprava kontaktního formuláře
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 21 zpráv z 21.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
404 je chyba, že daná stránka neexistuje. Jak se tedy jmenuje tvůj soubor s kontaktem? mailform.php?
Takovej soubor nemám...mám to celé nasypané v index.php se zbytkem stránky, z návodu jsem to pochopil že to tak má být? O_o
Nemá. Tam se tvoří celá stránka jenom v mailform.php. Vytvoř si tedy soubor mailform.php a tam dej svoje PHP včetně HTML. Pak by to už mělo jít.
aha !!! Iž jsem si toho všimnul, měl jsem tam mailform misto index.php....to je tak když si to nepřečtu po zkopírování =) nicméně už je mi to jasný proč a jak...ještě jsem se chtěl zeptat na jednu věc
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu
Tenhle řádek mi řiká, když jsou vyplněný tyhle položky, tak se email odešle, neměl bych tam přidat ještě teda takhle?:
$uspech = mb_send_mail($adresa, $predmet, $cislo, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu
A s tim, že se mi teda do emailu odešle adresa, předmět a číslo toho danýho člověka?
No moment, ale jak potom tu stránku zakomponuju do svý index stránky, kde to chci mít zobrazený, když ten mailform budu mít někde uplně jinde? Já jsem ted přepsal tohle:
if ($uspech)//Podmínka která hlásí uživateli jestli ano nebo ne
{
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
header('Location: index.php?uspech=ano');
exit;
}
A funguje to ...moc se mi nechce dělat nějaký obstrukce...ale jestli je to takhle napsaný špatně...?
Ne. Pěkně si to probereme.
$adresa | E-mail, kam se to má odeslat |
$predmet | Předmět E-mailu |
$_POST['zprava'] | Zpráva E-mailu |
$hlavicka | Nastavení E-mailu |
Tam posíláš nastavené věci. Pokud tedy chceš poslat i číslo uživatele, můžeš to udělat takto:
$uspech = mb_send_mail($adresa, $predmet, "Číslo: " . $_POST['cislo'] . "<br />" . $_POST['zprava'], $hlavicka);
Spojíš tedy jenom řetězce. Ale na tu zprávu by bylo si už lepší udělat proměnnou a tam spojovat řetězce. Tu proměnnou by jsi pak poslal.
Pokud to máš v tom indexu, nech to tak. Nevěděl jsem, jak to tam máš
udělaný.
Doporučoval bych ale si udělat na kontakt vlastní stránku (takže např.
mailform.php). Ale to je na tobě.
Aha, takže to se mi neodešle ani ten email, který mi tam ten člověk složitě vyplňuje, jestl itomu dobře rozumim, a měl bych udělat finální verzi asi takhle :
$uspech = mb_send_mail($adresa, $predmet, $_POST['cislo'], $_POST['zprava'], $_POST['email'] $hlavicka);
Proč si tam dával to odřádkování </br> ?
To máš zase špatně.
mb_send_mail() má jenom 4 parametry. Já jsem předtím spojoval řetězce, ty
předáváš parametry funkci.
Promiň, jestli je to nesrozumitelné, lépe to nedokážu popsat. Mrkni na tu
tabulku, co jsem ti psal výše. Tyto parametry má funkce mb_send_mail() a ty
musíš dodržet. Jenom obsah proměnných může být jiný.
Není to náhodou tím, že ti chybí přesměrování formuláře? Respektive "action"?
Ty máš:
<form method="post">
Mělo by být:
<form action="ODKAZ" method="post">
Jestli se teda nepletu, tak bez toho se formulář neodešle a neví. Pakliže se jedná o ten samí soubor, měl by být action="" bez udání odkazu...
No jo, ale v tomhle návodu...
http://www.itnetwork.cz/…ovy-formular
píše, že by to mělo fungovat tak, že se odešle i ten email, i jméno
...?
Když mám celý ten blok v
<form method="POST">
Tak by se měl odeslat celý ten blok, ne?
Odešle se jenom ta zpráva ($_POST['zprava']). E-mail se odešle, to máš nastavený v hlavičce a vidíš, od koho ti zpráva přišla. Pokud to číslo chceš odeslat, musíš ho dát do zprávy či předmětu a to spojením řetězců (viz. výše).
A kdybych to teda přiupravil nějak takhle:
$hlavicka = 'From:' . $_POST['email']; //Nastavení že se odesílá email
$hlavicka = 'From:' . $_POST['cislol'];
$hlavicka .= "\nMIME-Version: 1.0\n"; //Nemám se vzrušovat
$hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";//Kodování asi
Pokud umíš anglicky, from je odkud. Pokud chceš to číslo, spoj řetězce!
$predmet = "E-mail odeslal uživatel s číslem " . $_POST['cislo'];
Ne, to nemůžeš, tam patří mail, nikoli telefonní číslo. Pokud ho tam chceš, přidej ho do zprávy, například na konec..
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'] . "<br>==============<br>Tel: " . $_POST['cislo'], $hlavicka);
Už to asi chápu, rozumim tomu jak k předmětu připnout číslo, ale nevím proč hlavička neumí brát ze dvou míst, asi si to zbytečně komplikuju vymejšlením složitostí
Ty jsi to hlavně předtím přenastavil.
Nebo ještě můžeš upravit první řádek hlavičky takto:
$hlavicka = "From:" . $_POST['email'] . " <" . $_POST['cislo'] . ">";
Výsledek: tvuj@email.cz
<123456789>
S tímhle si však nejsem jist. Můžeš zkusit.
Už to chápu, jen pro uplnost, chci tomu rozumět uplně do podrobna, tak si to trošku zrekapituluju, vim že jsem otravnej, ale kdyby si mi do těch popisku mrknul, a připadně mi řekl kde píšu kravinu? Hodně by mi to pomohlo...
Začátek skriptu
$hlaska = '';
if (isset($_GET['uspech']))
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
if ($_POST) // V poli _POST něco je, odeslal se formulář
V tomhle definuju proměnou -hlaska-, v tý proměný je
podmínka....pokud dostanu -uspech-, tak se hlaska rovna "'Email byl úspěšně
odeslán, brzy vám odpovíme."
Soucasne s tim musi byt neco v poli POST...
Ted pokracovani podminky hlaska
if (isset($_POST['jmeno']) && $_POST['jmeno'] &&//Podmínka řiká že musí být vyplněný formulář
isset($_POST['email']) && $_POST['email'] &&
isset($_POST['zprava']) && $_POST['zprava'] &&
isset($_POST['cislo']) && $_POST['cislo'] &&
isset($_POST['rok']) && $_POST['rok'] == date('Y'))
Takze tady mi to definuje tu druhou podminku ze zacatku, ze v poli post musí něco být, a zároveň mi to definuje, co tam přesně musí být
Pokračování programu
$hlavicka = 'From:' . $_POST['email']; //Nastavení že se odesílá email
$hlavicka .= "\nMIME-Version: 1.0\n"; //Nemám se vzrušovat
$hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";//Kodování asi
$adresa = 'tbartolen@cz';//Email kam se odesilá
$predmet = 'Nová zpráva z mailformu';//Předmět odeslaného emailu abych v tom neměl bordel
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu
if ($uspech)//Podmínka která hlásí uživateli jestli ano nebo ne
Tady moc nechápu tu hlavičku, potom niz definuju adresu kam se email ma odeslat, predmet, do kterýho si pridam pomoci retezce to číslo, a do promeny uspech dávám funkci mb_send, která obsahuje ty presne dany ctyri polozky...pak dál už definuju jen zprávy co se vypisou v pripade uspechu a neuspechu...
Rozumim tomu tak nějak správně? Nechci bejt jen kopírovač =)
Takže ... začnu taky od začátku.
Proměnná $hlaska není podmínka, ale je to pouze zpráva pro uživatele, co se děje apod. Na začátku skriptu se definuje prázdná, jinak by to při výpisu házelo chybu (v tomhle případě notice), že tato proměnná není. Ten GET a POST chápeš správně.
Zase. $hlaska není podmínka, ale je to ta zpráva pro uživatele. Tu podmínku ale chápeš správně.
Jak se u hlavičky definuje to From - to je adresa, odkud se ten E-mail odeslal (resp. v E-mailové schránce uvidíš, od koho E-mail je). To kódování chápeš správně. K tomu se tam nastavuje, aby se to zobrazovalo jako HTML dokument. Takže pokud by ti někdo do té zprávy vložil např. tag strong, v E-mailové schránce by se ti to zobrazilo tučně. Ten zbytek chápeš správně.
Btw. máš ten E-mail, kam se to má odesílat, napsaný správně?
Zobrazeno 21 zpráv z 21.