NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Oznámení

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
pgarsky
Člen
Avatar
pgarsky:28.8.2016 16:23

Ahoj, rád bych věděl, jak udělat, když mám třeba u kontaktního formuláře kontakt <form method="post" action="system­.php">, aby se zobrazovaly oznámení o odeslání mailu pořád na té stránce, kde je kontaktní formulář a nesměrovalo se to jinam?
A pokud mi rovnou může někdo poradit, jak udělat, aby PHP když se odešle mail vykonal javascript příkaz alert()?

Odpovědět
28.8.2016 16:23
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Patrik Valkovič:28.8.2016 16:31

Odesílá se to přes ajax.

Nahoru Odpovědět
28.8.2016 16:31
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Patrik Valkovič
pgarsky:28.8.2016 16:33

můžu vidět kód ?

Nahoru Odpovědět
28.8.2016 16:33
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:28.8.2016 16:37

:) máš dvě možnosti, jednoduchou a složitou

U té jednoduché to uděláš falešným oznámením, tedy nasadíš metodu na formulář onsubmit="aler­t('Formulář odeslán')" a teprve potom to odešleš... je to trochu falešné, ale z 99.9% se to co odešleš skutečně odešle.

U té složitější, se zapojí ajax. Formulář se odešle, ale stránka se nepřesměruje.
Při odeslání opět použiješ onsubmit, spustíš funkci s obsahem toho co je dole a přidáš return false, aby se fyzicky formulář neodeslal. Přes Javascript pak můžeš třeba formulář schovat, nebo vymazat...
Třeba takto:

data = "polozka1="+form.polozka1+"&polozka2="+form.polozka2;  // atd...
var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function() {
  if (xhttp.readyState == 4 && xhttp.status == 200) {
  alert("Formulař odeslán.");
  }
  }

xhttp.open("POST", "system.php", true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");
xhttp.setRequestHeader("Content-length", data.length);
xhttp.setRequestHeader("Connection", "close");
xhttp.send(data);
Nahoru Odpovědět
28.8.2016 16:37
Čím víc vím, tím víc věcí nevím.
Avatar
pgarsky
Člen
Avatar
Odpovídá na David Hynek
pgarsky:28.8.2016 17:07

Prosím, jsem začátečník, jak se ta metoda nasazuje ?

Nahoru Odpovědět
28.8.2016 17:07
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Odpovídá na pgarsky
Patrik Valkovič:28.8.2016 17:45

Kód máš výše. Protože jsi začátečník, přečti si nejprve něco o AJAXu. Potom se můžeme bavit dál.

Nahoru Odpovědět
28.8.2016 17:45
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
pgarsky
Člen
Avatar
Odpovídá na Patrik Valkovič
pgarsky:28.8.2016 17:51

Já potřebuji jen tohle rychle. A já se neptám na kód, já se ptám jak ho nasadit? Kam ho napsat ?

Nahoru Odpovědět
28.8.2016 17:51
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na pgarsky
David Hynek:28.8.2016 18:05

to je takhle blbě píše. Část je v HTML stránce, část Javascriptovém souboru... část v PHP programu, který to zpracovává. Když to nasadíš blbě, tak odpálíš server s hostingem. Když správně nezpracuješ posílaná data, před a po odeslání, nemusí se ti poslat celá.
Jestli se s tím chceš jako začátečník vypořádat trochu kultivovaněji. Vytvoř si stránku, kde bude informace o uložení formuláře a pak v PHP scriptu po zpracování formuláře odkaž na tuto stránku.

Ale AJAX není zas tak složitý, v podstatě ti stačí to co jsem ti napsal, vše ostatní se řeší přes JavaScript, jako načtení hodnoty, úprava vzhledu a pod.

Editováno 28.8.2016 18:07
Nahoru Odpovědět
28.8.2016 18:05
Čím víc vím, tím víc věcí nevím.
Avatar
pgarsky
Člen
Avatar
Odpovídá na David Hynek
pgarsky:28.8.2016 18:33

Stejně Vám pořád moc nerozumím. Mohl bych poprosit o Skype ?

Nahoru Odpovědět
28.8.2016 18:33
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na pgarsky
David Hynek:28.8.2016 19:49

skype nepoužívám... dej nějak odkaz na formulář a zkusím pomoci...

Nahoru Odpovědět
28.8.2016 19:49
Čím víc vím, tím víc věcí nevím.
Avatar
pgarsky
Člen
Avatar
pgarsky:28.8.2016 19:53

spíš napíšu kód na index.php, na kterým je form a kontakt.php se scriptem.
Index:

<form method="post" action="kontakt.php">
           <p>Typ zprávy: </p><br />
           <select name="typ">
               <option value="mail">Klasická zpráva</option>
               <option value="reklamace">Reklamace</option>
               <option value="napady">Nápady a vylepšení stránky</option>
               <option value="stiznosti">Stížnosti</option>
               <option value="dotazy">Dotazy k objednávce</option>
           </select>
           <p>Jméno a přijmení: </p>
           <input name="jmeno-prijmeni" type="text" required>
           <p>Email: </p>
           <input name="email" type="text" required>
           <p>Zpráva: </p>
           <textarea name="text" required></textarea>
           <br />
           <input type="submit" value="Odeslat!">
       </form>

Kontakt:

<?php
mb_internal_encoding('UTF-8');
if ($_POST)
{
    $hlavicka = 'From ' . $_POST['email'];
    $hlavicka = "Content: text/html, charset=utf-8";
    $adresa = '[email protected]';
    $predmet = $_POST['typ'];
    $zprava = 'Jméno a přijmení: ' . $_POST['jmeno-prijmeni'] . 'Zpráva: ' . $_POST['text'];
    $odeslano = mb_send_mail($adresa, $predmet, $zprava, $hlavicka);
}
?>
Nahoru Odpovědět
28.8.2016 19:53
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
pgarsky
Člen
Avatar
Odpovídá na David Hynek
pgarsky:28.8.2016 19:55

Tady je.

Nahoru Odpovědět
28.8.2016 19:55
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
David Hynek
Tvůrce
Avatar
Odpovídá na pgarsky
David Hynek:28.8.2016 20:06

ok... jak to bude, pošlu... :)

Nahoru Odpovědět
28.8.2016 20:06
Čím víc vím, tím víc věcí nevím.
Avatar
pgarsky
Člen
Avatar
Odpovídá na David Hynek
pgarsky:28.8.2016 20:13

OK a kdy ?

Nahoru Odpovědět
28.8.2016 20:13
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:28.8.2016 21:34

máš to v mailu...

Nahoru Odpovědět
28.8.2016 21:34
Čím víc vím, tím víc věcí nevím.
Avatar
Odpovídá na David Hynek
Neaktivní uživatel:29.8.2016 0:11

Nebylo by lepší zde zanechat i řešení? Tohle potřebuje pořád někdo.

Nahoru Odpovědět
29.8.2016 0:11
Neaktivní uživatelský účet
Avatar
David Hynek
Tvůrce
Avatar
David Hynek:29.8.2016 6:23

o.k. ale je potřeba to ošetřit z bezpečnostního hlediska.

<div id="formular">
        <form method="post" name="formular" onsubmit="odeslat(); return false">
           <p>Typ zprávy: </p><br />
           <select name="typ" id="typ">
               <option value="mail">Klasická zpráva</option>
               <option value="reklamace">Reklamace</option>
               <option value="napady">Nápady a vylepšení stránky</option>
               <option value="stiznosti">Stížnosti</option>
               <option value="dotazy">Dotazy k objednávce</option>
           </select>
           <p>Jméno a přijmení: </p>
           <input name="jmeno_prijmeni" id="jmeno" type="text" required />
           <p>Email: </p>
           <input name="email" id="email" type="text" required />
           <p>Zpráva: </p>
           <textarea name="text" id="text" required></textarea>
           <br />
           <input type="submit" value="Odeslat!" />
       </form>
       </div>
       <script>


        function odeslat()
        {
        data= "typ="+escape(encodeURIComponent(document.getElementById("typ").value));
        data += "&jmeno-prijmeni="+escape(encodeURIComponent(document.getElementById("jmeno").value));
        data += "&email="+escape(encodeURIComponent(document.getElementById("email").value));
        data += "&text="+escape(encodeURIComponent(document.getElementById("text").value));

        var xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
        if (xhttp.readyState == 4 && xhttp.status == 200) {
        document.getElementById("formular").innerHTML = xhttp.responseText;
        alert("Formulář byl odeslán!")
          }
        }

        xhttp.open("POST", "script.php", true);
        xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=utf-8");
        xhttp.setRequestHeader("Content-length", data.length);
        xhttp.setRequestHeader("Connection", "close");
        xhttp.send(data);
        }
       </script>
Editováno 29.8.2016 6:24
Nahoru Odpovědět
29.8.2016 6:23
Čím víc vím, tím víc věcí nevím.
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 17 zpráv z 17.