Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
Lukáš Havlíček:29.12.2021 20:22

Ahoj, prokousávám se základním PHP kurzem. Jsem v lekci s kontaktním formulářem. Po odeslání formuláře mi na email přijde nějaký nesmysl. V poli pro jméno odesílatele se mi zobrazí "(neznámý odesilatel)" v poli pro zprávu se mi zobrazí jakoby zašifrovaný text. Níže posílám script + screen, co mi přijde na email. Pro testování formuláře používám free hosting webzdarma. Možná to je tím, ale to nevím. Předem děkuji za rady.

<?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'))
        {
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $adresa = '[email protected]';
            $predmet = 'Nová zpráva ze Šnečkova webu';
            $uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
            if ($uspech)
            {
                $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
                header('Location: index.php?uspech=ano');
                exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else
            $hlaska = 'Formulář není správně vyplněný!';
    }

?>

<!DOCTYPE html>
<html lang="cs-cz">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" href="styl.css" type="text/css" />
        <title>Kontaktní formulář</title>
    </head>
    <body>
        <p>Můžete mě kontaktovat pomocí formuláře níže.</p>

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

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

        <form method="POST">
            <table>
                <tr>
                    <td>Vaše jméno</td>
                    <td><input name="jmeno" type="text" value="<?= htmlspecialchars($jmeno) ?>"/></td>
                </tr>
                <tr>
                    <td>Váš email</td>
                    <td><input name="email" type="email" value="<?= htmlspecialchars($email) ?>"/></td>
                </tr>
                <tr>
                    <td>Aktuální rok</td>
                    <td><input name="rok" type="number" /></td>
                </tr>
            </table>
            <textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea>
            <br />

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

    </body>
</html>

Zkusil jsem: Zkoušel jsem napsat vlastnoručně krok po kroku formulář podle tutoriálu a také zkopírovat podle přiloženého souboru u lekce. Vždy se stejným výsledkem.

Chci docílit: Chci dosáhnout toho, aby se odeslala data do emailu, která se zadala do formuláře

 
Odpovědět
29.12.2021 20:22
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:30.12.2021 11:38

Prosim, prepis si to do funkce, ktere predas data. Nepracuj primo s GET, POST. php.net/mail

<?php
header('Content-Type: text/html; charset=utf-8');.

// upraveny Example #5 Sending HTML email
function MailPoslat($from='', $to='', $subject='', $message='')
        {
           $to = is_array($to) ? $to : array($to); // zkonvertuji na array
           foreach ($to as &$mail)
                {
                $mail = strpos($mail, '<')!==false ? $mail : "$mail <$mail>"; // doplnim jmeno, pr: Mary <[email protected]> (to by mohlo resit ten tvuj problem v mailu)
                }
            $to = implode(',', $to); // zkonvertuji zpet na string
            $headers = array();
            $headers[] = 'MIME-Version: 1.0';
            $headers[] = 'Content-type: text/html; charset=utf-8';
            $headers[] = 'To: ' . $to;
            $headers[] = 'From: ' . $from;
            $headers[] = 'Reply-To: ' . $from;
            $headers[] = 'X-Mailer: PHP/' . phpversion();
            $headers = implode(PHP_EOL, $headers);
//echo "<pre>" . implode(" \n---\n ", array( $headers, $subject, $message )) . "</pre>";
            //return mb_send_mail($to, $subject , $message , $headers); // s timhle nemam zkusenosti
            $subject = "=?UTF-8?B?". base64_encode($subject)."?="; // konverze do utf (mozna to resi prave mb_send_mail samo)
            return mail($to, $subject , $message , $headers);
    }


//... isset ... vsechny ty tve podminky
$to      = '[email protected]';
$predmet = 'Nová zpráva ze Šnečkova webu';
$uspech  = MailPoslat($_POST['email'], $to, $predmet, $_POST['zprava']);
  • Take je dobre tam pridat reply-to a ze to odesilas z php mailu.
  • Ze ti pise neznameho odesilatele je chyba tveho mailu. Mel ti tam dosadit mail adresu. Nicmene, muzes si zkontrolovat vystup vypsanim na obrazovku.
  • hlavne jsem oddelil kod pro odeslani mailu od obsahu. Netestoval jsem to, takze mozna bude treba doladit par chyb, preklepu, zapomenuty strednik
  • hlavicku mailu jsem prepsal pres PHP_EOL a implode
 
Nahoru Odpovědět
30.12.2021 11:38
Avatar
Odpovídá na Peter Mlich
Lukáš Havlíček:30.12.2021 17:41

Ahoj, určitě vyzkouším. Jen mě zaráží, že to děla tohle, když to je z tutoriálu tady na stránkách. Ale nejspíš je to tím free hostingem.

 
Nahoru Odpovědět
30.12.2021 17:41
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:30.12.2021 22:19

No, viz poznamka v mem kodu. Mail se da zapsat dvema zpusoby:
"mail"
"text <mail>" // text je nejcasteji jmeno prijmeni, proto to nejspis pise neznamy uzivatel
Takze bych to upravil takto:
"mail <mail>"

Editováno 30.12.2021 22:20
 
Nahoru Odpovědět
30.12.2021 22:19
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 4 zpráv z 4.