
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.
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