Stránka 1 z 1

php mail - nejdou české znaky

Napsal: 27 zář 2013 09:26
od djarchee@gmail.com
Zdravím Vás, vím že mi řeknete, že se to tady už řešilo, věřte, že jsem prolezl hodně témat, abych našel odpověď, ale jsem spíše bastlič a ani jedna odpověď mi nepomohla, protože jsem nepřišel na to, jak to upravit.

No zkrátka - mám na webu formulář pro odesílání zprávy na email:

Kód: Vybrat vše

<form action="engine.php" method="post">
<input class="poptavky_input" name="name" placeholder="Jméno *" /><br/>
<input class="poptavky_input" name="email" placeholder="E-mail *" /><br/>
<input class="poptavky_input" name="spam" placeholder="Opište číslo z obrázku *"/> <img src="http://plasterhlinsko.cz/TEST/img/captcha.jpg" /><br/>
<textarea class="poptavky_text" name="zprava" placeholder="Text zprávy *"></textarea><br/>
<input type="submit" value="Odeslat"/> <p class="poptavky_p">Položky označené hvězdičkou (*) je nutno vyplnit. </p>
</form>


Jenomže když to pošlu, v Outlooku to v obsahu zprávy píše nesmysly. (Zvláštní že hlavička diakritiku má)
Pokud si ten email čtu přes webové rozhraní gmailu - text emailu se zobrazí správně s diakritikou - bohužel email musím příjmat do Outlooku, takže mi to tak nestačí.

tady je obsah souboru engine.php

Kód: Vybrat vše

<?
$predmet = $_POST['predmet'];
$email = $_POST['email'];
$name = $_POST['name'];
$spam = $_POST['spam'];
$zprava = $_POST['zprava'];


if ($email!="" and  $name!="" and $zprava!="" and $spam=="1975") // Pokud není políčko předmět, mail, zprava prázné a spam se rovná (==) 1975, pokračuj v kódu
{
Mail("djarchee@gmail.com", "POPTÁVKA", "ODESILATEL: $name, ZPRÁVA: ". $zprava, "From: " . $email );
echo "<p><strong>E-mail byl úspěšně odeslán. Děkujeme za Váš zájem.</strong>.</p>";
}
else
{
echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong>. Opište prosím <b>číslo z obrázku</b> a vyplňtě chybějící údaje.</p>";
}
?>


Oba soubory mám v kodování UTF-8.
Mohli byste prosím poradit co s tím?

A ještě mám jeden dotaz, při úspěšném odeslání emailu se vypíše text na bílou stránku a uživatel potom musí dát "zpět"
co mám dát místo tohoto:

Kód: Vybrat vše

echo "<p><strong>E-mail byl úspěšně odeslán. Děkujeme za Váš zájem.</strong>.</p>";

aby se zobrazilo pouze jen nějaké upozornění - tabulka jako ve windows, která stačí odkliknout.. ?

Předem mockrát děkuji za radu!!
Archee

Re: php mail - nejdou české znaky

Napsal: 27 zář 2013 12:52
od CZechBoY
Zdravím,
tohle téma tu dlouho nebylo, nicméně se to tu minimálně 5× řešilo.
Stačí do kódu přidat hlavičky, které obsahují informaci (nejen) o kódování emailu.


Takže tvůj nový php kód bude

Kód: Vybrat vše

<?php
$predmet = trim($_POST['predmet']);   // k čemu?
$email = trim($_POST['email']);
$name = trim($_POST['name']);
$spam = $_POST['spam'];
$zprava = trim($_POST['zprava']);

if (!empty($email) and  !empty($name) and !empty($zprava) and $spam=="1975") // Pokud není políčko předmět, mail, zprava prázdné a spam se rovná (==) 1975, pokračuj v kódu
{
  $headers = "MIME-Version: 1.0\n";
  $headers .= "Content-Type: text/plain; charset=UTF-8\n";
  $headers .= "Content-Transfer-Encoding: 8bit\n";
  $headers .= "From: " . $email . "\n";

  mail("djarchee@gmail.com", '=?UTF-8?B?' . base64_encode('POPTÁVKA') . '?=', "ODESÍLATEL: $name, ZPRÁVA: " . $zprava, $headers);
  echo "<p><strong>E-mail byl úspěšně odeslán. Děkujeme za Váš zájem.</strong>.</p>";
}
else
{
  echo "<p>Váš e-mail se <strong>nepodařilo odeslat</strong>. Opište prosím <b>číslo z obrázku</b> a vyplňtě chybějící údaje.</p>";
}
?>

Re: php mail - nejdou české znaky

Napsal: 27 zář 2013 19:40
od djarchee@gmail.com
Mockrát děkuji! To bylo přesně ono! :) s těmi hlavičkami jsem to četl, ale nevěděl jsem jak to dát do kupy :/ jsem ještě máslo no :-D

Ještě jsem se chtěl zeptat, šlo by místo toho "echo" na vypsání textu do nové stránky dát jen nějakou "windowsovskou" tabulku, nebo něco podobného,
aby to uživatel jen potvrdil OK, aby nebylo nutné vracet se zpět na předchozí stránku?

Re: php mail - nejdou české znaky

Napsal: 27 zář 2013 20:13
od CZechBoY
Není zač, každý nějak začínal.

Můžeš použít javascript - např. funkci alert, která je dostupná v základním javascriptu (žádný framework - jquery, ...). Avšak pokud bude mít uživatel javascript vypnutý (pár procent uživatelů to tak dělá) tak se mu hláška nezobrazí a neví tedy jestli se něco stalo nebo ne.
Takže můžeš použít nějaký takovýto kód:

Kód: Vybrat vše

<?php
$predmet = trim($_POST['predmet']);   // k čemu?
$email = trim($_POST['email']);
$name = trim($_POST['name']);
$spam = $_POST['spam'];
$zprava = trim($_POST['zprava']);

if (!empty($email) and  !empty($name) and !empty($zprava) and $spam=="1975") // Pokud není políčko předmět, mail, zprava prázdné a spam se rovná (==) 1975, pokračuj v kódu
{
  $headers = "MIME-Version: 1.0\n";
  $headers .= "Content-Type: text/plain; charset=UTF-8\n";
  $headers .= "Content-Transfer-Encoding: 8bit\n";
  $headers .= "From: " . $email . "\n";

  mail("djarchee@gmail.com", '=?UTF-8?B?' . base64_encode('POPTÁVKA') . '?=', "ODESÍLATEL: $name, ZPRÁVA: " . $zprava, $headers);
  echo "<div id=\"notifikace\" class=\"uspech\">E-mail byl úspěšně odeslán. Děkujeme za Váš zájem.</div>";
}
else
{
  echo "<div id=\"notifikace\" class=\"neuspech\">Váš e-mail se nepodařilo odeslat.<br/> Opište prosím číslo z obrázku a vyplňte chybějící údaje.</div>";
}
?>
<script type="text/javascript">
document.getElementById("notifikace").style.display = "none";
alert(document.getElementById("notifikace").innerHTML.replace("<br/>", "\n"));
</script>

Re: php mail - nejdou české znaky

Napsal: 30 zář 2013 10:09
od djarchee@gmail.com
Díky moc! Ta hláška vypadá přeně tak, jak jsem si představoval.. akorát se otevře s tou tabulkou prázdná (bílá) stránka a uživatel musí stejně kliknout v prohlížeči na "zpět"..
Jakým způsobem se toho zbavím?

Re: php mail - nejdou české znaky

Napsal: 30 zář 2013 10:10
od CZechBoY
Lze použít javascript - ajax.

Re: php mail - nejdou české znaky

Napsal: 30 zář 2013 10:18
od djarchee@gmail.com
Tak jsem to vyřešil přidáním:

Kód: Vybrat vše

history.go(-1);