Stránka 1 z 1

PHP formulář zasílající vyplněné údaje na mail  Vyřešeno

Napsal: 26 dub 2010 17:41
od Stene
Pánové, prosím vás.
Mám tento kód
(html kód je na stránce například index.html)
[syntax=xhtml]
<form action="mail_kontrola.php" method="post" id="formular" />
<b>Váše e-mailová schránka</b><br><input name="email" size="25" value="@" /><br />
<b>Vaše celé jméno</b><br><input name="jmeno" size="25" /><br />
<b>Předmět zprávy</b><br><input name="predmet" size="25" /><br />
<b>Text žádosti</b><br><textarea name="zprava" rows="6" cols="35">Vaše zpráva...</textarea><br />
</form>
<b>Antispamová kontrola</b><br>
<strong>7 + 3 =</strong><input name="kontrola" type="text" size="1" /> <br /><br>
<input type="submit" value="Odeslat" />
</span>
</body>
[/syntax]

(A php kód je např na stránce "mail_kontrola.php")
[syntax=php]
<?php
$predmet = $_POST['predmet'];
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$kontrola = $_POST['kontrola'];
$zprava = $_POST['zprava'];

if (($predmet!="") and ($jmeno!="") and ($email!="") and ($zprava!="") and ($kontrola=="10"))
{
$zprava .= $jmeno;
Mail("kittlerpeta@centrum.cz", $predmet, $zprava, "From:".$email);
echo "<p><strong>E-mail byl úspěšně poslán</strong>.</p>"; }
else
{
echo "<p>E-mail se <strong>nepodařilo poslat</strong> možná kvůli nevyplnění všech údajů nebo kontrolní otázky.</p>";
}
?>
[/syntax]


Když tyto dva kódy dám do jedné stránky (například index.html) tak se mi tam zobrazí jak formulár (html stránky) tak echo (z php stránky).. Jak to všechno dát na jednu stránkus tím, že se bude zobrazovat pouze html část a po špatném vyplnění by se pod formulářem objevil třeba text "vyplnil si to špatně joudo"..

Doufám, že mě chápete. Už jsem toho pár vyzkoušel, ale moje php vědomosti nesahají tak daleko jako ty vaše. Budu rád za odpovědi.
Pokud nechápete moji otázku, rád vám tuto situaci ještě jednou vysvětlím.

Re: PHP formulář zasílající vyplněné údaje na mail

Napsal: 27 dub 2010 07:49
od CZechBoY
[syntax lang=php]
// předmět s diakritikou
$clearsubject = $_POST['subject'];
$encodedsubject = base64_encode ($clearsubject);
$predmet = "=?utf-8?B?$encodedsubject?=";
//nastavení mailu
$headers = "MIME-Version: 1.0\r\n";
$headers.= "Content-Type: text/plain; charset=UTF-8\r\n";
$headers.= "Content-Transfer-Encoding: 8bit\r\n";
$headers.= "From: $od\r\n";
[/syntax]

tento kód si tam vlož, je to pro nastavení kódoání emailu a následné používání diakritiky :-)) samozřejmě tam musíš něco obměnit aby ti to šlo, nevim jestli máš kódování utf-8 nebo windows1250.

pokud chceš vědět jestli je odeslanej formulář není nic jednoduššího než dát do formuláře <input type="hidden" name="odeslano" value="1"> potom v PHP na začátku jen dáš If($_POST['odeslano']){další If na prázdné hodnoty, Mail}
potom ještě dej místo holé funkce Mail podmínku [php]If(Mail(...,...,..)) echo "Email odeslán"; else echo "Email se nepodařilo odeslat";[/php]

Re: PHP formulář zasílající vyplněné údaje na mail

Napsal: 27 dub 2010 15:16
od Stene
Jak tedy bude vypadat celý kód? Nějak mi to nejde dohromady, vždycky mi to vyhodí nějakou chybovou hlášku.

Re: PHP formulář zasílající vyplněné údaje na mail

Napsal: 27 dub 2010 15:44
od CZechBoY
Řekni kde máš chybu(řádek)
mě ten kod nejde zkopírovat :(

no nic nevim co sem dělal špatně při kopírovaní :D
[syntax lang=xhtml]
<form action="mail_kontrola.php" method="post" id="formular" />
<label>Váše e-mailová schránka</label><br><input name="email" size="25" value="@" /><br />
<label>Vaše celé jméno</label><br><input name="jmeno" size="25" /><br />
<label>Předmět zprávy</label><br><input name="predmet" size="25" /><br />
<label>Text žádosti</label><br><textarea name="zprava" rows="6" cols="35">Vaše zpráva...</textarea><br />
</form>
<b>Antispamová kontrola</b><br>
<strong>7 + 3 =</strong><input name="kontrola" type="text" size="2" /> <br /><br />
<input type="submit" value="Odeslat" />
</span>
[/syntax]
[syntax lang=php]
<?php
If($_POST['kontrola']==10){
$ok=true;
$post = Array("predmet","jmeno","email","zprava");
For($i=0;$i<4;$i++):
If(Empty($_POST[$post[$i]])){
$ok=false;
break;
}
EndFor;
If($ok){
$predmet = $_POST['predmet'];
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$kontrola = $_POST['kontrola'];
$zprava = $_POST['zprava'];
$zprava .= "\n".$jmeno;

If(Mail("kittlerpeta@centrum.cz", $predmet, $zprava, "From:".$email)) echo "<p><strong>E-mail byl úspěšně poslán</strong>.</p>";
else echo "<p>E-mail se <strong>nepodařilo poslat</strong> možná kvůli nevyplnění všech údajů nebo kontrolní otázky.</p>";
}
}
else echo "<span class='alert'>Neopsali jste správně ověřovací kód</span><br>\n";
?>
[/syntax]

jestli s eněkdo bude divit proč dělám ověření prázdnosti řetězce přes FOR tak se tomu taky divim, ale při více polích si myslím že to je lepší.

Re: PHP formulář zasílající vyplněné údaje na mail

Napsal: 27 dub 2010 16:23
od Stene
Říkal, jsem, že bych to potřeboval obojí na jedný stránce. Takže by to mohlo vypadat asi takto?

[syntax=php]
<?php

$predmet = $_POST['predmet'];
$jmeno = $_POST['jmeno'];
$email = $_POST['email'];
$kontrola = $_POST['kontrola'];
$zprava = $_POST['zprava'];

if(isset($_POST["odeslat"])){
if (($predmet!="") and ($jmeno!="") and ($email!="") and ($zprava!="") and ($kontrola=="10")){
$zprava .= $jmeno;
Mail("muj mail", $predmet, $zprava, "From:".$email);
echo "<p><strong>E-mail byl úspěšně poslán</strong>.</p>";
}else{
echo "<p>E-mail se <strong>nepodařilo poslat</strong> možná kvůli nevyplnění všech údajů nebo kontrolní otázky.</p>";
}
}
?>
[/syntax]

[syntax=xhtml]
<form action="#" method="post" id="formular" />
<b>Váše e-mailová schránka</b><br><input name="email" size="25" value="@" /><br />
<b>Vaše celé jméno</b><br><input name="jmeno" size="25" /><br />
<b>Předmět zprávy</b><br><input name="predmet" size="25" /><br />
<b>Text žádosti</b><br><textarea name="zprava" rows="6" cols="35">Vaše zpráva...</textarea><br />
</form>
<b>Antispamová kontrola</b><br>
<strong>7 + 3 =</strong><input name="kontrola" type="text" size="1" /> <br /><br>
<input type="submit" value="odeslat" />
</span>[/syntax]

Ale proč se při stisknutí na tlačítko odeslat nic neděje? :(
Jak tak zjištuji, php jsme zapomněl :(