Autor Zpráva
Honza21
Profil
Ahoj,
chtěl bych Vás poprosit, jestli by mi někdo neporadil, jak mám napsat JS, aby se mi odeslal email v a něm zapsané hodnoty z formuláře - viz. ZDE UKÁZKA FORMULÁŘE.
Umím jen základní "input", ale s tímhle se trápím už několikátý den a pořád mi to nejde zprovoznit. S JS mám málo zkušeností, jen hodně okrajově, takže budu rád, když mi nějaká hodná duše pomůže.

Předem děkuji moc za rady.
Honza
lionel messi
Profil
Honza21:
jak mám napsat JS, aby se mi odeslal email v a něm zapsané hodnoty z formuláře

JavaScript ako taký (v podobe, akej sa zmieňuje trebárs na Jakpsatweb.cz) je klientský jazyk, spracúva sa vo webovom prehliadači používateľa internetu. Webové prehliadače však e-maily fyzicky neodosielajú, to robia servery. Čiže potrebuješ serverový jazyk. Najprv musíme vedieť, aký jazyk podporuje tvoj server (ak nevieš aký, na 99,9% to bude ten najrozšírenejší - PHP) a v ňom si môžeš odosielanie e-mailov naprogramovať.

V Javascripte si vieš vytvoriť istú validáciu (ktorú ale treba robiť beztak aj na strane servera) alebo to, kedy sa majú údaje z formulára predať serverovému skriptu.

Máš záujem o riešenie v PHP?
Hapipo
Profil
lionel messi:
. .
Honza21
Profil
lionel messi:
Myslím, že jsem to popletl... Budu rád, když mi pomůžete v PHP, hlavně aby to už fungovalo.
Děkuji moc.
Tomášeek
Profil
Honza21:
Budu rád, když mi pomůžete v PHP, hlavně aby to už fungovalo.
Pomůžete vs. uděláte za mě.

Něco zkus sám, až si nebudeš vědět rady, přijř pro radu. Nečekej, že to tu za tebe někdo bude psát.
Honza21
Profil
Já to mám vcelku dost a právě nemůžu jen přijít na to, jak to zapsat do toho emailu, aby se to propojilo. Už na to vážně zkouším několikátý den udělat sám, určitě jsem nechtěl, aby to někdo dělal za mě. Chci jen poradit s tím PHP souborem, protože si myslím, že tam je kámen úrazu, proč nefunguje odeslání emailu. Níže posílám to, co mám hotové:

index.php
<form method="POST" class="kontakt-form" action="php/contact.php" id="formular">
    <div class="container2">
        <div class="column-left-">
            <label class="container-">Slunečnice
                <input type="checkbox" checked="checked">
                <span class="checkmark"></span>
            </label>
                <input type="number" name="quantity" min="0" max="100"><span style="font-size: 18px;"> ks</span>
                <select id="first" name="first"><option value="">Barva vyberte</option><option value="Červená">Červená</option><option value="Žlutá">Žlutá</option><option value="Oranžová">Oranžová</option><option value="Růžová">Růžová</option><option value="Mix barev">Mix barev</option></select>    
            <br>

            <label class="container-">Růže
                <input type="checkbox" checked="checked">
                <span class="checkmark"></span>
            </label>
            <input type="number" name="quantity" min="0" max="100"><span style="font-size: 18px;"> ks</span>
            <select id="second" name="second"><option value="">Barva vyberte</option><option value="Červená">Červená</option><option value="Žlutá">Žlutá</option><option value="Oranžová">Oranžová</option><option value="Růžová">Růžová</option><option value="Mix barev">Mix barev</option></select>    
            <br>

            <label class="container-">Kopretina
                <input type="checkbox" checked="checked">
                <span class="checkmark"></span>
            </label>
            <input type="number" name="quantity" min="0" max="100"><span style="font-size: 18px;"> ks</span>
            <select id="third" name="third"><option value="">Barva vyberte</option><option value="Červená">Červená</option><option value="Žlutá">Žlutá</option><option value="Oranžová">Oranžová</option><option value="Růžová">Růžová</option><option value="Mix barev">Mix barev</option></select>    
            <br>
            
            <label class="container-">Sazenice
                <input type="checkbox" checked="checked">
                <span class="checkmark"></span>
            </label>
            <input type="number" name="quantity" min="0" max="100"><span style="font-size: 18px;"> ks</span>
            <select id="fourth" name="fourth"><option value="">Barva vyberte</option><option value="Červená">Červená</option><option value="Žlutá">Žlutá</option><option value="Oranžová">Oranžová</option><option value="Růžová">Růžová</option><option value="Mix barev">Mix barev</option></select>    
            <br>

            <label class="container-">Tulipán
                <input type="checkbox" checked="checked">
                <span class="checkmark"></span>
            </label>
            <input type="number" name="quantity" min="0" max="100"><span style="font-size: 18px;"> ks</span>
            <select id="fifth" name="fifth"><option value="">Barva vyberte</option><option value="Červená">Červená</option><option value="Žlutá">Žlutá</option><option value="Oranžová">Oranžová</option><option value="Růžová">Růžová</option><option value="Mix barev">Mix barev</option></select>    
            <br>
        </div>
    </div>
    <button type="submit" name="submit" class="kontakt-button">Odeslat</button>
</form>
<script type="text/javascript">
    $("#formular").submit(function(e) {
        e.preventDefault();

        var form = $(this);
        var url = form.attr('action');

        $.ajax({
            type: "POST",
            url: url,
            data: form.serialize(),
            success: function(data)
            {
                $("#formular").prepend(data);

                var areas = document.getElementsByClassName("clrthis");

                for(var i = 0; i < areas.length; i++){
                    areas[i].value = "";
                }
            }
        });
    });
</script>


contact.php
<?php
    include_once "headers.php";
    include_once "db.php";

    function check_if_empty($input){
        if(empty($input))
            return "-";
        else
            return $input;
    }

    if((!empty($_POST["email"]) || !empty($_POST["first"])) && !empty($_POST["second"]) && !empty($_POST["third"]) && !empty($_POST["fourth"]) && !empty($_POST["fifth"])){
        $to      = "info@domena.cz";
        $subject = "Objedvávka z webu";

        $message = htmlspecialchars(check_if_empty($_POST["first"]))."<br>";
        $message .= htmlspecialchars(check_if_empty($_POST["second"]))."<br>";
        $message .= htmlspecialchars(check_if_empty($_POST["third"]))."<br><br>";
        $message .= htmlspecialchars(check_if_empty($_POST["fourth"]))."<br><br>";
        $message .= htmlspecialchars(check_if_empty($_POST["fifth"]))."<br><br>";

        $headers = "Content-Type: text/html; charset=UTF-8\r\n";
        $headers .= "From: web@domena.cz";

        mail($to, $subject, $message, $headers);

        $stmt = $connection->prepare("INSERT INTO messages (first, second, third, fourth, fifth) VALUES (null, ?, ?, ?, ?)");
        $stmt->bind_param("ssss", $first, $second, $third, $fifth);

        $message = $connection->real_escape_string(htmlspecialchars(check_if_empty($_POST["first"])));
        $message = $connection->real_escape_string(htmlspecialchars(check_if_empty($_POST["second"])));
        $message = $connection->real_escape_string(htmlspecialchars(check_if_empty($_POST["third"])));
        $message = $connection->real_escape_string(htmlspecialchars(check_if_empty($_POST["fourth"])));
        $message = $connection->real_escape_string(htmlspecialchars(check_if_empty($_POST["fifth"])));

        if($stmt->execute())
            echo "Děkujeme, na Vaši objednávku odpovíme nejpozději do 24 hodin.";
        else
            echo "Omlouváme se, ale při zpracování došlo k chybě.";
    }
    else {
        echo "Omlouváme se, ale nebyly správně zadané údaje."; //něco chybí, něco zůstalo nevyplněný.
    }
?>


Děkuji
Tomášeek
Profil
Honza21:
určitě jsem nechtěl, aby to někdo dělal za mě.
Což nebylo zřejmé, když jsi neukázal ani řádku kódu. Navíc nebylo co debugovat, aniž bychom to viděli...

V HTML není pole s name=email, čili podmínka na 12. řádku bude vždy false.
Checkboxy v HTML nemají atribut name, tudíž se neodešlou a jsou tam jaksi navíc (pokud neslouží jen k JS zobrazování/skrývání obsahu).

Pak moc nechápu, k čemu je funkce check_if_empty, kdy ji voláš uvnitř podmínky z řádku 12, která prázdné hodnoty z formuláře nepustí. Namísto toho formát vloženého e-mailu nekontroluješ nikde.

Na řádcích 30-34 si přepisuješ neustále proměnnou $message (bude v ní jen to na řádku 24), kterou pak dál nepoužíváš. Vlastně to celé nedává v tom místě žádný smysl.

Možná tam toho bude víc, tohle je viditelné na první letmý pohled.
Honza21
Profil
Tomášeek:
Zkouším to podle Vás opravovat, ale nejde mi to. Nemohl by jste mi prosím poslat úpravu v živé ukázce. Budu moc vděčný.
Tomášeek
Profil
Honza21:
Nechce se mi ten kód celý procházet, navíc bez includovaných souborů ho ani nemám šanci rozběhnout (a ne, nechci je poslat).

Napsal jsem toho dost, proč to nefunguje, je to základní debugging. Zjisti si, kam se script dostane (do všech větví si vlož nějaká echa) a koukej, která se ti vypíšou a kde script skončí. Zapni si výpis chybových hlášek, pokud jsou ve scriptu syntaktické chyby. Celé to PHP má pár řádků, neměl by být problém ho rozběhnout, nemyslíš?
Kajman
Profil
Honza21:
A nepošle se tedy jen mail ale hodnoty se uloží do databáze v pořádku?
lionel messi
Profil
Tomášeek:
V HTML není pole s name=email, čili podmínka na 12. řádku bude vždy false.

Len upresním: Určite to nie je žiaduce správanie autorovho skriptu, ale nemyslím si, že tá podmienka bude vždy false. Najprv sa vyhodnotí výraz s ||, keďže je v zátvorkách, potom postupne zvyšok. Ak vyplníme všetky ostatné premenné okrem $_POST["email"] hodnotami, ktoré sa nepretypujú na false, podmienka bude true.

So zvyškom tvojho príspevku plne súhlasím.
Tomášeek
Profil
lionel messi:
Máš pravdu, všude jsem tam "viděl" &&. Toho ozávorkování a || v první části podmínky jsem si nevšiml.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0