Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 9. diel - Vylepšenia kontaktného formulára v PHP

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Odpovedá 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.

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>
Editované
Odpovedať
Jestli jste dobří nahrnou na Vás spoustu práce. Jestli jste sakra dobří, tak se jí dokážete zbavit.
Avatar
Tano7
Člen
Avatar
Odpovedá 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;
}
Odpovedať
Ž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.

Odpovedať
Ž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.

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.

Odpovedať
Život je jednoduchý, jen lidé si ho dělají složitý.
Avatar
Patrik Jakl
Člen
Avatar
Odpovedá 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.

Odpovedať
Ž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

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

Avatar
Martin Korinek:23. júna 19:10

vyechují
JavaScript,
Zdroj: https://www.itnetwork.cz/…ar-vylepseni

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 150.