Diskuze: Kontaktní formulář
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
HTML meta charset je na webu Palavaart nastaven správně pomocí
<meta charset="utf-8">
-> není třeba měnit (navíc je to vhodnější než způsob pomocí Content-type).
Záleží, kam ústí formulář. Jestli do emailu, bude to asi hlavička (viz výše), pokud do databáze, bude to kódování databáze. Jinak by mohl být problém také v PHP (mb_internal_encoding).
Kódování znaků jsem určil v hlavičce HTML dokumentu
<meta charset="utf-8">
pak jsem kódování doplnil ještě do HTML formuláře
<form id="contactForm" name="sentMessage" accept-charset="UTF-8" novalidate>
a taky do PHP souboru (mimochodem PHP neovládám)
<?php
mb_internal_encoding("UTF-8");
// Check for empty fields
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['phone']) ||
empty($_POST['message']) ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
{
echo "No arguments Provided!";
return false;
}
$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$phone = strip_tags(htmlspecialchars($_POST['phone']));
$message = strip_tags(htmlspecialchars($_POST['message']));
// Create the email and send the message
$to = '[email protected]'; // Add your email address inbetween the '' replacing [email protected] - This is where the form will send a message to.
$email_subject = "Webový kontaktní formulář: $name";
$email_body = "Mate novou zpravu z weboveho kontaktniho formulare.\n\n"."Zde jsou detaily:\n\nJmeno: $name\n\nEmail: $email_address\n\nTelefon: $phone\n\nZprava:\n$message";
$headers = "From: [email protected]\n"; // This is the email address the generated message will be from. We recommend using something like [email protected].
$headers .= "Reply-To: $email_address";
mail($to,$email_subject,$email_body,$headers);
return true;
?>
a stejně mi chodí zprávy se špatnými znaky.
Místo mail použij funkci http://php.net/…end-mail.php, jinak k tomu emailu přidej
ještě
<code>
$headers .= "Content-Type: text/plain; charset="UTF-8"";
</code>
a určitě ti to už půjde.
Ahoj, tento skript je mi nějaký povědomí. Buď jsi to tak trefil nebo ho
máš z nějakého webu odkud jsem kdysi čerpal také a také jsem se nazlobil
s češtinou.
Výsledek, který já používám a funguje mi je:
$to = '[email protected]' ;
$subject = "=?utf-8?B?".base64_encode('Předmět emailu')."?=" ;
$message = 'Text emailu' ;
$headers = 'MIME-Version: 1.0'."\n" ;
$headers .= 'Content-type: text/html; charset=utf-8'."\n" ;
$headers .= 'From: Jmeno od koho <[email protected]>'."\n" ;
mail($to,$subject,$message,$headers) ;
Vložil jsem jen funkci a jak je naplněna hlavičkou.
Příklad od Lasvit by také pomohl, ale pokud ve formátu emailu máš i nějaké html formátování, tak ti to nevezme, jelikož je Content-Type prostý plaintext. Můj příklad si poradí s češtinou jak v těle emailu, tak i v předmětu. Jen se mi často stává, že zprávy které odešle webhosting přijdou většinou do spamu. Na outlook doménách kolikrát nepřijde vůbec, protože fakticky ten email odesílá webhosting a hlavičkou říkám zobraz email od někoho jiného. Když jsem faktickou emailovou adresu webhostingu dal do výjimek, tak email normálně dorazil i na outlook.
Samozřejmě v mém příkladu jsem ti nekopíroval i případné kontroly zprávy, které mají být samozřejmostí.
Díky za rady, trochu jsem script podle nich poupravil a předmět emailu se mi už zobrazuje česky, text emailu však pořád se špatnými znaky.
<?php
mb_internal_encoding("UTF-8");
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['phone']) ||
empty($_POST['message']) ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
{
echo "No arguments Provided!";
return false;
}
$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$phone = strip_tags(htmlspecialchars($_POST['phone']));
$message = strip_tags(htmlspecialchars($_POST['message']));
$to = '[email protected]';
$email_subject = "=?utf-8?B?".base64_encode('Webový kontaktní formulář')."?=";
$email_body = "Máte novou zprávu z webového kontaktního formuláře.\n\n"."Zde jsou detaily:\n\nJmeno: $name\n\nEmail: $email_address\n\nTelefon: $phone\n\nZprava:\n$message";
$headers = 'MIME-Version: 1.0'."\n";
$headers .= 'Content-type: text/html; charset=utf-8'."\n";
$headers = "From: [email protected]\n";
$headers .= "Reply-To: $email_address";
mail($to,$email_subject,$email_body,$headers);
return true;
?>
Jak jsem již psal.... použij http://php.net/…end-mail.php
Já teda ve svém skriptu nepoužívám ten
mb_internal_encoding("UTF-8");
Pokud máš celou stránku a soubor kódovaný v UTF-8, tak je to zbytečné.
Zkus případně ještě vyhodit
$headers .= "Reply-To: $email_address";
to já nepoužívám a ani ti to k ničemu moc není. Mail stejně posíláš jen jednou a to na předem přesně zadaný email v $to.
Ještě se mi nelíbí toto
headers = "From: [email protected]\n";
Já bych to použil spíš takto:
headers = 'From: INFO palavaart.cz <[email protected]>'."\n";
ale asi by to mělo být jedno.
Pak pokud máš mail kódovaný v Content-type: text/html, tak trochu postrádají smysl htmlspecialchars(), ten ti odstraní HTML značky a převede ti je na entity (klasické znaky). Spíš bych použil pro odstranění HTML značek strip_tags(), pokud chceš řetězec bez HTML znaků.
Já vřele doporučuji phpMailer(https://github.com/…er/PHPMailer), umí to i autentizaci přes SMTP a odesílání příloh, tam stačí jen dát:
$mail->CharSet = "UTF-8";
Zobrazeno 12 zpráv z 12.
