NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 10 - Vylepšení kontaktního formuláře v PHP

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na Vojtěch Koukal
Jan Zahradník:27.10.2021 20:00

Souhlasím a podepisují v plném rozsahu. Stažení kódu je bezva, ale screen by vše urychlil.

 
Odpovědět
27.10.2021 20:00
Avatar
Michal Gros
Tvůrce
Avatar
Michal Gros :30.12.2021 23:15

Děkuji za skvělí článek, bohužel jsem nechtěl řešit hosting ani nastavení PHP pro fake sendmail máme blokované smtp. Pro jiné projekty využíváme službu SendGrid neboť využíváme většinou app-servis na MS AZURE pro zajímavost přidávám kód upravený pro sendgrid knihovna je instalována přes composer.

<?php
mb_internal_encoding("UTF-8");
$hlaska = '';
if (isset($_GET['uspech']))
    $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';

if ($_POST) // V poli _POST něco je, odeslal se formulář
{
    if (
        isset($_POST['jmeno']) && $_POST['jmeno'] &&
        isset($_POST['email']) && $_POST['email'] &&
        isset($_POST['zprava']) && $_POST['zprava'] &&
        isset($_POST['rok']) && $_POST['rok'] == date('Y')

    ) {
        // Sem přijde odeslání emailu
        /* musíme si uložit proměné pro sendGrid clasu lze rešit i elegatněji */
        $emailFrom = isset($_POST['email']) ? $_POST['email'] : '';
        $emailNameFrom = isset($_POST['jmeno']) ? $_POST['jmeno'] : '';
        $emailMessage = isset($_POST['zprava']) ? $_POST['zprava'] : '';
        /*tady je zmena oproti It networku */
        /* --------------------------*/
        /* ------ sengrid test ------*/
        // $file_encoded = base64_encode(file_get_contents('.gitignore'));
        require 'vendor/autoload.php'; // If you're using Composer (recommended)


        /* uloženi Apy Key pro sengrid do ENV proměných
        Z důvodu bezpečnosti je klíč mimo kód v ENV( globálních proměných systému)
        tady je pro ukázku  počítáno s klíčem v kódu*/
        $uniqid = ' APY KEY ziskaný se sendgridu ';
        putenv("SENDGRID_API_KEY=$uniqid");


        // Comment out the above line if not using Composer
        // require("<PATH TO>/sendgrid-php.php");
        // If not using Composer, uncomment the above line and
        // download sendgrid-php.zip from the latest release here,
        // replacing <PATH TO> with the path to the sendgrid-php.php file,
        // which is included in the download:
        // https://github.com/sendgrid/sendgrid-php/releases


        $email = new \SendGrid\Mail\Mail();
        $email->setFrom($emailFrom, $emailNameFrom);
        $email->setSubject("Sending mail from formular IT network V1");
        $email->addTo("[email protected]", "It Network -Php test mail to");

        $email->addContent("text/plain", "" . $emailMessage . "");
        $email->addContent(
            "text/html",
            "<strong>" . $emailMessage . "</strong>"
        );
        $sendgrid = new \SendGrid(getenv('SENDGRID_API_KEY'));
        $adresa = '';
        $predmet = 'Nová zpráva z mailformu';


        try {
            $response = $sendgrid->send($email);
            /* Otestujeme zda je oseslano OK */
            $uspech = ($response->statusCode() == 202) ? True : False;
            /* test jestli je odeslany formular */
            if ($uspech) {
                $hlaskaResponseStatusCode = $response->statusCode() . "\n";
                $hlaska = $hlaskaResponseStatusCode . 'Email byl úspěšně odeslán, brzy vám odpovíme.';
                // odesleme to do stejneho fajlu

                header('Location: kontaktni_formular.php?uspech=True');
                exit;
            } else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
            $hlaskaResponseHeader = $response->headers();
            $hlaskaResponseBody = $response->body();
        } catch (Exception $e) {
            echo 'Caught exception: ' . $e->getMessage() . "\n";
        }

        /* ------ sendgrid end ------*/
        /* --------------------------*/
    } else
        $hlaska = 'Formulář není správně vyplněný!';
}
?>
<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Kontaktní formulář</title>
</head>

<body>
    <p>Můžete mě kontaktovat pomocí formuláře níže.</p>
    <?php
    /*zobrazeni výsledku odeslání*/
    if ($hlaska)
        echo ('<p>' . htmlspecialchars($hlaska) . '</p>');

    $emailFrom = isset($_POST['email']) ? $_POST['email'] : '';
    $emailNameFrom = isset($_POST['jmeno']) ? $_POST['jmeno'] : '';
    $emailMessage = isset($_POST['zprava']) ? $_POST['zprava'] : '';
    ?>
    <form method="POST">
        <table>
            <tr>
                <td>Vaše jméno</td>
                <td><input name="jmeno" type="text" value="<?php htmlspecialchars($emailNameFrom); ?>" /></td>
            </tr>
            <tr>
                <td>Váš email</td>
                <td><input name="email" type="email" value="<?php htmlspecialchars($emailFrom); ?>" /></td>
            </tr>
            <tr>
                <td>Aktuální rok</td>
                <td><input name="rok" type="number" value="2021" /></td>
            </tr>
        </table>
        <textarea name="zprava"> <?php htmlspecialchars($emailMessage); ?> </textarea><br />

        <input type="submit" value="Odeslat" />
    </form>
</body>

</html>
Editováno 30.12.2021 23:17
Odpovědět
30.12.2021 23:15
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
Avatar
Tano7
Člen
Avatar
Odpovídá na Matěj Bína
Tano7:21.1.2022 0:57

Jen lajcký nápad, pomohlo by třeba dát na konec formuláře?
.php

<div class="cistic"> </div>
    </body>
</html>

.CSS

.cistic {
        clear: both;
}
Odpovědět
21.1.2022 0:57
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Avatar
Tano7
Člen
Avatar
Tano7:21.1.2022 1:11

Hezky napsáno. Testoval jsem to a po odeslání přes server online z domény nepřijde od koho došel email a text zprávy v mém emailu je vždy stejný, ať napíšu cokoliv, vždy je to:
amVkZSB0bz8gxa­F1bcOhaw==
Na serveru je podpora PHP8 , HTTPS ne.
Díky za radu zkušenou.

Odpovědět
21.1.2022 1:11
Život by byl mnohem snazší, kdybychom k němu měli zdrojový kód.
Avatar
Jaromír Volko:3.3.2022 17:57

V části
header('Location: mailform.php?us­pech=ano');
nevysvětlujete pořádně proč je
?uspech=ano');
člověk nejdřív přemýšlí, proč "ano" a ne "TRUE". Až pak si uvědomí, že je důležité, aby se proměnná odeslala. Bylo by pro rychlejší pochopení toto trochu rozepsat.

 
Odpovědět
3.3.2022 17:57
Avatar
Patrik Jakl
Člen
Avatar
Patrik Jakl:13.4.2022 11:11

Ahoj, můžu poprosit o radu? Stránka mi vyhazuje chybu na řádku kde mám "header('Location: kontakt.php?us­pech=ano');" mám tuto stránku totiž zpracovanou podle cvičení v následující kapitole jako složenou. Mám tedy index.php v kořenové složce a pak mám ve složce "menu" soubor kontakt.php. Jakým způsobem upravit Location, aby to fungovalo i pro složenou stránku? Moc děkuji.

Odpovědět
13.4.2022 11:11
Život je jednoduchý, jen lidé si ho dělají složitý.
Avatar
Patrik Jakl
Člen
Avatar
Odpovídá na Patrik Jakl
Patrik Jakl:14.4.2022 9:02

Odpovím si sám.
Odpověď je napsána v podstatě v samotném článku:
"POZOR! Přesměrovat můžeme pouze v případě, že jsme ještě nevypsali žádné HTML. Jakmile se totiž začne něco vypisovat, PHP prohlížeči odešle hlavičku, kde mu říká, že mu posílá HTML soubor. Hlavičku lze samozřejmě odeslat jen jednou, když se pokusíme veprostřed souboru přesměrovat, dostaneme chybovou hlášku "Headers already sent" a k přesměrování nedojde."

= takže v případě složené stránky, toto nelze použít, protože v době spuštění skriptu už je část HTML stránky sestaveno.
= vyřešil jsem tak, že jsem kontakt.php vyjmul ze složeného webu, takže má celou vlastní strukturu. Není to úplně elegantní, ale funguje to.
= pokud byste měli někdo nápad, jak kód upravit i pro složenou stránku, tak za něj budu moc rád.

Odpovědět
14.4.2022 9:02
Život je jednoduchý, jen lidé si ho dělají složitý.
Avatar
Adam Klusák
Člen
Avatar
Adam Klusák:10.7.2023 14:41

Je to celkem dobře rozepsané ale i tak stále nechápu jak se tato funkce programuje či jak mám tento zápis chápat

 
Odpovědět
10.7.2023 14:41
Avatar
Ladislav Vohralík:10.6.2024 11:31

chtělo by to více rozebrat teorii hostingů a odesílání emailů - klidně někde vedle, protože na hostinzích se k této problematice staví různě a hlavně velmi neradi

 
Odpovědět
10.6.2024 11:31
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 9 zpráv z 149.