Autor | Zpráva | ||
---|---|---|---|
Stanley Profil |
#1 · Zasláno: 12. 4. 2011, 17:12:20 · Upravil/a: Stanley
Zdravím,
mám formulář a odesílací skript php, na který odkáže tlačítko submit. Potřebuji, aby se echo s informací, zda se povedlo odeslat e-mail zobrazovalo nad nebo pod furmulářem a né na stránce s php skriptem. Zde je HTML formulář: <form action="send.php" method="post"> <label for="jmeno">Jméno:*</label> <br> <input type="text" name="jmeno" size="20" id="jmeno"> <br> <label for="email">E-mail:*</label> <br> <input type="text" name="email" size="20" id="email"> <br> <label for="telefon">Tel. číslo:</label> <br> <input type="text" name="telefon" size="20" id="telefon"> <br> <label for="zprava">Váš dotaz:</label> <br> <textarea name="zprava" cols="20" rows="5"></textarea> <br> <p class="pk">Položky označené hvězdičkou jsou povinné.</p> <input class="odeslani" type="submit" value="Odeslat"> </form> Zde je PHP skript: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body> <?php function autoUTF($s) { if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); return iconv('ISO-8859-2', 'UTF-8', $s); } $jmeno = $_POST['jmeno']; $email = $_POST['email']; $telefon = $_POST['telefon']; $hlavicka = "From: <$email>\r\n"; $hlavicka .= "MIME-version: 1.0\n"; $hlavicka .= "X-Mailer: PHP\n"; $hlavicka .= "Content-Type: text/plain; charset=\"UTF-8\"\n"; $predmet = "=?utf-8?B?".base64_encode(autoUTF ("Zpráva z kontaktního formuláře: " . $jmeno))."?="; $komu .= "mujmail@seznam.cz"; $zprava .= "Jméno: {$_POST['jmeno']}\r\n"; $zprava .= "E-mail: {$_POST['email']}\r\n"; $zprava .= "Telefonní číslo: {$_POST['telefon']}\r\n\r\n"; $zprava .= "Zpráva:\n{$_POST['zprava']}\r\n"; if (($jmeno!="") and ($email!="") and is_email($email)) { Mail($komu, $predmet, $zprava, $hlavicka); echo "<p><strong>E-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>E-mail se <strong>nepodařilo odeslat.</strong><br />Ověřte prosím, jestli jste vyplnil všechny povinné položky, nebo máte E-mail ve správném tvaru.</p>"; } function is_email ($email, $regular = "/^([a-z0-9_.-]+)@([a-z0-9_.-]+)\.([a-z]{2,4})$/i") { if (preg_match($regular,$email,$details)) return $details; } ?> </body> </html> Předem děkuji za nápady a rady. P.S: PHP neovládám, skript jsem si našel na internetu a poté jsem ho doupravil podle HTML formuláře. |
||
Str4wberry Profil |
#2 · Zasláno: 12. 4. 2011, 17:17:19
Můžeš například ten skript vložit do stránky s formulářem a jeho
action namířit na tu samou stránku, která formulář v případě odeslání (navíc) zpracuje.
|
||
Stanley Profil |
#3 · Zasláno: 12. 4. 2011, 17:27:49 · Upravil/a: Stanley
Str4wberry:
Nevím jestli jsem to pochopil dobře, ale mám udělat toto? index.php: <form action="index.php" method="post"> <label for="jmeno">Jméno:*</label> <br> <input type="text" name="jmeno" size="20" id="jmeno"> <br> <label for="email">E-mail:*</label> <br> <input type="text" name="email" size="20" id="email"> <br> <label for="telefon">Tel. číslo:</label> <br> <input type="text" name="telefon" size="20" id="telefon"> <br> <label for="zprava">Váš dotaz:</label> <br> <textarea name="zprava" cols="20" rows="5"></textarea> <br> <p class="pk">Položky označené hvězdičkou jsou povinné.</p> <input class="odeslani" type="submit" value="Odeslat"> </form> <?php function autoUTF($s) { if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); return iconv('ISO-8859-2', 'UTF-8', $s); } $jmeno = $_POST['jmeno']; $email = $_POST['email']; $telefon = $_POST['telefon']; $hlavicka = "From: <$email>\r\n"; $hlavicka .= "MIME-version: 1.0\n"; $hlavicka .= "X-Mailer: PHP\n"; $hlavicka .= "Content-Type: text/plain; charset=\"UTF-8\"\n"; $predmet = "=?utf-8?B?".base64_encode(autoUTF ("Zpráva z kontaktního formuláře: " . $jmeno))."?="; $komu .= "mujmail@seznam.cz"; $zprava .= "Jméno: {$_POST['jmeno']}\r\n"; $zprava .= "E-mail: {$_POST['email']}\r\n"; $zprava .= "Telefonní číslo: {$_POST['telefon']}\r\n\r\n"; $zprava .= "Zpráva:\n{$_POST['zprava']}\r\n"; if (($jmeno!="") and ($email!="") and is_email($email)) { Mail($komu, $predmet, $zprava, $hlavicka); echo "<p><strong>E-mail byl úspěšně odeslán</strong>.</p>"; } else { echo "<p>E-mail se <strong>nepodařilo odeslat.</strong><br />Ověřte prosím, jestli jste vyplnil všechny povinné položky, nebo máte E-mail ve správném tvaru.</p>"; } function is_email ($email, $regular = "/^([a-z0-9_.-]+)@([a-z0-9_.-]+)\.([a-z]{2,4})$/i") { if (preg_match($regular,$email,$details)) return $details; } ?> Jestli ano, tak to nefunguje, nezobrazí se mi echo s informacemi, jestli se povedlo email odeslat, pouze se mi zobrazí hlavní stránka. |
||
Str4wberry Profil |
#4 · Zasláno: 12. 4. 2011, 17:43:38
Tak to ti nefunguje PHP.
|
||
petr 6 Profil |
#5 · Zasláno: 12. 4. 2011, 17:46:43
Stanley:
„Jestli ano, tak to nefunguje, nezobrazí se mi echo s informacemi, jestli se povedlo email odeslat, pouze se mi zobrazí hlavní stránka.“ A mail se odešle? |
||
Stanley Profil |
#6 · Zasláno: 12. 4. 2011, 18:15:36
petr 6:
Ano, mail se odešle |
||
Stanley Profil |
#7 · Zasláno: 12. 4. 2011, 18:36:17 · Upravil/a: Stanley
Když jsem si s tím teď hrál, tak jsem našel, že se info o odeslání zobrazuje, jen je posunuté nějak do háje.
Akorát že se zobrazuje ještě před tím, než se email odešle.. :( Ukazuje se, že se nepodařilo odeslat, že se musí vyplnit všechny položky |
||
Stanley Profil |
#8 · Zasláno: 13. 4. 2011, 14:56:09
Ví teda prosím jak skrýt echo, dokud ho nezaktivuje email?
Od rána se pokouším hledat, ale nic co by mi fungovalo jsem nenašel. Děkuju |
||
Jozin Profil * |
#9 · Zasláno: 13. 4. 2011, 17:27:47
Stanley: Napíšu ti tu celkové řešní (s tím, že se dá použít kdekoli)
form.php <?php require_once('send.php'); ?> <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> <label for="jmeno">Jméno:*</label> <br> <input type="text" name="jmeno" size="20" id="jmeno"> <br> <label for="email">E-mail:*</label> <br> <input type="text" name="email" size="20" id="email"> <br> <label for="telefon">Tel. číslo:</label> <br> <input type="text" name="telefon" size="20" id="telefon"> <br> <label for="zprava">Váš dotaz:</label> <br> <textarea name="zprava" cols="20" rows="5"></textarea> <br> <p class="pk">Položky označené hvězdičkou jsou povinné.</p> <input class="odeslani" type="submit" value="Odeslat"> </form> <?= $message ?> send.php function autoUTF($s) { if (preg_match('#[\x80-\x{1FF}\x{2000}-\x{3FFF}]#u', $s)) return $s; if (preg_match('#[\x7F-\x9F\xBC]#', $s)) return iconv('WINDOWS-1250', 'UTF-8', $s); return iconv('ISO-8859-2', 'UTF-8', $s); } function is_email ($email, $regular = "/^([a-z0-9_.-]+)@([a-z0-9_.-]+)\.([a-z]{2,4})$/i") { if (preg_match($regular,$email,$details)) return $details; } function Send($komu) { $jmeno = $_POST['jmeno']; $email = $_POST['email']; $telefon = $_POST['telefon']; $hlavicka = "From: <$email>\r\n"; $hlavicka .= "MIME-version: 1.0\n"; $hlavicka .= "X-Mailer: PHP\n"; $hlavicka .= "Content-Type: text/plain; charset=\"UTF-8\"\n"; $predmet = "=?utf-8?B?".base64_encode(autoUTF ("Zpráva z kontaktního formuláře: " . $jmeno))."?="; $zprava .= "Jméno: {$_POST['jmeno']}\r\n"; $zprava .= "E-mail: {$_POST['email']}\r\n"; $zprava .= "Telefonní číslo: {$_POST['telefon']}\r\n\r\n"; $zprava .= "Zpráva:\n{$_POST['zprava']}\r\n"; if (($jmeno!="") and ($email!="") and is_email($email)) { Mail($komu, $predmet, $zprava, $hlavicka); return "<p><strong>E-mail byl úspěšně odeslán</strong>.</p>"; } else { return "<p>E-mail se <strong>nepodařilo odeslat.</strong><br />Ověřte prosím, jestli jste vyplnil všechny povinné položky, nebo máte E-mail ve správném tvaru.</p>"; } } if(isset($_POST['odeslat'])) $message = Send('mujmail@seznam.cz'); Teď pokud máš u send.php a form.php ve stejné složce, jako soubor, ve kterém to chceš použít (například index.php), tak to bude takto index.php [pre] <?php require_once('form.php'); ?> //obsah stránky [pre] Je možný, že mám někde překlep... ale teoreticky by to mělo jet. (tam kde je v form.php $message, tak to je místo, kde se bude hláška vypisovat) |
||
Stanley Profil |
#10 · Zasláno: 13. 4. 2011, 17:54:21 · Upravil/a: Stanley
Jozin:
Chci se zeptat, jestli v send.php chybí v proměnných úmyslně $komu A ještě se chci zeptat, k čemu je tam to [pre][pre] Děkuji ti :) |
||
Jozin Profil * |
#11 · Zasláno: 13. 4. 2011, 23:21:00
Stanley:
$komu tam chybí záměrně předává se jako parametr funkce Send... na posledním řádku... když dávám pre, tak by to mělo hodit jako zdroják, ale nějak to nevyšlo :-D Našel jsem chybu... v tom forumláři změň řádek: <input class="odeslani" type="submit" value="Odeslat"> na <input class="odeslani" type="submit" name="odeslat" value="Odeslat"> Můj script se na to spoléhal, že se tak to tlačítko jmenuje, proto to nejelo. |
||
Stanley Profil |
#12 · Zasláno: 14. 4. 2011, 16:34:35 · Upravil/a: Stanley
Díky moc, už to funguje perfektně!
Téma můžete označit za vyřešené a ještě jednou všem děkuji, hlavně uživateli Jozin, který byl tak ochotný, že mi napsal celý kód a ochotně mi pomohl. |
||
Časová prodleva: 15 let
|
0