Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Oznámení

PHP PHP Oznámení American English version English version

Aktivity (1)
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
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na pgarsky
patrik.valkovic: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.valkovic
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
Redaktor
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
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na pgarsky
patrik.valkovic: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.valkovic
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
Redaktor
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
Redaktor
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
Redaktor
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
Redaktor
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
Jiří Gracík
Redaktor
Avatar
Odpovídá na David Hynek
Jiří Gracík:29.8.2016 0:11

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

Nahoru Odpovědět  +1 29.8.2016 0:11
Creating websites is awesome till you see the result in another browser ...
Avatar
David Hynek
Redaktor
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.