NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Kontaktní formulář a jeho odeslání

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Miroslav Hruška:5.11.2015 14:41

Dobrý den všem, na tuto stránku mne přivedla potřeba si vytvořit kontaktní formulář pro moji stránku, kterou tvořím. Momentálně mi v ní ale nefunguje správně formulář, tak jsem hledal a našel jsem tento článek http://www.itnetwork.cz/…ar-vylepseni Soubor jsem si stáhl a narouboval jej na moji stránku. Už se mi zdá, že vše funguje, ale přemýšlím, jak přidat to, aby se v e-mailu zobrazil i název společnosti, který jsem tam přidal.

Jde o tuto stránku

http://powderdosing.info/…contact2.php

A ještě jsem si všiml při tvorbě toho formuláře, že občas mi to hlásilo, že je špatný e-mail, přitom jsem tu adresu zadal v korektním formátu.

Kódy mám následující

v hlavičce tento:

<?php
        mb_internal_encoding("UTF-8");

    $hlaska = '';
    if (isset($_GET['uspech']))
        $hlaska = 'Your message was sent. We will reply as soon as possible.';
    if ($_POST) // V poli _POST něco je, odeslal se formulář
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
                isset($_POST['company']) && $_POST['company'] &&
            isset($_POST['zprava']) && $_POST['zprava'] &&
            isset($_POST['rok']) && $_POST['rok'] == date('Y'))
        {
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $company = 'From:' . $_POST['company'];
            $adresa = '[email protected]';
            $predmet = 'Contact from Powderdosing.info';
            $uspech = mb_send_mail($adresa, $predmet, $company, $_POST['zprava'], $hlavicka);
            if ($uspech)
            {
                $hlaska = 'Your message was sent. We will reply as soon as possible.';
                header('Location: contact2.php?uspech=ano');
                exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else
            $hlaska = 'Formulář není správně vyplněný!';
    }

?>

A pro samotný formulář pak

<p>Do you have any questions concerning the DOSER? Are you interested about getting the DOSER for your lab? Then just fill the formular and we will contact you! We are ready to respond constructively to ideas, proposals or innovative products you may wish to share with us.</p>

        <?php
            if ($hlaska)
                echo('<p>' . htmlspecialchars($hlaska) . '</p>');

            $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';
            $email = (isset($_POST['email'])) ? $_POST['email'] : '';
            $company = (isset($_POST['company'])) ? $_POST['company'] : '';
            $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';
        ?>

        <form method="POST">
            <table>
                <tr>
                    <td>Your name</td>
                    <td><input name="jmeno" type="text" value="<?= htmlspecialchars($jmeno) ?>"/></td>
                </tr>
                <tr>
                    <td>Your e-mail</td>
                    <td><input name="email" type="email" value="<?= htmlspecialchars($email) ?>"/></td>
                </tr>
                <tr>
                    <td>Your company</td>
                    <td><input name="company" type="company" value="<?= htmlspecialchars($company) ?>"/></td>
                </tr>
                <tr>
                    <td>Current year</td>
                    <td><input name="rok" type="number" /></td>
                </tr>
            </table>
            <textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea>
            <br />

            <input type="submit" value="Send" />
        </form>

Potřeboval bych vědět, kde dělám chybu, že e-mail nepřichází s údajem o firmě (company) a hlásí to při tom i chybu s e-mailem, byť je správně zadaný...

Předem díky za rady :)

Odpovědět
5.11.2015 14:41
Mrtvole je naprosto fuk, kdo tu válku nakonec vyhraje! - Yossarian Yossarian
Avatar
Odpovídá na Miroslav Hruška
Michal Šmahel:5.11.2015 22:19

Máš to trochu "divoké". Pokud jsem to dobře pochopil, chceš zobrazit název společnosti místo emailu (on tam stejně je - musí - ale není tak důrazný).
Hlavičku pro mb_send_mail() upravíš takto:

<?php
    //Nyní se zobrazí odesílatel jako obsah $_POST['company']
    $hlavicka = 'From: ' . $_POST['company'] . ' <' . $_POST['email'] . '>';
    $hlavicka .= '\nMIME-Version: 1.0\n';
    $hlavicka .= 'Content-Type: text/html; charset="utf-8"\n';
Nahoru Odpovědět
5.11.2015 22:19
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Michal Šmahel:5.11.2015 22:27

Poté ještě trochu upravíš samotnou funkci pro odeslání:

<?php
    mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
Nahoru Odpovědět
5.11.2015 22:27
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Michal Šmahel
Tomáš123:6.11.2015 15:59

Netestoval som, ale pri prvej úprave, ktorú navrhuješ sa možno nebude dať na e-mail odpovedať bez modifikácie adresáta. Prípadne sa s tým e-mailovy klient vysporiada, ale pošle na obidve adresy.

Nahoru Odpovědět
6.11.2015 15:59
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Tomáš123
Člen
Avatar
Odpovídá na Michal Šmahel
Tomáš123:6.11.2015 16:09

Ak si chceš pripojiť názov užívateľovej firmy, pripoj ju k správe. V hlavičkách od koho e-mail prišiel nemá čo robiť:

$_POST['zprava'] .= "From: $_POST['company']";

Neviem čo sleduješ tým množstvom výrazov v podmienke, ale stačilo by

if(!empty($_POST['jmeno']) && !empty($_POST['email']) && !empty($_POST['company']) && !empty($_POST['zprava']) && $_POST['rok'] == date('Y'))

Prípadne všetko nahádzať do issetu. Ten totiž zvláda aj viacero argumentov.

Ochrana to ale nie je postačujúca. Medzerami sa cez ňu dostanem. Funkcia trim() medzery oreže. Tiež by sa zišlo kontrolovať tvar e-mailu a minimálny počet znakov.

Nahoru Odpovědět
6.11.2015 16:09
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Avatar
Odpovídá na Michal Šmahel
Miroslav Hruška:9.11.2015 10:47

Tak ještě jednou :-) Já jsem prostě jen chtěl podle toho návodu, který jsem na tomto webu našel, vytvořit formulář, který bude obsahovat políčko k vyplnění názvu firmy a my tak dostaneme rovnou informaci o tom, ze které firmy nám kdo píše...

A právě jak jsem to začal přidávat, tak jsem to přidával asi blbě, takže to začalo haprovat...

Ale nakonec se zdá, že než se v tom vrtat a trávit s tím čas navíc (já jsem totiž doufal, že ten návod, co jsem našel, bude fungovat bez problémů), tak raději budu návštěvníky odkazovat na jiný kontaktní formulář, který funguje a je na něm ochrana v podobě MathGuard (v souvislosti s touto ochranou formulářů se mi zdá, že vývoj této ochrany asi byl ukončen)....

Nahoru Odpovědět
9.11.2015 10:47
Mrtvole je naprosto fuk, kdo tu válku nakonec vyhraje! - Yossarian Yossarian
Avatar
Numero
Člen
Avatar
Numero:9.11.2015 11:32
<?php
        mb_internal_encoding("UTF-8");

    $hlaska = '';
    if (isset($_GET['uspech']))
        $hlaska = 'Your message was sent. We will reply as soon as possible.';
    if ($_POST) // V poli _POST něco je, odeslal se formulář
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
                isset($_POST['company']) && $_POST['company'] &&
            isset($_POST['zprava']) && $_POST['zprava'] &&
            isset($_POST['rok']) && $_POST['rok'] == date('Y'))
        {
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $company = 'From:' . $_POST['company'];
            $adresa = '[email protected]';
            $predmet = 'Contact from Powderdosing.info';
            $zprava = $_POST['zprava'] . "From: $_POST['company']";
            $uspech = mb_send_mail($adresa, $predmet, $zprava, $hlavicka);
            if ($uspech)
            {
                $hlaska = 'Your message was sent. We will reply as soon as possible.';
                header('Location: contact2.php?uspech=ano');
                exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else
            $hlaska = 'Formulář není správně vyplněný!';
    }

?>

Co todle pomůže to? Nemusela by se modifikovat hlavička emailu a tu společnost budeš mít napsanou dole, ovšem myslím si, že když ti bude psát nějaká společnost (zástupce), tak se ve zprávě podepíše. Nebo se pletu? :)

Nahoru Odpovědět
9.11.2015 11:32
Co si člověk neudělá sám to nemá...
Avatar
Odpovídá na Miroslav Hruška
Michal Šmahel:9.11.2015 21:44

Aha, dobře. To mé řešení si zkus, mělo by to být něco na tvůj požadavek (trochu jinak řešeno - mail ti přijde "od" té společnosti).

Nahoru Odpovědět
9.11.2015 21:44
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.