Diskuze: Oznámení

PHP PHP Oznámení American English version English version

Avatar
pgarsky
Člen
Avatar
pgarsky:

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. srpna 16:23
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na pgarsky
patrik.valkovic:

Odesílá se to přes ajax.

Nahoru Odpovědět 28. srpna 16:31
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
pgarsky
Člen
Avatar
 
Nahoru Odpovědět 28. srpna 16:33
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

:) 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. srpna 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:

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

 
Nahoru Odpovědět 28. srpna 17:07
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na pgarsky
patrik.valkovic:

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. srpna 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:

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. srpna 17:51
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na pgarsky
David Hynek:

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. srpna 18:07
Nahoru Odpovědět 28. srpna 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:

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

 
Nahoru Odpovědět 28. srpna 18:33
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na pgarsky
David Hynek:

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

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

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 = 'adresa@adresa.cz';
    $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. srpna 19:53
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na pgarsky
David Hynek:

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

Nahoru Odpovědět 28. srpna 20:06
Čím víc vím, tím víc věcí nevím.
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

máš to v mailu...

Nahoru Odpovědět 28. srpna 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:

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

Nahoru Odpovědět  +1 29. srpna 0:11
Creating websites is awesome till you see the result in another browser ...
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

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. srpna 6:24
Nahoru Odpovědět 29. srpna 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.