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í.

Diskuze: Emailový formulář - načtení proměnné do mb_send_mail

Aktivity
Avatar
Frantisek Rychnovsky:27.11.2017 9:20

Ahoj, ani po mnoha hodinách nemůžu přijít na to, jak načíst část formuláře do těla zprávy. Formulář jsem zjednodušil na minimum tak, abych jen případně pochopil princip. Potřebuji, aby uživatel vyplnil kalkulačku a po odeslání mu přišel mail, kde je zopakované, co vyplnil (v tomto případě tedy jen položka "šířka"). ** $_POST['OBRAZ­sirka']** mi nenačítá hodnotu z name="OBRAZsirka". Můžete mi poradit proč? E-mail normálně chodí, jen neobsahuje žádné tělo zprávy, je prázdný.František

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

    $hlaska = '';
    if (isset($_GET['uspech']))
        $hlaska = 'Kalkulace byla úspěšně odeslána.';
    if ($_POST) // V poli _POST něco je, odeslal se formulář
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
            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 = 'Kalkulace';
            $uspech = mb_send_mail($adresa, $predmet, $_POST['OBRAZsirka'], $hlavicka);
            if ($uspech)
            {
                $hlaska = 'Kalkulace byla úspěšně odeslána.';
                header('Location: Obrazy_PHP_diskuze.php?uspech=ano');
                exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
        }
        else
            $hlaska = 'Formulář není správně vyplněný!';
    }

?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>

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

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

        <!--SKRIPT Kalkulace-->
<script type="text/javascript">
        function OBR(){
                var Sirka = (document.getElementById("OBRsirka").value);
                var Vyska = (document.getElementById("OBRvyska").value);
                var Plocha = Sirka*Vyska/1000000;

                if (Plocha <= 0.2){var CM = 3400} else if (Plocha <=0.3){CM=3200} else if (Plocha <=0.5){CM=2800} else if (Plocha <=0.75){CM=2300} else if (Plocha <=0.95){CM=2000} else {CM=1800};

                document.getElementById("OBRbez").value=(CM*Plocha).toFixed(2);
                document.getElementById("OBRS").value=(CM*Plocha*1.21).toFixed(2);
                document.getElementById("M2").value=(CM);

                }
                </script>

</head>
<body>
<header></header>
<main>
<div>
<article>
        <div>
        <div>
        <div>
        <h2 id="KalkulatorObrazy">Kalkulace</h2>

        <form method="POST">
                <table>
                <tr><td class="">Šířka v cm</td>
                        <td><select name="OBRAZsirka" id="OBRsirka" onChange="OBR()">
                                <option value="0" selected="selected">Vyberte</option>
                                <option value="300">30 cm</option>
                                <option value="400">40 cm</option>
                                <option value="500">50 cm</option>
                                <option value="600">60 cm</option>
                                <option value="700">70 cm</option>
                                <option value="800">80 cm</option>
                                <option value="900">90 cm</option>
                                <option value="1000">100 cm</option>
                                </select>
                                </td></tr>

                <tr><td class="">Výška v cm</td>
                        <td><select id="OBRvyska" onChange="OBR()">
                                <option value="0" selected="selected">Vyberte</option>
                                <option value="300">30 cm</option>
                                <option value="400">40 cm</option>
                                <option value="500">50 cm</option>
                                <option value="600">60 cm</option>
                                <option value="700">70 cm</option>
                                <option value="800">80 cm</option>
                                <option value="900">90 cm</option>
                                <option value="1000">100 cm</option>
                                </select>
                                </td></tr>
                <tr><td class="">Cena bez dph</td>
                        <td><input class="inputPDCelkem" id="OBRbez" type="text" disabled></td></tr>
                <tr><td class="">Cena včetně dph</td>
                        <td><input class="inputPDCelkem" id="OBRS" type="text" disabled></td></tr>
                <tr><td class="">Cena za m2</td>
                        <td><input class="" id="M2" type="text" disabled></td></tr>
                                </table>
                                </form>

                <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>
            <br />
            <input type="submit" value="Odeslat kalkulaci" />
        </form>
                </div>
                </div>
        </div>
        <div></div>
</article>
</div>
</main>
</body>
</html>
Editováno 27.11.2017 9:22
 
Odpovědět
27.11.2017 9:20
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:27.11.2017 9:25

Použij něco jako PHPmailer, ušetří ti to mnoho času.

Nahoru Odpovědět
27.11.2017 9:25
the cake is a lie
Avatar
Jan Štrobl
Člen
Avatar
Jan Štrobl:27.11.2017 15:41

Zkus to upravit takto, jestli to pomůže

$uspech = mb_send_mail($adresa, $predmet, $telo, $hlavicka);
$telo= $_POST['OBRAZsirka'];
 
Nahoru Odpovědět
27.11.2017 15:41
Avatar
Frantisek Rychnovsky:27.11.2017 20:32

Stejny vysledek, mail odejde, telo je prazdne...

 
Nahoru Odpovědět
27.11.2017 20:32
Avatar
Odpovídá na Frantisek Rychnovsky
Michal Šmahel:27.11.2017 23:13

Jak to vypadá s hodnotou v POST??

var_dump($_POST['OBRAZsirka']);
Nahoru Odpovědět
27.11.2017 23:13
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Jan Štrobl
Michal Šmahel:27.11.2017 23:15

Proměnná $telo by musela být inicializována před vlastním použitím. Tohle zajisté fungovat nemůže.

Nahoru Odpovědět
27.11.2017 23:15
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Frantisek Rychnovsky:28.11.2017 9:06

Hlásí to "undefined index". No nic, podle tutoriálu to vypadalo tak jednoduše :-) Zkusim nejdrive Swift nebo Phpmailer, snad to pujde snadno...

 
Nahoru Odpovědět
28.11.2017 9:06
Avatar
Frantisek Rychnovsky:29.11.2017 11:37

Pomohl byste mi někdo upravit přiložený kód tak, aby ten swiftmailer fungoval a vytáhnul si z formuláře ta data, která odešle? (tedy e-mail odesílatele a hodnot "OBRAZsirka"), nevím, jak se toho chopit...

<?php
//vložíme swift
require_once '/swiftmailer-master/lib/swift_required.php';

//Nachystáme SMTP transport definujeme server odchozí pošty, port, šifrování, login, heslo
$transport = Swift_SmtpTransport::newInstance()
  ->setHost('email.active24.com ')
  ->setPort(587)
  ->setEncryption('ssl')
  ->setUsername('Moje Username') //to si doplním
  ->setPassword('moje Heslo') //to si doplním
  ;

//Vytvoříme instanci maileru
$mailer = new Swift_Mailer($transport);

$telo= $_POST['OBRAZsirka'];

// vytvoříme zprávu
$message = (new Swift_Message('Kalkulace'))
  ->setFrom(['[email protected]' => 'František Rychnovský'])   //tedy moje adresa
  ->setTo(['[email protected]', '[email protected]' => 'A name'])  //asi adresa vložená z formuláře přes POST ?
  ->setBody('Šířka obrazu je:')   //tělo zprávy z formuláře - tedy jen hodnota z name OBRAZsirka, ideálně přidat rovnou jakýkoli styl ať vím,jak se k tomu přidá
  ;

//Odešleme zprávu
$result = $mailer->send($message);




?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>

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

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

        <!--SKRIPT Kalkulace-->
<script type="text/javascript">
        function OBR(){
                var Sirka = (document.getElementById("OBRsirka").value);
                var Vyska = (document.getElementById("OBRvyska").value);
                var Plocha = Sirka*Vyska/1000000;

                if (Plocha <= 0.2){var CM = 3400} else if (Plocha <=0.3){CM=3200} else if (Plocha <=0.5){CM=2800} else if (Plocha <=0.75){CM=2300} else if (Plocha <=0.95){CM=2000} else {CM=1800};

                document.getElementById("OBRbez").value=(CM*Plocha).toFixed(2);
                document.getElementById("OBRS").value=(CM*Plocha*1.21).toFixed(2);
                document.getElementById("M2").value=(CM);

                }
                </script>

</head>
<body>
<header></header>
<main>
<div>
<article>
        <div>
        <div>
        <div>
        <h2 id="KalkulatorObrazy">Kalkulace</h2>

        <form method="POST">
                <table>
                <tr><td class="">Šířka v cm</td>
                        <td><select name="OBRAZsirka" id="OBRsirka" onChange="OBR()">
                                <option value="0" selected="selected">Vyberte</option>
                                <option value="300">30 cm</option>
                                <option value="400">40 cm</option>
                                <option value="500">50 cm</option>
                                <option value="600">60 cm</option>
                                <option value="700">70 cm</option>
                                <option value="800">80 cm</option>
                                <option value="900">90 cm</option>
                                <option value="1000">100 cm</option>
                                </select>
                                </td></tr>

                <tr><td class="">Výška v cm</td>
                        <td><select id="OBRvyska" onChange="OBR()">
                                <option value="0" selected="selected">Vyberte</option>
                                <option value="300">30 cm</option>
                                <option value="400">40 cm</option>
                                <option value="500">50 cm</option>
                                <option value="600">60 cm</option>
                                <option value="700">70 cm</option>
                                <option value="800">80 cm</option>
                                <option value="900">90 cm</option>
                                <option value="1000">100 cm</option>
                                </select>
                                </td></tr>
                <tr><td class="">Cena bez dph</td>
                        <td><input class="inputPDCelkem" id="OBRbez" type="text" disabled></td></tr>
                <tr><td class="">Cena včetně dph</td>
                        <td><input class="inputPDCelkem" id="OBRS" type="text" disabled></td></tr>
                <tr><td class="">Cena za m2</td>
                        <td><input class="" id="M2" type="text" disabled></td></tr>
                                </table>
                                </form>

                <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>
            <br />
            <input type="submit" value="Odeslat kalkulaci" />
        </form>
                </div>
                </div>
        </div>
        <div></div>
</article>
</div>
</main>
</body>
</html>
 
Nahoru Odpovědět
29.11.2017 11:37
Avatar
Frantisek Rychnovsky:29.11.2017 14:34

Jeste cekam nez mi zmeni php na serveru na verzi 7, ted je tam 5.6. a swiftmailer uz asi jde jen pod 7...

 
Nahoru Odpovědět
29.11.2017 14:34
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Frantisek Rychnovsky
Petr Čech:29.11.2017 19:53

Když máš undefined index, bude to nejspíš něco znamenat, co myslíš? Já bych třeba dokonce řekl, že ti chybí POST parametr OBRAZsirka nebo co to bylo za index...

Nahoru Odpovědět
29.11.2017 19:53
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:29.11.2017 20:15

Frantisek Rychnovsky Možná by nebylo od věci naučit se nejdřív základy a až potom se vrhnout na něco, co může být tak komplikované jako odesílání mailu, co říkáš? :) A nebo tomu ani rozumět nechceš a jsi třeba majitel webu, co si myslí, že to bude tak jednoduché jako že jen zkopíruješ nějaký tutoriál na svůj web. Tak to vážně nefunguje ;) . Ale kdyby tomu tak přeci jen bylo, je tu i sekce na zakázky.

Jan Štrobl Jak tě mohlo napadnout, že by mohlo tohle kdy fungovat je mi záhadou:

$uspech = mb_send_mail($adresa, $predmet, $telo, $hlavicka);
$telo= $_POST['OBRAZsirka'];
Editováno 29.11.2017 20:17
Nahoru Odpovědět
29.11.2017 20:15
the cake is a lie
Avatar
Odpovídá na Petr Čech
Frantisek Rychnovsky:29.11.2017 21:53

Ne, ne :-) Po tolika a tolika hodinách... základech html, css a js už mi chybí jen kousek - submit na odeslání vyplněného formuláře - a ano, jak to vypadalo jednoduše, tak to nakonec není ;-) Na ten chybějící POST parametr jsem se ptal úplně na začátku ( ** $_POST['OBRAZ­sirka']** mi nenačítá hodnotu z name="OBRAZsirka"). Nevím proč, třeba je odpověď primitivní.
Každopádně nechat si napsat něco, čemu pak nebudu rozumět není cesta pro mě ;-)

 
Nahoru Odpovědět
29.11.2017 21:53
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:29.11.2017 23:58

Ha, našel jsem chybu, a je to opravdu hloupá chyba, která by člověka nenapadla :D . Máš tam dva formy, přičemž se samozřejmě odešle jen ten poslední, protože v něm je to tlačítko na odeslání.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.11.2017 23:58
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:30.11.2017 0:05

takto je to správně: https://codepen.io/anon/pen/BmGWMG

Nahoru Odpovědět
30.11.2017 0:05
the cake is a lie
Avatar
Frantisek Rychnovsky:5.12.2017 12:14

měl jsem čas až dnes, a díky, to je ono, to mě vůbec nenapadlo, dál už si s tím poradím, FR

 
Nahoru Odpovědět
5.12.2017 12:14
Avatar
Jan Štrobl
Člen
Avatar
Odpovídá na Petr Čech
Jan Štrobl:5.12.2017 12:48

jop, prohodil jsem to. Zasloužil bych kamenem do hlavy :D

 
Nahoru Odpovědět
5.12.2017 12:48
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 16 zpráv z 16.