
PHP - formulář na e-mail
Dobrý den,
už dva dny dělám na php formuláři, který by mě ze stránky odeslal zprávu na můj e-mail, ale nedaří se a nedaří se. Jednou je problém s kódováním češtiny, podruhé zase s funkcí else, že mě hláška 'Váš e-mail byl úspěšně odeslán' vyskočí někde na jiné stránce, atd, atd...
Neměl by tedy někdo jednoduchý PHP skript, který vše vyřeší, už jsem četl diskuze, články, ale asi jsem úplně blbej.
Zdroj html:
<form method="post" action="skript.php">
<p>Vaše jméno:</p>
<p><input name="jmeno" /></p>
<p>Zpráva:</p>
<p><textarea name="zprava"></textarea></p>
<p><input type="submit" value="Odeslat" /></p>
Neměl by teda někdo jednoduchej skript, stačí mi dvě položky, jméno a zpráva, taky jsem zkoušel něco jako:
<?
function vypisForm($jmeno,$predmet,$text) {
echo "
<form method=post action=\"mail.php\">
Jméno:<br>
<input name=jmeno value=\"".$jmeno."\"><br>
Předmět:<br>
<input name=predmet value=\"".$predmet."\"><br>
Text zprávy<br>
<textarea style=\"width:200px; height:150px;\" name=text>".$text."</textarea><br><br>
<input type=submit value=Odeslat>
</form>
<br><br>
";
}
if (empty($_POST))
vypisForm("","","");
else {
if ($_POST["jmeno"]=="" || ereg("^ +$",$_POST["jmeno"])) {
echo "Zadejte prosím své jméno.";
vypisForm($_POST["jmeno"],$_POST["predmet"],$_POST ["text"]);
}
elseif ($_POST["predmet"]=="" || ereg("^ +$",$_POST["predmet"])) {
echo "Zadejte prosím předmět.";
vypisForm($_POST["jmeno"],$_POST["predmet"],$_POST ["text"]);
}
elseif ($_POST["text"]=="" || ereg("^ +$",$_POST["text"]) || strlen($_POST["text"]) > 500) {
echo "Text e-mailu by měl být v rozmezí 1-500 znaků.";
vypisForm($_POST["jmeno"],$_POST["predmet"],$_POST ["text"]);
}
else //nyní následuje samotné odesílání mailu {
if ($_SERVER["SERVER_ADDR"]!="127.0.0.1")
Mail ("vaseadresa@server.cz",$_POST["predmet"],$_POST[" text"],"From:".$_POST["jmeno"]);
echo "E-mail byl úspěšně odeslán.";
}
}
?>
Tento skript jsem sem skopíroval z jednoho článku, je volně šiřitelný, také jsem ho upravil dle mých názvů, atd...ale e-maily byly bez kódování čsštiny a chodily na mou adresu tak nějak divně - nebyla vyplněna adresa, předmět a v e-mailu bylo hodně zbytečných věcí - každopádně jsem byl nejvíce spokojen, echo se vypisovalo hnedka po odeslání pod formulář a má to i kontroly proti spamu, takže tak.
Děkuji
Celý kód vypadá teď takto:
html:
<form method="post" name="dotaznik" action="zprava_zpracovani.php" onSubmit="dotaznik.mujsubmit.value='Odesílá se...';">
<p>e-mail:</p>
<p><input type="text" name="jeho_mejl" size="40" /></p>
<p>text:</p>
<p><textarea name="jeho_text" rows="9" cols="50"></textarea></p>
<!-- spam -->
<p><input style="display: none; border: 1px solid green; background-color: green" type="text" name="spam" size="40" /></p>
<p><input class="tlacitko" type="submit" value="Odeslat" /></p>
</form>
zprava_zpracovani:
<?php
if (!empty($_POST['spam']))
{
echo "<center><h3>Do toho místa na SPAM píší pouze hloupí roboti a nejde jim to odeslat</h3></center>";
echo "<center><a href='mejl.html'> Zpět </a></center>";
}
else {
if (!empty($_POST['jeho_text']))
{
include "zprava_pokracovani.php";}
else
echo "<center><h3>Nebyly vyplněny povinné položky.</h3><a href='mejl.html'> Zpět </a></center>";
}
?>
zprava_pokracovani:
<?php
$ref = $_SERVER['REMOTE_ADDR'];
?>
<?php
$hlavicka="From:$jeho_mejl\n";
$hlavicka.="Content-Type: text/html; charset=utf-8\n";
$emailadr = "mojeadresa@server.cz"; //Vaše e-mailová adresa
$predmet = "vzkaz"; //Předmět zprávy
$zprava = "<html>
<head>
<title></title>
</head>
<body>";
$zprava .= "<b>IP: </b>".$ref."\r\n<br>\r\n<br>";
$zprava .= "<b>Vzkaz:</b> \r\n<br>".$_POST['jeho_text']."\r\n<br>";
?>
<?php if (Mail("$emailadr", "$predmet", "$zprava", $hlavicka)) { ?>
<?php
{
require "mejl_s_potvrzenim.html";
}
?>
<?php //==================== Zde končí potvrzení odeslání ================?>
<?php }
else
{
echo "Zprávu se nepodařilo odeslat";
}
?>
Může být?
To musíš vědět ty, jestli to vypadá a chodí podle tvých představ.
Já jen, abych tam neměl nějakou zbytečnou chybu, ale všechno jde, takže děkuju moc :). Poslední otázka, kterou řeším ohledně php, jestli jdou zobrazit zdrojové kódy těch souborů jako u html? Asi ne, jelikož se to mění na serveru na to html, no.
Presmerovani muzes udelat i takto
Samozrejme HEADER musi byt uplne nazacatku stranky, to znamena ze nesmi byt ani pred nim zadny include souboru ktere vypisuje naky text, tez je problem pri ulozeni souboru do Unicode, vlozi se na zacatek 3 znaky jako hidden.
Já mám uloženo vše jako Unicode, ale při přesměrování PHPčkem problémy nemám žádný. I tak ale mám všude takovouto funkci:
pak už stačí jenom napsat do skriptu
a je to třikrát (vlastně čtyřikrát) posichrované, že to opravdu přesměruje, nevím, jaká by musela být konstalace hvězd, aby se to nepřesměrovalo a musel se zobrazit odkaz. Zatím neznám nikoho.
Ne, zdrojové kody můžeš vidět pouze ty nebo kdokoli, kdo má přístup na tvoje FTP. Už z principu PHP je to jazyk zpracovávaný na straně serveru, takže uživatel vidí jenom hotové HTML (+ CSS a Javascript, pokud tam vůbec je).
Uz jsem se stim setkal, ulozeni pod Unicode a najednou neslo presmerovani, problem byl prave vlozeny paznak uplne na samem zacatku = 
previt jeden.
Byte-order_mark