Geek tričko zdarma Geek tričko zdarma
Tričko zdarma! Stačí před dobitím bodů použít kód TRIKO15. Více informací zde

Lekce 9 - Vylepšení kontaktního formuláře v PHP

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Kontaktní emailový formulář v PHP, jsme naprogramovali jednoduchý emailový formulář. V dnešním PHP tutoriálu ho vylepšíme.

Předvyplnění polí

Když něco špatně vyplníme, skript nám to oznámí, ale formulář je již prázdný. Je to samozřejmě proto, že zobrazujeme již jinou stránku, než do které jsme data zadávali.

Protože zpracováváme data tím samým skriptem, ve kterém je formulář, můžeme do formuláře jednoduše vložit hodnoty z POSTu v případě, že byly nějaké odeslány. Budete to vypadat, jako by se formulář ani nevymazal.

V PHP bloku těsně před formulářem si naplníme proměnné $jmeno, $email a $zprava hodnotami z $_POST. To můžeme udělat samozřejmě jen v případě, když v POSTu tyto hodnoty jsou. Pokud ne, dáme do proměnných prázdné řetězce.

V této chvíli bychom kód napsali asi takto:

if (isset($_POST['jmeno']))
        $jmeno = $_POST['jmeno'];
else
        $jmeno = '';

Kód je poměrně dlouhý a psát ho pro všechny 3 proměnné by bylo nepohodlné. Zvláště, když by formulář obsahoval ještě další pole. Proto si uvedeme tzv. ternární výraz. Jedná se o zkrácenou podobu if ... else. Ternání výraz vždy vrací nějakou hodnotu, nedá se tedy použít jen místo podmínky. Skládá se ze tří části, což by nás podle jeho názvu nemělo překvapit :) V první části uvedeme podmínku, dále znak ? a poté hodnotu, kterou má výraz vrátit, pokud podmínka platí. Za ní uvedeme : a hodnotu, která se má vrátit, když podmínka neplatí.

Proměnnou bychom pomocí ternárního výrazu naplnili takto:

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

Ještě malá rekapitulace. Pokud v POSTu existuje daný klíč, vložíme tuto hodnotu do proměnné $jmeno. Pokud ne, vložíme tam prázdný textový řetězec, což jsou jednoduše uvozovky, mezi kterými nic není.

Toto uděláme ještě s emailem a zprávou.

Formulář dále upravíme tak, aby se do jeho polí vkládaly hodnoty z těchto proměnných. Pokud nebyl formulář odeslán, vloží se tam prázdné řetězce, jinak se tam vloží to, co uživatel vyplnil.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Do formulářového pole bychom mohli hodnotu vložit takto:

<input name="jmeno" type="text" value="<?php echo $jmeno ?>" />

Pokud chceme v PHP sekvenci pouze vypsat obsah proměnné, použijeme k tomu zkrácenou direktivu <?=. Stejného výstupu tedy můžeme dosáhnout i kratším zápisem:

<input name="jmeno" type="text" value="<?= $jmeno ?>" />

Stále to však není ono. Jelikož text v proměnné $jmeno pochází od uživatele, nemůžeme si být jistí, že je bezpečný. Co kdyby nám do textu uživatel vložil nějaký HTML kód? Vložil by se poté normálně do naší stránky.

V našem případě by to tolik nevadilo, ale jsou případy, kde ano. Představte si, že vypisujete na stránce zprávy od uživatelů, třeba komentáře k nějakému článku. A jeden uživatel místo textu zprávy vložil HTML kód s formulářem, který je nasměrovaný na jeho obslužný skript na jiném webu a ve kterém požaduje od vašich uživatelů heslo. Při vypisování zprávy se tento kód vypíše do stránky a zobrazí se jeho formulář. Někteří vaši uživatelé tam opravdu zadají své heslo, které se odešle někam útočníkovi. A vy máte problém.

Tomuto typu útoku se říká XSS (jako Cross Site Scripting). Obrana je velmi jednoduchá, před vypsáním obsahu kterékoli proměnné do HTML kódu stránky použijte funkci htmlspecialchar­s(). Ta převede špičaté HTML závorky a pár dalších znaků na tzv. HTML entity. Případný škodlivý kód je potom braný jen jako obyčejný text a prohlížeč ho nezpracuje jako HTML kód.

Je potřeba při výpisu ošetřovat opravdu každou proměnnou, i ty, které uživatel přímo nezadá. Nikdy totiž nevíte, jestli se obsah proměnné neskládá z něčeho, co uživatel zadal a jednoduše se to nedá ohlídat. Proto se ošetří vše a to přímo na tom místě, kde proměnnou vypisujeme. Až budete pokročilejší a budete znát objektovou architekturu, dokážete tento proces zautomatizovat, abyste funkci nemuseli ručně psát.

Ukažme si konečně upravený HTML kód formuláře i s direktivou nad ním:

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

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

<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>
        <textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea>
        <br />

        <input type="submit" value="Odeslat" />
</form>

Formulář si vyzkoušejme. Ponechme nějaké pole prázdné a odešleme, ukáže se chybová hláška a zároveň zůstane i to, co uživatel vyplnil:

Kontaktní formulář
localhost/mail­form.php

Přesměrování

Formulář má nyní dvě podstatné vady. Pokud zprávu úspěšně odešleme, stejně zůstane předvyplněný. A hlavně pokud po odeslání stiskneme F5, formulář se odešle znovu. Tímto neduhem trpí všechny formuláře, pokud jej zpracovává ten samý soubor, ve kterém je formulář vložený (což je většinou nutné).

Pokud je zpracování formuláře dokončeno, měli bychom provést přesměrování. Přesměrujeme na tu samou adresu, na které je formulář. Díky přesměrování se ovšem ztratí data v $_POST. Následné obnovení stránky tak již nic neodešle.

Přesměrování provedeme pomocí funkce header. Ta odešle tzv. hlavičku prohlížeči. Právě hlavička může obsahovat informaci o přesměrování a to pomocí slova Location.

Po uložení úspěšné hlášky tedy formulář přesměrujeme:

if ($uspech)
{
        $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
        header('Location: mailform.php');
        exit;
}

Funkcí exit() ukončíme běh skriptu, jelikož samotné přesměrování ho nezastaví, jen pošle prohlížeči návštěvníka informaci o tom, že se má přesunout na jinou lokaci.

Formulář již netrpí opětovným odesláním při obnovení stránky. Nezobrazuje ovšem ani hlášku o úspěchu. Mělo by vám být jasné proč, když přesměrujeme na jinou stránku, obsah proměnných na stránce stávající se ztratí a tím i ten v $hlaska. Řešení je několik, tím nejjednodušším je předat pomocí GET parametru stránce nějakou proměnnou. Podle toho stránka pozná, že na ní bylo přesměrováno po úspěšném odeslání a zobrazí o tom zprávu. Kód změníme na následující podobu:

header('Location: mailform.php?uspech=ano');
exit;

Přesuneme se na začátek skriptu, kde hlášku nastavujeme na prázdný string. Podíváme se, zda nám nepřišel v adrese parametr úspěch. Pokud ano, nastavíme hlášku na text, který se má při úspěchu uživateli vypsat. Již víme, že parametry z URL adresy přicházejí na rozdíl od parametrů z formuláře v poli $_GET:

$hlaska = '';
if (isset($_GET['uspech']))
        $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';

Můžete si vychutnat dobře fungující formulář.

POZOR! Přesměrovat můžeme pouze v případě, že jsme ještě nevypsali žádné HTML. Jakmile se totiž začne něco vypisovat, PHP prohlížeči odešle hlavičku, kde mu říká, že mu posílá HTML soubor. Hlavičku lze samozřejmě odeslat jen jednou, když se pokusíme veprostřed souboru přesměrovat, dostaneme chybovou hlášku "Headers already sent" a k přesměrování nedojde. To by se stalo třeba v tomto případě:

<html>
        <body>
                <?php
                        // Tento kód je špatně
                        header('Location: index.php');
                        exit;
                ?>
        </body>
</html>

Dávejte si pozor i na tento případ, ve kterém chyba není na první pohled vidět:

-- Zde je prázdná řádka --
<?php

        header('Location: index.php');

?>
<html>
        <body>
        </body>
</html>

Na začátku souboru je odřádkování. I to je znak, který odstartuje výstup a PHP ho odesílá prohlížeči spolu s hlavičkou. Podobný problém bývá s mezerou. Pokud ukládáte UTF-8 soubory s tzv. BOM, může dělat právě tyto problémy. Pokud však používáte kvalitní IDE, tak se vám to nestane.

Pozn.: Někteří začátečníci přesměrovávají tak, že vyechují JavaScript, pomocí kterého změní adresu okna. Vypadá asi takto:

// Tento kód je špatně
echo('<script type="text/javascript">
        window.location = "index.php"
</script>');

Tento způsob je však nespolehlivý a někdy i nebezpečný. Nepoužívejte ho.

Formulář si můžete nastylovat, aby vypadal lépe. Hlášku dát do nějaké bubliny a podobně. To ale již není předmětem tohoto PHP kurzu, stylování se probírá v jiném on-line kurzu :) Kompletní formulář je ke stažení níže. V příští lekci, Skládání stránek v PHP, se podíváme na skládání stránek pomocí PHP.


 

Stáhnout

Staženo 3145x (1.33 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
33 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
Kontaktní emailový formulář v PHP
Všechny články v sekci
Základní konstrukce jazyka PHP
Miniatura
Následující článek
Skládání stránek v PHP
Aktivity (7)

 

 

Komentáře

Avatar
Snorlax
Redaktor
Avatar
Snorlax:6.10.2013 10:59

já místo

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

používám

$jmeno = @$_POST['jmeno']

je výsledek "stejnej"? (i z ohledu bezpečnosti a jinejch věcí)...

Odpovědět 6.10.2013 10:59
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka:6.10.2013 11:08

Zavináče se odnauč používat, potlačují chyby, které mají svůj význam.

Odpovědět 6.10.2013 11:08
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na David Čápka
Snorlax:6.10.2013 11:11

sakra! :D ale když ono se to píše líp než ten dlouhej :D tereticky bych si na to mohl ale udělat funkci s nějakym jednoznakovým názvem. třeba

$jmeno = #($_POST['jmeno']);

toby teoreticky šlo ne?

Odpovědět 6.10.2013 11:11
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Snorlax
David Čápka:6.10.2013 11:14

To by šlo, jen ten název se mi tedy nelíbí. Ale než řešit takovéhle věci, tak je lepší napsat si nějakou třídu, co obsluhuje formuláře a co to dělá plně automaticky.

Odpovědět 6.10.2013 11:14
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na David Čápka
Snorlax:6.10.2013 11:21

já se to OOp prostě budu muset naučit :D

Odpovědět 6.10.2013 11:21
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Kit
Redaktor
Avatar
Odpovídá na Snorlax
Kit:6.10.2013 11:28

Určitě se OOP nauč. Je to i zábavnější než hromady funkcí. I s primitivním objektem můžeš dosáhnout elegance:

$jmeno = $post->jmeno;

nebo rovnou použít $post->jmeno tam, kde ho potřebuješ. Přitom všechny potřebné kontroly a konverze se provedou uvnitř objektu.

Odpovědět 6.10.2013 11:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Snorlax
Redaktor
Avatar
Odpovídá na Kit
Snorlax:6.10.2013 11:32

ok tak já se na to někdy kouknu... motivace by byla, už to jen chce čas :D

Odpovědět 6.10.2013 11:32
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:16.10.2013 18:57

Sdraco , kde kontroluješ ten Antispam?

Odpovědět 16.10.2013 18:57
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:16.10.2013 19:01

Nějak nechápu na co se ptáš, možná jsi přehlédl, že toto je 2. díl. Zdrojový kód je jako u většiny mých článků ke stažení.

Odpovědět 16.10.2013 19:01
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:16.10.2013 19:07

Ptám se, kde máš kontrolu roku zadaného do tagu <input name="rok" type="number" />

Odpovědět 16.10.2013 19:07
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:16.10.2013 19:08

A já ti odpovídám, že je ve zdrojáku (kde jinde by byla?).

Odpovědět 16.10.2013 19:08
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:16.10.2013 19:18

Já jen, že to není v článku.

Odpovědět 16.10.2013 19:18
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:16.10.2013 19:19

Protože jsi ho nečetl, na začátku je napsáno, že se jedná o pokračování (1. věta)

Odpovědět 16.10.2013 19:19
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na David Čápka
Zdeněk Pavlátka:16.10.2013 19:23

Článek jsem četl celý (a spoustu dalších také), ale tohle jsem v tom předchozím přehlédl. :[

Odpovědět 16.10.2013 19:23
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
matusososo
Člen
Avatar
matusososo:1.11.2013 21:24

$jmeno = (isset($_POST['jme­no']) ? $_POST['jmeno'] : '';

V tomto kode ti chyba zatvorka

 
Odpovědět 1.11.2013 21:24
Avatar
jnao01
Člen
Avatar
Odpovídá na David Čápka
jnao01:30.12.2013 20:21

David Čápka
Zdravím,
len chcem upozorniť na chyby v texte, konkrétne:

$jmeno = (isset($_POST['jmeno']) ? $_POST['jmeno'] : '';
Ještě malá rekapitulace. Pokud v POSTu existuje daný klíč, vložíme tuto hodnotu do proměnné $jmeno. Pokud ne, vložíme tam prázdný textový řetězec, což jsou jednoduše uvozovky, mezi kterými nic není.

Toto uděláme ještě se jménem a zprávou.
$jmeno = (isset($_POST['jmeno']) ? $_POST['jmeno'] : '';

Tu ti chýba ukončenie prvej zátvorky.

Toto uděláme ještě se **jménem** a zprávou.

Namiesto jménem tam má byť email. ;)

 
Odpovědět  +1 30.12.2013 20:21
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jnao01
David Čápka:9.1.2014 18:48

Díky, opraveno.

Odpovědět 9.1.2014 18:48
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
mapak
Člen
Avatar
mapak:10.1.2014 14:47

Ahoj! Jen bych upozornil začátečníky, že zápis value="<?= $jmeno ?>" funguje jen v případě, že jsou v konfiguraci PHP povoleny krátké tagy (short open tag). Docela mi trvalo, než jsem na to přišel :-)

 
Odpovědět 10.1.2014 14:47
Avatar
teofil
Člen
Avatar
teofil:19.1.2014 21:54

Ahoj. Já jednu otázku:
Jak dostat do textu té odesílané zprávy, jméno z formuláře? Zkoušel jsem do řádku níže vložit toto, ale nefunguje mi to :-(

$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'.'jmeno'], $hlavicka );
Editováno 19.1.2014 21:55
 
Odpovědět 19.1.2014 21:54
Avatar
Odpovídá na teofil
Neaktivní uživatel:19.1.2014 22:12

Ahoj, já jednu odpověd:

$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'].$_POST['jmeno'], $hlavicka );
Editováno 19.1.2014 22:13
Odpovědět 19.1.2014 22:12
Neaktivní uživatelský účet
Avatar
teofil
Člen
Avatar
teofil:19.1.2014 22:22

Díky. Já už jsem to vyřešil takto:

$zprava = $_POST['zprava'];
            $zprava .= "<hr>Odesílatel: <b>". $_POST['jmeno']. "</b>";
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";

            $adresa = '[email protected]';
            $predmet = 'Nová zpráva z webového formuláře';
            $uspech = mb_send_mail($adresa, $predmet, $zprava, $hlavicka );
 
Odpovědět 19.1.2014 22:22
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):2.2.2014 10:27

Ahoj, mohol by si uviesť pre ilustráciu ako by mohol vyzerať Cross Site Scripting útok?

Odpovědět 2.2.2014 10:27
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
mkub:2.2.2014 10:41

o cross site scriptingu sa uz toho tolko popisalo... staci do url, zadat ako vstupnu hodnotu nejaku funkciu v javascripte a ak PHP neosetruje to, co je vo vstupnych premennych a hned zobrazuje obsah formulara, okamzite vykona danu funkciu (napr. zmeni celu stranku, resp. presmeruje na iny web a pod...

staci trosku zagooglit

Editováno 2.2.2014 10:43
 
Odpovědět 2.2.2014 10:41
Avatar
Odpovídá na mkub
Libor Šimo (libcosenior):2.2.2014 10:47

Ak som správne pochopil čo je písané v lekcii, škodlivý kód by sa mohol zadať do formulára. Tu by som rád videl nejaký jednoduchý konkrétny príklad.

Odpovědět 2.2.2014 10:47
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na mkub
Libor Šimo (libcosenior):2.2.2014 11:07

Mám na serveri nezabezpečený vstup od užívateľa. Skús spraviť útok.
http://libco-testy.wz.sk/
Proste ma zaujíma či to funguje.

Editováno 2.2.2014 11:09
Odpovědět 2.2.2014 11:07
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):2.2.2014 11:10

Chcem to ako dôkaz pre všetkých, že nezabezpečiť vstup od užívateľa je fakt nebezpečné. :)

Odpovědět 2.2.2014 11:10
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
mkub:2.2.2014 11:27

ty v tom kode nevyupisujes ziadny obsah premennych do stranky... cross site scripting funguje pri vypise obsahu neosetrenej premennej do webovej stranky

 
Odpovědět 2.2.2014 11:27
Avatar
Odpovídá na mkub
Libor Šimo (libcosenior):2.2.2014 11:29

OK, skúsim to upraviť.

Odpovědět 2.2.2014 11:29
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na mkub
Libor Šimo (libcosenior):2.2.2014 11:39

Môžme testovať. ;)

Odpovědět 2.2.2014 11:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):2.2.2014 11:47

Pre tých, ktorým sa nechce otvárať neznáma stránka:

Odpovědět 2.2.2014 11:47
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):2.2.2014 12:28

Tak nájde sa niekto, kto tam dá funkčnú injekciu?

Odpovědět 2.2.2014 12:28
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
mkub
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
mkub:2.2.2014 12:41

zatial to berie normalne HTML tagy (tym sa da narusit design stranky)

 
Odpovědět 2.2.2014 12:41
Avatar
Odpovídá na mkub
Libor Šimo (libcosenior):2.2.2014 12:56

Naruš dizajn. Zaujíma ma výsledok.

Odpovědět 2.2.2014 12:56
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na mkub
Libor Šimo (libcosenior):2.2.2014 14:30

OK, je to potvrdené. Zadal som tam:

<table>
<tr><td>somár</td></tr>
</table>

a výsledok je

Odpovědět 2.2.2014 14:30
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):2.2.2014 14:31

Ďakujem, možte zavrieť vlákno. :)

Odpovědět 2.2.2014 14:31
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka:2.2.2014 14:32
  1. Vlákna nezavíráme
  2. Nejsi ve fóru, ale v diskuzi k článku, kde jsi vytvořil offtopic
Odpovědět 2.2.2014 14:32
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):2.2.2014 14:34

Prečo offtopic, podľa teba toto do diskusii k článku nepatrí?
Ak nie, veľmi sa ospravedlňujem. :[

Odpovědět 2.2.2014 14:34
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka:2.2.2014 14:45

Máš pravdu, článek o XSS hovoří. Stejně tohle prosím řeš ve fóru, potom je pod články stovky komentářů a nikdo se v tom nevyzná.

Odpovědět 2.2.2014 14:45
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):2.2.2014 15:13

Súhlasím, len som si myslel, že tu by to bolo lepšie. ;)

Odpovědět 2.2.2014 15:13
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
teofil
Člen
Avatar
teofil:11.2.2014 22:32

Ahoj. Trochu jsem si poopravil tento kód a bohužel se mi teď objevil problém, že některé servery mi odeslanou zprávu jaksi nepřijmou, ta zpráva prostě nedorazí. Např. CENTRUM.CZ mi to nebere, ale emailový klient na mé doméně to vezme vždycky.8|

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

    $hlaska = '';
    if (isset($_GET['uspech']))
        $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
    if ($_POST)
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
            isset($_POST['zprava']) && $_POST['zprava']
            )
        {

            $zprava = $_POST['zprava'];
            $zprava .= "<hr>Odesílatel: <b>". $_POST['jmeno']. "</b>";
            $hlavicka = 'From:' . $_POST['email'];
            $hlavicka .= "\nMIME-Version: 1.0\n";
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";

            $adresa = '[email protected]';
            $predmet = 'Nová zpráva z webového formuláře';
            $uspech = mb_send_mail($adresa, $predmet, $zprava, $hlavicka );
            if ($uspech)
            {
                $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
                header('Location: kontakt.php?uspech=ano');

                exit;
            }
            else
                $hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';

        }
        else
            $hlaska = 'Formulář není správně vyplněný!';

    }


?>
<?php
            if ($hlaska)


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

<form method="post">
<fieldset>
  <legend>Kontaktní formulář</legend>
<table>
        <tr><td colspan="2"><div style="width:350px;background:#ff99ff; margin-bottom:20px"><?php echo $hlaska; ?></div></td>
<tr><td>Jméno:</td><td><input name="jmeno" type="text" value="<?= htmlspecialchars($jmeno) ?>"/></td></tr>
    <tr><td>E-mail:</td><td><input name="email" type="email" value="<?= htmlspecialchars($email) ?>"/></td></tr>
    <tr><td>Zpráva:</td><td><textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea></td></tr>

</table>
<input type="submit" value="Odeslat"/>
</fieldset>
</form>
 
Odpovědět 11.2.2014 22:32
Avatar
teofil
Člen
Avatar
Odpovídá na teofil
teofil:11.2.2014 22:39

Tak teď jsem ještě stáhl originál bez mého zásahu a také se zpráva na centrum.cz neodešle :-(

 
Odpovědět 11.2.2014 22:39
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:15.2.2014 8:33

Na centrum.cz email nedorazí, i když stránka tvrdí, že byl odeslán.

Odpovědět 15.2.2014 8:33
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na teofil
David Čápka:21.3.2014 17:02

Na centrum.cz to mají nějak blbě nastavené, již jsem to jednou řešil. Zkus změnit \n za \r\n v hlavičce. Jinak to chce zkoušet blbnout s tou hlavičkou a zjistit, co rozhází ten jejich server. Napiš jak to dopadlo.

Odpovědět  +3 21.3.2014 17:02
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
tomass
Člen
Avatar
tomass:11.4.2014 16:41

Zdravím, nevíte čím by to mohlo být, že při načtení formuláře se mi ve všech polích načtou předvyplněné hodnoty nastavené ve value?, V kolonce pro jméno se mi tam při načtení formuláře vypíše<?=htmlspe­cialchars($jme­no) ?>, t samé i v emailu a zprávě. Pro jistotu sem si stáhl i hotový kód tady z devbooku a stejně se mi to tam vypisuje, zkoušel sem to ve FireFoxu i Chromu, ale v obou mi to dělá, díky za rady.

Editováno 11.4.2014 16:46
 
Odpovědět 11.4.2014 16:41
Avatar
MrPabloz
Člen
Avatar
Odpovídá na tomass
MrPabloz:11.4.2014 16:47

a kde to spouštíš? na svem pc? nebo na servru nějakém? a když na svem PC? máš zaputý apache? :)

Odpovědět 11.4.2014 16:47
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
tomass
Člen
Avatar
Odpovídá na MrPabloz
tomass:11.4.2014 16:51

Je to na mém PC,Apache mám zaplý, zkoušel sem si i jen vypsat text přes echo a ten mi to vypsalo v tom souboru.

 
Odpovědět 11.4.2014 16:51
Avatar
MrPabloz
Člen
Avatar
Odpovídá na tomass
MrPabloz:11.4.2014 16:56

tak potom nejlepší by bylo hodit sem kod formuláře :) Tak ti mohu poradit líp :) takhle můžem jen tipovat co s tím je :)

Odpovědět 11.4.2014 16:56
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
tomass
Člen
Avatar
tomass:11.4.2014 17:06

No jak sem psal, zkoušel sem si i zdrojový soubor, co tu je ke stažení a u něho mi to dělá taky:

<?php


    mb_internal_encoding("UTF-8");

    $hlaska = '';
    if (isset($_GET['uspech']))
        $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
    if ($_POST) // V poli _POST něco je, odeslal se formulář
    {
        if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
            isset($_POST['email']) && $_POST['email'] &&
            isset($_POST['zprava']) && $_POST['zprava'] &&
            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 = 'Nová zpráva z mailformu';
            $uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
            if ($uspech)
            {
                $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
                header('Location: mailform.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 http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Kontaktní formulář</title>
    </head>
    <body>
        <p>Můžete mě kontaktovat pomocí formuláře níže.</p>

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

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

        <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>
            <textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea>
            <br />

            <input type="submit" value="Odeslat" />
        </form>

    </body>
</html>
 
Odpovědět 11.4.2014 17:06
Avatar
MrPabloz
Člen
Avatar
Odpovídá na tomass
MrPabloz:11.4.2014 17:11

A když zkoušíš mimo formulář <?= htmlspecialchar­s($zprava) ?> tohle, tak ti to noormálně vypíše?

Odpovědět 11.4.2014 17:11
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
tomass
Člen
Avatar
Odpovídá na MrPabloz
tomass:11.4.2014 17:15

Když to dám mimo formulář, tak to nepíše nic.

 
Odpovědět 11.4.2014 17:15
Avatar
lukasmiksik
Člen
Avatar
lukasmiksik:13.4.2014 14:04

Ahoj, skoro všechno funguje, až na to, že když se mi formulář úspěšně odešle, tak to nevypíše hlášku o tom, že byl úspěšně odeslán...

<?php
        mb_internal_encoding("UTF-8");
        $hlaska = '';
        if (isset($_GET['hlaska'])) $hlaska = 'Email byl úspěšně odeslán';
        if ($_POST) //v poli _POST něco je, odeslal se formulář
        {
                if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
                        isset($_POST['email']) && $_POST['email'] &&
                        isset($_POST['zprava']) && $_POST['zprava'] &&
                        isset($_POST['rok']) && $_POST['rok'] == date('Y')
                        )
                {
                    //odeslání mailu
                    $hlavicka = 'From:' . $_POST['email'];
                    $hlavicka .= "\nMIME-Version: 1.0\n";
                    $hlavicka .= "Content-Type: text/html; charset=\"UTF-8\"\n";
                    $adresa = '[email protected]';
                    $predmet = 'Nová zpráva z mailformu!';
                    $uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
                    if ($uspech)
                    {
                        $hlaska = 'Email byl úspěšně odeslán!';
                        header('Location: contactni2.php?uspech=ano');
                        exit;
                    }
                    else {
                        $hlaska = 'Email se nepodařilo odeslat, zkontrolujte údaje!';
                    }

                }

                else {$hlaska = 'Formulář není správně vyplněný';}
        }
        ?>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Kontaktní formulář</title>

    </head>
    <body>
        <h1>Kontaktní formulář</h1>
        <?php
            if ($hlaska)
            {
                echo('<p>' . htmlspecialchars($hlaska) . '</p>');
            }
            $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';
            $email = (isset($_POST['email'])) ? $_POST['email'] : '';
            $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';

        ?>

        <form method="POST">
            <p>Jméno: <input type="text" name="jmeno" value="<?= htmlspecialchars($jmeno) ?>"/></p>
            <p>Email: <input type="email" name="email" value="<?= htmlspecialchars($email) ?>"/></p>
            <p>Antispam(akutální rok) <input type="number" name="rok" /></p>
            <p><textarea name="zprava" ><?= htmlspecialchars($zprava) ?></textarea></p>

            <p><input type="submit" value="Odeslat" /></p>
        </form>
    </body>
</html>
 
Odpovědět 13.4.2014 14:04
Avatar
prema.mlynek
Člen
Avatar
prema.mlynek:2.7.2014 14:09

ahoj :) potřeboval bych aby hláška se zobrazí(email byl úspěšně odeslán) třeba za 5 sekund zmizela šlo by to nějak?

 
Odpovědět 2.7.2014 14:09
Avatar
Odpovídá na prema.mlynek
Martin Konečný (pavelco1998):2.7.2014 14:17

Ahoj,

to můžeš udělat snad jedině přes javascript (přes PHP určitě ne).

Odpovědět 2.7.2014 14:17
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Branislav Ház:30.10.2014 15:40

Mám problém, nech skúšam ako skúšam mail mi nepríde.

Skúšal som gmail.com, azet.sk, skusal som localhost, skúšal som endoru, aj webzdarma.cz...

Skúšal som nahrať aj originál súbor, ktorý som si stiahol odtiaľto a nič.

Prosím vie mi niekto poradiť???

 
Odpovědět 30.10.2014 15:40
Avatar
Odpovídá na Branislav Ház
Neaktivní uživatel:30.10.2014 15:51

Většina webhostingů má u free variant funkci mail zakázanou :)

Odpovědět 30.10.2014 15:51
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Branislav Ház:30.10.2014 15:55

Ďakujem ti, ale v tom prípade ako to, že mi nefunguje ani local?

smtp a port som nastavil podľa návodu providera, tzn. smtp.email.swan.sk a zabezpečený port 465, ale aj tak to nefácha..

 
Odpovědět 30.10.2014 15:55
Avatar
Odpovídá na Branislav Ház
Neaktivní uživatel:30.10.2014 16:55

To opravdu nevím.

Odpovědět 30.10.2014 16:55
Neaktivní uživatelský účet
Avatar
danhill
Člen
Avatar
Odpovídá na Neaktivní uživatel
danhill:8.11.2014 13:34

V obou uvedených odpovědích jak do mailu vložit i jméno odesílatele se jméno spojí s zprávou. Což nevypadá dobře. Nemohu přijít na to,jak to naformátovat.
Když zkusím třeba:
$zprava = 'Uživatel: '. $_POST['jmeno'] . 'Napsal:' . $_POST['zprava'];

Tak příjde:
Uživatel: testNapsal:Proc to nejde?

Děkuji moc.

Odpovědět 8.11.2014 13:34
Nikdy není tak zle, aby nemohlo být ještě hůře.
Avatar
danhill
Člen
Avatar
danhill:8.11.2014 13:47

Omlovám se, chtěl jsem napsat:

$zprava = 'Uživatel: <b>'. $_POST['jmeno'] . '</b></br>Napsal:</br>' . $_POST['zprava'];
Odpovědět 8.11.2014 13:47
Nikdy není tak zle, aby nemohlo být ještě hůře.
Avatar
debeneesse
Člen
Avatar
Odpovídá na mapak
debeneesse:3.3.2015 14:47

Už jste někdo zmínil, že použití PHP zkrácených tagů je něčím podmíněno. Celé je to popsané na adrese http://php.net/….phpmode.php a pokud to někdo s PHP myslí vážně, tak by si to měl přečíst, protože cituji:
zatímco pro některé lidi je používání zkrácených tagů vyhovující, jsou méně přenositelné a obvykle nedoporučeny
Jsou zde popsány čtyři možnosti, jak naznačit parseru, který kód je určený k interpretaci.
Pokud se prostě chcete jen vyhnout problémům, použijte jen <?php ?> a budete mít klid.

Editováno 3.3.2015 14:47
 
Odpovědět 3.3.2015 14:47
Avatar
Odpovídá na danhill
Michal Šmahel:3.3.2015 17:33

Máš špatně

</br>

, zaměň to za

<br />

.

Odpovědět  +1 3.3.2015 17:33
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
kom72
Člen
Avatar
kom72:16.3.2015 14:37

Ahoj,
přecházím z prostého html na php, takže děkuji autorovi za pěkný tutoriál. Vše funguje jak má, až na drobnost. Nikde v mailu se mi nezobrazuje vyplněné jméno odesílatele z formuláře.
Kdosi tu píše, že se mu jméno objevuje v předmětu zprávy. Mě tedy ani tam...

 
Odpovědět 16.3.2015 14:37
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na kom72
Jan Lupčík:16.3.2015 15:09

Ano, protože jméno se neodesílá. Jen se vyplňuje. Pokud ho chceš vidět, můžeš předmět upravit např. do následující podoby:

$predmet = 'Nová zpráva z mailformu od ' . $_POST['jmeno'];
Odpovědět  +1 16.3.2015 15:09
TruckersMP vývojář
Avatar
kom72
Člen
Avatar
Odpovídá na Jan Lupčík
kom72:16.3.2015 15:39

Díky, za rychlou odpověď, už to maká

 
Odpovědět  +1 16.3.2015 15:39
Avatar
kom72
Člen
Avatar
kom72:17.3.2015 23:51

Formulář mi maká, když je na samostatné stránce mailform.php. Pokud naincluduju stránku do stávajícího webu, mail se také odešle, jen nefunguje hláška o odeslání a stránka vypisuje tuto chybu:

header('Location: mailform.php?uspech=ano');

Zkoušel jsem i varianty:

header('Location: index.php?uspech=ano');

a kód z diskuse k následujícímu tutoriálu o skládání stránek:

$url = $_SERVER["REQUEST_URI"] . "&uspech=ano";
header("location:" . $url);
exit;

Formulář mám totiž na všech stránkách webu, jako skrytý div nad patičkou webu.
Poradí někdo, jak rozchodit hlášky formuláře na více stránkách webu? díky

 
Odpovědět 17.3.2015 23:51
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na kom72
Jan Lupčík:18.3.2015 6:24

Tak musíš vypisovat proměnnou $hlaska, ne? :)

Odpovědět 18.3.2015 6:24
TruckersMP vývojář
Avatar
kom72
Člen
Avatar
Odpovídá na Jan Lupčík
kom72:18.3.2015 15:17

Ahoj, zkusíš to nějak rozepsat nebo více poradit?

 
Odpovědět 18.3.2015 15:17
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na kom72
Jan Lupčík:18.3.2015 15:26

Pošli mi web, kde to máš a poradím blíže. :)

Odpovědět 18.3.2015 15:26
TruckersMP vývojář
Avatar
Jirka Vavřík:6.5.2015 20:53

Díky za článek, takto jsem si mohl dát na web formulář i když php neumím :-)

Odpovědět 6.5.2015 20:53
Inteligentní nemá čas si pamatovat, inteligentní musí vymýšlet.
Avatar
martin.pscolka:23.5.2015 0:04

Myslis na serveru kde to mam ulozene nebo v editoru?

 
Odpovědět 23.5.2015 0:04
Avatar
vojtanosek
Člen
Avatar
vojtanosek:15.6.2015 16:01

Škoda, že neposílá emaily. Jsmen a hostingu www.000webhost.com Asi zůstanu u javascriptu.

 
Odpovědět 15.6.2015 16:01
Avatar
Bebbana
Člen
Avatar
Bebbana:28.8.2015 15:09

Ahoj, mě se zase email odešle a všechno funguje, ovšem nezobrazuje se mi hláška o úspěšném odeslání, místo toho se zobrazí stránka 404 - not found. přitom jsem zkoušela změnit prohlížeč, webhosting (na sweb.cz to dělá úplně to samé), zkoušela jsem použít i originální dokument, co je tady ke stažení, to samé... Tady je odkaz: http://nakonec.borec.cz.sweb.cz/, kód je použitý odtud z webu. Díky za rady a nápady.

 
Odpovědět 28.8.2015 15:09
Avatar
Bebbana
Člen
Avatar
Bebbana:28.8.2015 15:10

oprava, ne na sweb, ale na webzdarma*

 
Odpovědět 28.8.2015 15:10
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Bebbana
Jan Lupčík:28.8.2015 16:11

404 je chyba, že je stránka nenalezena. Ty používáš index.php, tady se používá mailform.php a po odeslání se taky na něj přesměruje. Z tohohle:

header('Location: mailform.php?uspech=ano');

uděláš tohle:

header('Location: index.php?uspech=ano');
Odpovědět 28.8.2015 16:11
TruckersMP vývojář
Avatar
hrncal.junior:16.9.2015 11:02

Dobrý den,
potřeboval bych nakopnout k jedné úpravě formuláře. Jak udělat to, aby při odeslání formuláře přišla odesílateli na zadaný email potvrzení. Něco jako "Děkujeme za odeslání a budeme vás neprodleně kontaktovat". Děkuji mnohokrát

 
Odpovědět 16.9.2015 11:02
Avatar
Odpovídá na hrncal.junior
Martin Konečný (pavelco1998):16.9.2015 11:56

zdravim,
uděláš to úplně stejně, jako když odešleš ten první mail. Prostě hodíš tu samou funkci a změníš parametry :D

Odpovědět  +1 16.9.2015 11:56
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Vít Cigánek:17.9.2015 14:19

Jsem to zkopíroval na svůj web napsalo mi to že: Email se nepodařilo odeslat. Zkontrolujte adresu. Má někdo nějaký tip?

 
Odpovědět 17.9.2015 14:19
Avatar
Bebbana
Člen
Avatar
Odpovídá na Jan Lupčík
Bebbana:19.9.2015 14:24

Děkuji, pak jsem na to taky přišla. Taková hloupost :)

 
Odpovědět 19.9.2015 14:24
Avatar
patysta
Člen
Avatar
patysta:27.11.2015 11:28

Zdravím,
mám dotaz k upozornění "POZOR! Přesměrovat můžete pouze v případě, že jste ještě nevypsali žádné HTML.". Lze použít ten chybný zápis za pomoci příkazu ob_start("ob_gzhan­dler");? Chápu správně, jak funguje tento příkaz?

 
Odpovědět 27.11.2015 11:28
Avatar
kivdul
Člen
Avatar
kivdul:13.12.2015 20:08

ahoj
marně se snažím o .... budete-li mít nějaký tip jak na to, budu vděčný
díky Ludvík

mám index.php a v něm obyčejný <table> a v jednolivých <td> odkazy na podstránky/.... .php - to funguje

na podstránce mám <form a metodu=post> s <input name=10...> a pomoci header(location) se vracim zpět na index - taky funguje

na index.php mam:

<?php
        if($_GET['odpoved'])
        {
            $skore += $_GET['odpoved'];
        }
        echo ($skore);
        ?>

což funguje ale jen jednou :-( hodnoty ve $skore se mi nesčítají!

Jak mám napsat kod, aby se mi nově vypočítaná hodnota v $skore uchovala? aby se při každé načtení stránky nenulovala?

ještě jednou dík za radu(y)

 
Odpovědět 13.12.2015 20:08
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na kivdul
Jan Lupčík:13.12.2015 20:54

$_SESSION je tvé řešení. Platí 20 minut od poslední změny.

<?php
if (isset($_GET['odpoved']) && $_GET['odpoved'])
{
    if (isset($_SESSION['skore']) && $_SESSION['skore'])
        $_SESSION['skore'] += $_GET['odpoved'];
    else
        $_SESSION['skore'] = $_GET['odpoved'];
}
Odpovědět 13.12.2015 20:54
TruckersMP vývojář
Avatar
kivdul
Člen
Avatar
Odpovídá na Jan Lupčík
kivdul:19.12.2015 11:13

díky

ta globální proměná $_SESSION[ ] je skvělá :-D

 
Odpovědět 19.12.2015 11:13
Avatar
Karel Šlaj
Člen
Avatar
Karel Šlaj:13.8.2016 11:57

Tak poprvé se mi při postupování dle vašich návodů vyskytl problém (y), na které jsem krátký. Využívám dvě textarea a snažím se je odeslat společně:

$sucess = mb_send_mail($adress, $subject, $_POST['message'], $_POST['strategy'], $head);

Tímhle způsobem mi začal chodit email z adresy mého hostingu namísto zadané a odeslalo se jen jedno textové pole.

$sucess = mb_send_mail($adress, $subject, $_POST['message' + 'strategy'],  $head);

Byl další neůspěšný pokus.
Hodně dlouho jsem hledal chyby ve zbytku kódu, ale nenašel. Dále mám problém ještě s tím, že přesměrování mě posílá na afort-crowfall.clan­web.eu/mailfor­m.php?sucess=y­es , což je neexistující stránka. Můj mailform se jmenuje recruiting.php
Jinak kdyby přece jenom byla chyba jinde, tak vkládám celý obsah souboru recruiting.php
http://www.itnetwork.cz/dev-lighter/770

Děkuji za případnou pomoc. Moc si vážím zdejších návodů!

 
Odpovědět 13.8.2016 11:57
Avatar
KAVI
Redaktor
Avatar
Odpovídá na Karel Šlaj
KAVI:13.8.2016 12:19

Já to udělal takto, jedná se o script z register.php, myslím, že by ti to mohlo pomoct :)

if(mysql_affected_rows($link)==1)
                {
            $to = $_POST['email'];
            $subject = "Yourradio-registration info";

            $message = '<html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="viewport" content="width=device-width" />
          <style>
            a{color:#2BA6CB;}
            .btn{text-decoration:none;color:#FFF;background-color:#666;padding:10px 16px;font-weight:bold;margin-right:10px;text-align:center;cursor:pointer;display:inline-block;}
            .btn.btn-primary{background:#1CD5B4;;  color:#fff;  border:none !important;  border:2px solid transparent !important;  font-family:"Source Sans Pro",Arial,sans-serif;  margin:0px auto;}
             .btn:hover,.btn:active,.btn:focus{background:#393e46 !important;  color:#fff;  outline:none !important;}
            p.callout{padding:15px;background-color:#ECF8FF;margin-bottom:15px;}
            .callout a{font-weight:bold;color:#2BA6CB;}
            table.social{background-color:#ebebeb;}
            .social .soc-btn{padding:3px 7px;font-size:12px;margin-bottom:10px;text-decoration:none;color:#FFF;font-weight:bold;display:block;text-align:center;} a.fb{background-color:#3B5998!important; }
            a.tw{background-color:#1daced!important; } a.gp{background-color:#DB4A39!important; } a.ms{background-color:#000!important; } .sidebar .soc-btn{display:block;width:100%;}
            table.head-wrap{width:100%;} .header.container table td.logo{padding:15px; } .header.container table td.label{padding:15px; padding-left:0px;} table.body-wrap{width:100%;}
            table.footer-wrap{width:100%;clear:both!important;} .footer-wrap .container td.content  p{border-top:1px solid rgb(215,215,215); padding-top:15px;} .footer-wrap .container td.content p{font-size:10px;font-weight:bold;}
            h1, h2, h3, h4, h5, h6{font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,"Lucida Grande",sans-serif; line-height:1.1; margin-bottom:15px; color:#000;} h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-size:60%; color:#6f6f6f; line-height:0; text-transform:none; } h1{font-weight:200; font-size:44px;}
            h2{font-weight:200; font-size:37px;} h3{font-weight:500; font-size:27px;} h4{font-weight:500; font-size:23px;} h5{font-weight:900; font-size:17px;} h6{font-weight:900; font-size:14px; text-transform:uppercase; color:#444;} .collapse{margin:0!important; p,ul{margin-bottom:10px; font-weight:normal; font-size:14px; line-height:1.6;}
            p.lead{font-size:17px; } p.last{margin-bottom:0px;} ul li{margin-left:5px;list-style-position:inside;}
            ul.sidebar{background:#ebebeb;display:block;list-style-type:none;} ul.sidebar li{display:block; margin:0;} ul.sidebar li a{text-decoration:none;color:#666;padding:10px 16px; margin-right:10px; cursor:pointer;border-bottom:1px solid #777777;border-top:1px solid #FFFFFF;display:block;margin:0;}
            ul.sidebar li a.last{border-bottom-width:0px;}
            ul.sidebar li a h1, ul.sidebar li a h2, ul.sidebar li a h3, ul.sidebar li a h4, ul.sidebar li a h5, ul.sidebar li a h6, ul.sidebar li a p{margin-bottom:0!important;}
            .container{display:block!important;max-width:600px!important;margin:0 auto!important;clear:both!important;}
            .content{padding:15px;max-width:600px;margin:0 auto;display:block; }
            .content table{width:100%; }
            .column{width:300px;float:left;}
            .column tr td{padding:15px; }
            .column-wrap{padding:0!important; margin:0 auto; max-width:600px!important;}
            .column table{width:100%;}
            .social .column{width:280px;min-width:279px;float:left;} .clear{display:block; clear:both; }
            @media only screen and (max-width:600px){a[class="btn"]{display:block!important; margin-bottom:10px!important; background-image:none!important; margin-right:0!important;} div[class="column"]{width:auto!important; float:none!important;}table.social div[class="column"]{width:auto!important;}}
            </style>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Yourradio registration</title>
            </head>
            <body bgcolor="#FFFFFF"><table class="head-wrap" bgcolor="#999999"><tr><td></td><td class="header container" >
            <div class="content"><table bgcolor="#999999"><tr><td>
            <a href="http://radiodb.tk/index.php"><img src="http://radiodb.tk/images/logo.png" width="50px" heigth="50px"/></td></tr></table></div></td><td></td></tr></table><!-- /HEADER -->
            <!-- BODY --><table class="body-wrap"><tr><td></td><td class="container" bgcolor="#FFFFFF"><div class="content"><table><tr><td><h3>Hi '.$_POST["f_name"].' '.$_POST["l_name"].'</h3>
            <p class="lead">Welcome to Yourradio!</p><p>In this email you can find some important info about your registration.</p><p>DON´T DELETE THIS EMAIL!</p><p><b>Your registration:</b></p>
            <table width="100%"><tr><td><b>Username:</b></td><td>'.$_POST["username"].'</td></tr><tr><td><b>Password:</b></td><td>'.$_POST["password"].'</td></tr></table>
            <p class="callout"><a href="http://radiodb.tk/form.php" class="btn btn-primary">Login to your account &raquo;</a></p>
            <table class="social" width="100%"><tr><td><table align="left" class="column"><tr><td><h5 class="">Contact Info:</h5>Email: <strong><a href="emailto:[email protected]">[email protected]</a></strong></p></td></tr></table><span class="clear"></span>       </td></tr></table>
            </td></tr></table></div></td><td></td></tr></table><table class="footer-wrap"><tr><td></td><td class="container"><div class="content"></div></td><td></td></tr></table></body></html>';

            $headers = "MIME-Version: 1.0" . "\r\n";
            $headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
            $headers .= 'From: [email protected]>' . "\r\n";
if(mail($to,$subject,$message,$headers)):
    $successMsg = 'Email has sent successfully.';
else:
    $errorMsg = 'Email sending fail.';
endif;

EDIT:

if(mail($to,$subject,$message,$headers)):
    $successMsg = 'Email has sent successfully.';
else:
    $errorMsg = 'Email sending fail.';
endif;
Editováno 13.8.2016 12:21
 
Odpovědět  +1 13.8.2016 12:19
Avatar
mkub
Redaktor
Avatar
Odpovídá na Karel Šlaj
mkub:13.8.2016 13:32

najprv si musis spojit $_POST['message'] a $_POST['strategy'], a nasledne to posles ako jednu premennu, totiz skustocna syntax tej funkcie je:

bool mb_send_mail ( string $to , string $subject , string $message [, string $additional_headers = NULL [, string $additional_parameter = NULL ]] )

kde:
$to - znamena prijemcu
$subject - znamena policko "Subject"
$message - je samotna sprava
$additional_headers - rozsirujuce hlavicky (nepovinna, standardne nastavena na "NULL")
$additional_pa­ramter - doplnujuce parametre (nepovinna, standardne nastavena na "NULL")
viac o funkcii: http://php.net/…end-mail.php

cize asi nejako takto:

...
$sucess = mb_send_mail($adress, $subject, $_POST['message'] . $_POST['strategy'],  $head);
...

resp. takto:

...
$msg = $_POST['message'] . $_POST['strategy'];
$sucess = mb_send_mail($adress, $subject, $msg, $head);
...

totiz vyraz "+" nesluzi na spajanie retazcov, ale na scitavanie cisiel

 
Odpovědět  +1 13.8.2016 13:32
Avatar
Karel Šlaj
Člen
Avatar
Odpovídá na mkub
Karel Šlaj:16.8.2016 9:49

Děkuju tady oboum redaktorům za výpomoc. Už to funguje tak jak jsem si představoval (*_*)

 
Odpovědět  +1 16.8.2016 9:49
Avatar
mkub
Redaktor
Avatar
Odpovídá na Karel Šlaj
mkub:16.8.2016 10:12

ak ti to pomohlo, oznac to ako riesenie

 
Odpovědět 16.8.2016 10:12
Avatar
Miroslav Mucha:4.11.2017 11:03

Ahoj, mám dotaz: V některých případech (viz níže) není za podmínkou if() kód zapsán ve složených závorkách. Kdy je nutné ho uzavřít a kdy ne?

.1
if (isset($_POST['jmeno']))
        $jmeno = $_POST['jmeno'];
else
        $jmeno = '';

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

        $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';
        $email = (isset($_POST['email'])) ? $_POST['email'] : '';
        $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';
?>
 
Odpovědět 4.11.2017 11:03
Avatar
Taskkill
Redaktor
Avatar
Odpovídá na Miroslav Mucha
Taskkill:4.11.2017 11:36

Je treba ho uzavrit v pripade, kdy se jedna o vice nez jeden souvisly statement, nebo expression.

Takze sice muzes udelat tohle:

if (true)
  something
    .doStuff()
    .resAttr
    .finallCall()

Ale uz ne:

if (true)
  something()
  somethingElse()

Protoze se to vyhodnoti jako neco uplne jineho.

Doporucuju ty zavorky vzdycky psat, protoze pak pri upravach nevznikaji divny chyby.

Editováno 4.11.2017 11:37
 
Odpovědět 4.11.2017 11:36
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovídá na Miroslav Mucha
Peter Sciranka:4.11.2017 11:43

Ahoj, ide o to, že či sa má po "if" vykonať viac ako jedna operácia, vtedy je nutné použiť zložené zátvorky. Ak sa jedná iba o jednu operáciu, tak stačí použiť skrátený zápis == bez zložených zátvoriek.
Príklad:

if(x>y){
        a = 10;
        b = 20;
}

V tomto prípade sa majú vykonať dve operácie, tak je nutné to zabaliť do zložených zátvoriek.
Ak chceme pri podmienke vykonať len jednu operáciu, stačí to zapísať v skrátenom formáte:

if(x>y)
        a=10;

Ak by sme v druhom príklade zaísali aj "b=20;" tak to by sa vykonalo bez ohľadu na to, či by platila podmienka alebo nie.
Stačí to takto?

Odpovědět 4.11.2017 11:43
Act as if it was Impossible to Fail
Avatar
Miroslav Mucha:4.11.2017 11:54

Děkuji za obě odpovědi.

 
Odpovědět 4.11.2017 11:54
Avatar
Nikol Nojmann:13.11.2017 13:16

Trochu jsem se zapotila v této lekci. Ale chyby, které jsem měla, byly opraveny a vše funguje.
Díky za další poznatek, respektive rozšíření mých současných dovedností.

 
Odpovědět 13.11.2017 13:16
Avatar
Zdenek Kodejs:29.11.2017 12:10

Ahoj, mám dotaz -program maiform.php :

1. Co určuje pořadí sekcí php a html ve výsledném programu. Může být počáteční sekce php za sekcí html ?
2 Je možno zajistit výstup $hlaska až pod formulářem po jeho odeslání?

 
Odpovědět 29.11.2017 12:10
Avatar
wartkor
Člen
Avatar
wartkor:22.12.2017 22:37

Ahoj chtěl bych na svoji stránku udělat možnost "přidání komentáře" ale nevím jaký je pro to kód požadavky jméno pod kterým bude komentář zobrazen a smaotný komentář nic víc a také aby se to zobrazovalo :-) pokud ten tutoriál uděláte bude o super zatím ahoj :-)

Odpovědět 22.12.2017 22:37
Káždý jednou začal a neuspěl hned na poprvé
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovědět 23.12.2017 8:08
TruckersMP vývojář
Avatar
wartkor
Člen
Avatar
Odpovídá na Jan Lupčík
wartkor:23.12.2017 10:09

:/ ten je placenej

Odpovědět 23.12.2017 10:09
Káždý jednou začal a neuspěl hned na poprvé
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na wartkor
Petr Čech:23.12.2017 14:08

A co je za problém? Pokud bys uměl PHP, asi by nebyl problém to napsat, poněvadž je to celkem snadné.
Očividně to ale neumíš, a žádáš víceméně o hotový kód od někoho jiného, tak musíš být připraven zaplatit, nebo použít něco zadarmo

Odpovědět 23.12.2017 14:08
the cake is a lie
Avatar
wartkor
Člen
Avatar
Odpovídá na Petr Čech
wartkor:23.12.2017 15:34

Když to umíš tak to snadné je že ?

Odpovědět  -2 23.12.2017 15:34
Káždý jednou začal a neuspěl hned na poprvé
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovídá na wartkor
Peter Sciranka:23.12.2017 17:10

Do konca roka prebieha súťaž, už len za účasť (preložíš 10 php funkcií do angličtiny) dostaneš 100 bodov a následne si môžeš sprístupniť daný článok a nestojí ťa to ani korunu, len trochu tvojho času :) To mi príde celkom fér.

Odpovědět 23.12.2017 17:10
Act as if it was Impossible to Fail
Avatar
wartkor
Člen
Avatar
Odpovídá na Peter Sciranka
wartkor:23.12.2017 17:58

Já ale neumím skoro vůbec PhP :/

Odpovědět 23.12.2017 17:58
Káždý jednou začal a neuspěl hned na poprvé
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na wartkor
Petr Čech:23.12.2017 22:50

Ano, je, vždyť je to předmětem toho komentáře :P . To, že neumíš PHP znamená, že se ho máš sakra naučit, jestli to myslíš vážně, nebo se připrav na to, že budeš platit, protože jen z tutoriálů se vážně vlastní web poskládat nedá (možná dá, ale určitě to není dobrý nápad).
A nebo jestli se ti nechce učit PHP, můžeš použít nějakou předpřipravenou blbost jako Wordpress a pod., těch služeb jsou hromady.

Odpovědět 23.12.2017 22:50
the cake is a lie
Avatar
Jiřina Trojánková:2.1.2018 9:53

Ahoj, potřebovala bych poradit, chybu mám zřejmě tady, i když se to zdá být napsané správně:

$hlaska = 'Email byl úspěšně odeslán, brzy Vám odpovím. Jiřina.';
header('Location: kontakt.php?us­pech=ano');
exit;

Nicméně místo aby to provedlo to co má, hodí mě to na neexistující stránku:
http://jirina.wz.cz/kontakt.php?…

 
Odpovědět 2.1.2018 9:53
Avatar
Hando
Člen
Avatar
Odpovídá na Jiřina Trojánková
Hando:2.1.2018 13:02

Ahoj.
A co by se mělo dít jinak? Stránka kontakt.php evidentně na serveru neexistuje, tvůj kontaktní formulář je na
'http://jirina­.wz.cz/index.php?stran­ka=kontakt',
takže bys to musela předávat nějak jinak =>
index.php?stran­ka=kontakt&us­pech=ano.

Jinak tedy $hlaska před header('Locati­on...) nemá úplně smysl, jelikož po přesměrování o tu proměnnou stejně přijdeš. Tutoriál jsem nečetl, ale tutově je to tam zmíněno, co s tím.. :)

 
Odpovědět 2.1.2018 13:02
Avatar
Odpovídá na Hando
Jiřina Trojánková:2.1.2018 14:34

Super, takhle to funguje. Nenapadlo mě, že tam má být: kontakt&uspech. Hodí mě to zpátky na stránku kontakt a vypíše hlášku o odeslání, přesně jak to má být:)
Ta $hlaska před header tam asi fakt být nemusí, už je nahoře na začátku stránky, takže tu mažu.
Díky.

 
Odpovědět 2.1.2018 14:34
Avatar
Ján Štucka
Člen
Avatar
Ján Štucka:17.1.2018 13:58

Čau pri odoslaní formuláru mi ostanú všetky vyplnené polia tak ako boli vyplnené, až na tú správu ktorú chcem poslať tá mi zmizne aj keď to mám rovnako ako vy ... Pomohli by ste mi prosím ?
<?php
/**
* Created by PhpStorm.
* User: Jano
* Date: 16.1.2018
* Time: 13:11
*/

mb_internal_en­coding("UTF-8");

$erorr='';
if ($_POST){
/**
* tato prva podmienka kontroluje ci vo formulari je vobec nieco a ci bol odoslany
*/
if (isset($_POST['na­me'])&&$_POST['na­me']&&isset($_POS­T['email'])&&$_POS­T['email']&&is­set($_POST['mes­sage'])&&$_POS­T['message']&&is­set($_POST['y­ear'])&&$_POS­T['year']==da­te('Y')){
$header='From: '.$_POST['email'];
$header.="\nMIME-Version: 1.0\n";
$header.="Content-Type: text/html; charset=\"utf-8\"\n";
$addressOfOurE­mail='stuckaja­[email protected]';
$subject='Skusam ci to fakt pojde.';
$success=mb_sen­d_mail($addres­sOfOurEmail,$sub­ject,$message,$he­ader);
if ($success)
$erorr="The email was sent successfully, we answer about it in near feature";
else $erorr="The email can't be sended. Please control you're email address";
}
/**
* isset zistuju ci existuju vobec premenne ako name message atd. druha podmienka kontroluje ci v danych premennych nieco je
*/
else{
$erorr='Formular is not complete correctly';
}
}
/**
* mb_send_mail() sluzi na odoslanie mailu, pricom musime pri pouziti tejto funkcie na zaciatku nastavit kodovanie
*/

?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Kontaktny formular</title>
</head>
<body>
<p>You can contact me by form placed lower</p>

<?php

if ($erorr)
echo('<p>' . htmlspecialchar­s($erorr) . '</p>');

$name=(isset($_POS­T['name']) ? $_POST['name'] : '');
$message=(isset($_POS­T['message']) ? $_POST['message'] : '');
$email=(isset($_POS­T['email']) ? $_POST['email'] : '');

?>

<form method="post"> <!--Vsimnime si, zetu nemame parameter action data sa odoslu na ten isty subor, kde je formular-->
<table>
<tr>
<td>You're name</td>
<td><input name="name" type="text" value="<?= htmlspecialchar­s($name)?>"/></td> <!--htmlspecialchars() je ochranna funkcia aby niekto nevlozil do komentarov html kod ktory vytvori nejaky formular ktory bude napr odosielat hesla nejakemu hajzlovy-->
</tr>
<tr>
<td>You're e-mail</td>
<td><input name="email" type="email" value="<?=htmlsp­ecialchars($e­mail)?>"></td> <!--mozme dosiahnut vyplnenie pola pri pomyleni aj takto-->
</tr>
<tr>
<td>Actually year</td>
<td><input name="year" type="number"></td>
</tr>
</table>
<textarea name="message" value="<?=htmlsp­ecialchars($mes­sage)?>"></tex­tarea>


<input type="submit" value="Send" />
</form>
</body>
</html>

 
Odpovědět 17.1.2018 13:58
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na Ján Štucka
Jan Lupčík:17.1.2018 15:45

<textarea> nepoužívá attribut value, ale její obsah píšeš rovnou mezi ty dva tagy. A stejně to nemáš, v tom článku je to takto:

<textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea>
Odpovědět 17.1.2018 15:45
TruckersMP vývojář
Avatar
Ján Štucka
Člen
Avatar
 
Odpovědět 17.1.2018 16:07
Avatar
Jan Švanda
Člen
Avatar
Jan Švanda:1.2.2018 12:24

Dobrý den, jak bych mohl předvyplnit (znovu zvolit) stejný option u selected ? Předem děkuji za odpověď.

 
Odpovědět 1.2.2018 12:24
Avatar
Moss
Člen
Avatar
Moss:28.2.2018 23:43

Inak, nedala by sa podmienka, kde sa cita z $_GET nahradit ternarnym vyrazom?

 
Odpovědět 28.2.2018 23:43
Avatar
František Kreisinger:9.3.2018 10:49

Chtěl jsem si tuto úlohu vylepšit tak, aby se v hlavičce emailu odesílala nejen adresa odesilatele ale i jeho jméno a pak případně to samé udělat i pro jméno odesilatele. Když se mi konečně podařilo překonat to, že mi SMTP server nevrací chybu v hlavičce, takže vše se tváří, jako by zpráva byla odeslána, stejně žádná nedojde. Nemáte někdo funkční řešení?

Odpovědět 9.3.2018 10:49
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
Odpovídá na Jan Švanda
František Kreisinger:9.3.2018 11:15

option u selected ???

Odpovědět 9.3.2018 11:15
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
Odpovídá na Jan Švanda
František Kreisinger:9.3.2018 13:34

Napřed jsem v té úloze marně hledal nějaký SELECT, ale pak mi snad došlo, že "... kdyby tam něco takového bylo". Já bych to volitelné předvyplnění řešil asi následovně:

<?php
$Sel0="";
$Sel1="SELECTED";
$Sel2="";
$Sel3="";
$Sel4="SELECTED"
?>
.....

<SELECT name="Rok" with=20 size=5 MULTIPLE>
<OPTION value="0" <?= $Sel0 ?>>1950
<OPTION value="1" <?= $Sel1 ?>>1951
<OPTION value="2" <?= $Sel2 ?>>1952
<OPTION value="3" <?= $Sel3 ?>>1953
<OPTION value="4" <?= $Sel4 ?>>1954
</SELECT>
.....

Odpovědět 9.3.2018 13:34
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
Odpovídá na Moss
František Kreisinger:9.3.2018 15:01

Asi stejně by mělo fungovat:

...
$hlaska=(isset($_GET['us­pech']))? $_GET['uspech'] : "";
...
echo nl2br("Hláška: ".$hlaska."\n");

Je to o chloupek kratší :-).

Odpovědět 9.3.2018 15:01
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
Odpovídá na František Kreisinger
František Kreisinger:9.3.2018 15:37

Bože, vypadá to, že celý problém s odesíláním mailů i se jménem odesilatele v hlavičce byl jen v tom, že jsem při testování používal fiktivní adresu odesilatele sice formálně správnou, ale neexistující. S existující adresou odesilatele to funguje i s jeho jménem v hlavičce. Je ale otázkou proč předtím maily nedocházely a přitom SMTP nic nehlásil. Znamená to, že by je odmítl server příjemce (email.cz) ?

Odpovědět 9.3.2018 15:37
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
Odpovídá na František Kreisinger
František Kreisinger:9.3.2018 21:02

Je to stejně divné, protože jsem v té emailové schránce, do které jsem ty testovací emaily posílal, našel mezi došlými i jeden, který měl jako odesilatele uvedenu tu fiktivní neexistující adresu. Zjistil jsem pak ještě, že problém asi dělalo také to, když se odeslalo v hlavičce FROM: ale bez vyplněné adresy odesilatele (tedy jenom s <>).

Odpovědět 9.3.2018 21:02
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
Odpovídá na František Kreisinger
František Kreisinger:10.3.2018 16:03

Tak opravdu nevím, proč to předtím nefungovalo. Teď mi to funguje a emaily dochází i s neexistující adresou odesilatele. Už se ale bohužel ztrácím v tom, co všechno jsem mezitím změnil.

Odpovědět 10.3.2018 16:03
Začátečník v PHP, HTML i webovém programování vůbec.
Avatar
hrncal.junior:15.3.2018 10:33

Ahoj,
zeptám se na úplně základní věc. co když budu chtít formulář odeslat na více adres?
Pro emaily používám

$adresa = '[email protected]';
$adresa2 = '[email protected]';
$adresa3 =  . $_POST['email'];

a pro odeslání

$uspech = mb_send_mail($adresa,, $adresa2, $adresa3, $predmet, $textZpravy, $hlavicka);

A to mi samozřejmě nefunguje. Můžete mne prosím nasměrovat? Děkuji

 
Odpovědět 15.3.2018 10:33
Avatar
Odpovídá na hrncal.junior
Michal Šmahel:15.3.2018 11:24

Ahoj, tohle je celkem běžná věc. Tvé řešení je zajímavé, ale má určitý problém. Když se podíváš do dokumentace, zjistíš, že předáváš funkci jiné parametry, než skutečně přijímá.

Abych se vrátil k řešení. Pokud chceš zapsat více příjemců, uložíš je do jedné proměnné oddělené čárkou.

$prijemci = "[email protected], [email protected]";
Odpovědět 15.3.2018 11:24
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
hrncal.junior:15.3.2018 16:43

Jak jednoduché. Akorád jak tam dostanu email odesílatele? Jednoduché připojení

. $_POST["email"]

mi nefunguje

 
Odpovědět 15.3.2018 16:43
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na hrncal.junior
Jan Lupčík:15.3.2018 16:59

Ahoj,
takto se určitě nespojují řetězce. Před tou tečkou něco musí být. :)
Nebo lze použít zkrácený výraz .= ... akorát nevidím, co bys chtěl spojovat. Možná takhle?

$prijemci = "[email protected], [email protected], ";
$prijemci .= $_POST["email"];
Odpovědět 15.3.2018 16:59
TruckersMP vývojář
Avatar
hrncal.junior:15.3.2018 17:06

No chci docílit toho, aby kromě příjemncům přišel e-mail i tomu, co vyplní formulář.i

 
Odpovědět 15.3.2018 17:06
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na hrncal.junior
Jan Lupčík:15.3.2018 17:35

Tak použij něco takového:

$prijemci = "[email protected], [email protected], ";
$prijemci .= $_POST["email"];
mb_send_mail($prijemci, $predmet, $textZpravy, $hlavicka);
Odpovědět 15.3.2018 17:35
TruckersMP vývojář
Avatar
Odpovídá na Jan Lupčík
hrncal.junior:15.3.2018 18:15

Díky moc, jsem úplný blb. Cpal jsem jabka z hruškama a divím se, že to nefunguje. Už mi to frčí jak má.

 
Odpovědět 15.3.2018 18:15
Avatar
Roman Duchoň:16.4.2018 16:47

Nějaké základy už jsem pochytal jinde, jedu si tu kurzy, abych si ty základy rozšířil a tenhle díl nemá chybu! :-)
XSS (jsem nevěděl, že se to tak jmenuje) už mi samo o sobě vrtalo hlavou a přemýšlel jsem, jak mu zabránit, takže htmlspecialchars() se hodí.
header('Location: stranka.php'); s použítím GET je pro mě taky suprová novinka.
Až jsem z toho zaražen a mám obavy, že víc takových informací a budu muset celé doposud vytvořené stránky smazat a udělat odznova...
Ale jednu otázku bych přece jen měl - co se stane, když při "přesměrování" nepoužiji ve funkci exit?

Odpovědět 16.4.2018 16:47
RD
Avatar
Jiřina Trojánková:29.4.2018 19:25

Ahoj, poraďte prosím, když napíšu: header('Location: #message'); tak mě to po odeslání hodí na správné místo, ale nevypíše hlášku. Když napíšu: header('Location: #message?uspech=a­no'); tak mě to ani nehodí na správnou sekci, ani nevypíše hlášku, ale vypise se uspech=ano v url.. Nedava mi to smysl..
<?php
mb_internal_en­coding("UTF-8");
$hlaska = '';
if (isset($_GET['us­pech']))
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
if ($_POST)
{
if (isset($_POST['fir­stname']) && $_POST['firstname'] &&
isset($_POST['las­tname']) && $_POST['lastname'] &&
isset($_POST['e­mail']) && $_POST['email'] &&
isset($_POST['pho­ne']) && $_POST['phone'] &&
isset($_POST['mes­sage']) && $_POST['message'])
{
$hlavicka = 'From:' . $_POST['email'];
$hlavicka .= "\nMIME-Version: 1.0\n";
$hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
$adresa = 'jirina.trojan­[email protected]';
$predmet = 'Nová zpráva z mailformu';
$uspech = mb_send_mail($a­dresa, $predmet, $_POST['message'], $hlavicka);
if ($uspech)
{
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
header('Location: #message');
//http://www.tes­t.com/index.htm?na­me1=value1&na­me2=value2
exit;
}
else
$hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
}
else
$hlaska = 'Formulář není správně vyplněný!';
}
?>

 
Odpovědět 29.4.2018 19:25
Avatar
Pavel Kvasil
Člen
Avatar
Pavel Kvasil:21.5.2018 16:45

Zdravím,
super návod, jako .php laikovi velmi přínosný. Mám, prosím, dva dotazy.

/1/ jak mohu řádkovat text v emailu, pokud to jeho těla vložím více položek formuláře? Např.:

$textzpravy = 'jmeno : ' . $_POST['jmeno'];
$textzpravy .= '; prijmeni : ' . $_POST['prijmeni'];
$textzpravy .= '; zprava : ' . $_POST['zprava'];
$uspech = mb_send_mail($a­dresa, $predmet, $textzpravy, $hlavicka);

jde mi o to, aby v mailu byli jednotlivé položky formuláře na samostatném řádku.

/2/ hláška o úspěšném odeslání mi zůstává viditelná i po obnovení stránky?! Jak mohu script upravit tak, aby se hláška zobrazila třeba jako systémová hláška Windows? Nebo aby byla otevřena samostatná stránka, kterou bych mohl upravit de vzhledu původních stránek s formulářem? Načetl jsem tady u vás, že je možné použít běžné html tagy, ale to bylo pořád v rámci stránky s formulářem?!

Díky moc a hezký den.
Pavel K.

Editováno 21.5.2018 16:46
 
Odpovědět 21.5.2018 16:45
Avatar
Ivo Silber
Člen
Avatar
Ivo Silber:24.5.2018 16:40

Tyto stránky jsou super :)

 
Odpovědět 24.5.2018 16:40
Avatar
Pavel Janda
Člen
Avatar
Pavel Janda:28.5.2018 22:35

Ahoj, celkem mi to funguje - mailuje, leč podstatný problém.
Jako SMTP mám v ini souborech nastaven smtp.google.com a jako mailový účet svůj gmail.účet, takže to posílá maily přes google. Nicméně ať už je v $hlavicka přítomno cokoli (tj mail zadaný z formuláře), vždy je v mailu jako odesílatel uveden můj mail. Tj. absolutně nefunguje ona záměna zobrazeného odesílatele pomocí "From:" v příkazu mb_send_mail. Provozuji na lokálně nainstalovaném XAMPP, na Win7.
Zkusil jsem si na jednoduchém webhostingu - ale tam nemám možnost nastavení PHP, takže tam to samozřejmě nelze.
Pokud místo gmailu použiji seznam (tj. smtp.seznam.cz a svůj seznam účet, tak dokonce ani nemohu uvést v From něco jiného než vlastní seznam účet - pokud parametr "From" vynechám tak můj seznam účet musí být v sendmail.ini jako "Force sender", jinak v obou případech se v error logu dozvím , že mám smůlu, že jiného odesílatele než vlastní účet použít nesmím....

Dotaz tedy zní zda nedělám nějakou blbinu (jakou asi), či zda je to tak jak se zdá, že zkrátka zaměnit odesílatele mailu zkrátka asi nelze ... ?

Díky za případný komentář.

 
Odpovědět 28.5.2018 22:35
Avatar
Odpovídá na Pavel Janda
Michal Štěpánek:28.5.2018 23:56

Odesílatel podle mě musí být ten, jehož službu k odeslání používáš, protože tě "něco" musí autentifikovat. Nelze nijak jednoduše poslat z webu mail z adresy "[email protected]­jemail.cz" a k odeslání použít účet na google...

Odpovědět 28.5.2018 23:56
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Pavel Janda
Člen
Avatar
Odpovídá na Michal Štěpánek
Pavel Janda:29.5.2018 11:57

Díky za reakci, to jasné, jenže !

  • celý příklad (lekce 8 - 9 ) je postaven právě na tom, že na mou adresu (... adresu "tvůrce" webu" ) přijdou maily s "odesílateli" (tj. From...) zadanými v poli "email" kontaktního formuláře.

Přímo ve výkladu je také jasně uvedeno, že pomoci parametru From v mb_send_mail se přesně tohoto má dosáhnout a že, cituji "Email potom vypadá jako že přišel z této adresy, i když ho odeslalo PHP z vašich stránek".

No a celý problém je, že takto to nefunguje a že logicky maily chodí z mého mailu, přes který se to celé honí...
Uvedenou záměnu adres zkrátka nedocílím. I když bych rád a ostatně logika existence parametru From by tomu napovídala...

Tak zatím stále nevím. Asi by pomohlo vyjádření autora - to by ale pak nedělal nic jiného a už takhle si s tím seriálem dal opravdu hodně práce.

 
Odpovědět  +1 29.5.2018 11:57
Avatar
Jan Jedlička:3.6.2018 19:53

ahoj, proc pisi htmlspecialchars v horni casti nad formularem ?.myslim tuto cast: if ($hlaska) echo('<p>' . htmlspecialchar­s($hlaska) . '</p>'); chapu ze to ma zmenit spicate zavorky html kodu na neskodny text, ale pritom tuto promennou nemuze nejak zvenci ovlivnit. jsem zacatecnik, tak se omlouvam za tak hloupou otazku :-)

 
Odpovědět 3.6.2018 19:53
Avatar
Jimmy Jack
Člen
Avatar
Jimmy Jack:18.6.2018 10:22

Ahoj, předem moc díky za vaší práci. Naprosto pecková záležitost! A teď k dotazu, v odstavci Přesměrování se řaší, aby formulář po odeslání nezůstal vyplněný. Co by bylo špatně na následujícím kódu namísto přesměrování? Nebude to naopak rychlejší a méně náročné? Díky!

<?php
    $hlaska = '';
    $jmeno = '';
    $email = '';
    $zprava = '';
    if ($_POST) { // V poli _POST něco je, odeslal se formulář
            if (isset($_POST['jmeno']) && $_POST['jmeno'] && isset($_POST['email']) &&                  $_POST['email'] &&
            isset($_POST['zprava']) && $_POST['zprava'] && isset($_POST['rok']) && $_POST['rok'] == date('Y')) {
                // Sem přijde odeslání emailu
                $hlaska = 'Formulář je správně vyplněný.';
                $jmeno = '';
                $email = '';
                $zprava = '';
            }
            else {
                $hlaska = 'Formulář není správně vyplněný!';
                $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';
                $email = (isset($_POST['email'])) ? $_POST['email'] : '';
                $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';
            }
    }
?>
 
Odpovědět 18.6.2018 10:22
Avatar
T XXX
Člen
Avatar
T XXX:21.6.2018 10:50

Aké parametre môže mať ešte funkcia: header('Location: example.php');
Čo môže byť ešte namiesto Location a kde sa to využíva ?
Na čo všetko presne je táto funkcia vlastne je (okrem presmerovania na inú stránku) ?

 
Odpovědět 21.6.2018 10:50
Avatar
Matěj Bína
Člen
Avatar
Odpovídá na Jimmy Jack
Matěj Bína:16. února 9:10

Myslím, že tohle řeší jen předvyplněnost formuláře. $_POST zůstane vyplněné a F5 jeho obsah odešle. Možná by to vyřešilo unset($_POST)? Nevím. Každopádně Location: je zajímavý způsob, jak použít POST a GET zároveň.

 
Odpovědět 16. února 9:10
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 134 zpráv z 134.