Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Dominik Kutil:17.7.2019 17:42

Ahoj potřeboval bych radu mám problém s odesíláním informací z vyplněného formuláře do emailu. email příjde ale prázdný. Budu rád za každý postřeh.

Zkusil jsem: <?php
$jmeno = $_POST['jmeno'];
$telefon = $_POST['telefon'];
$email = $_POST['email'];
$prijezd = $_POST['prijezd'];
$odjezd = $_POST['odjezd'];
$osoby = $_POST['osoby'];
$pokoj = $_POST['pokoj'];
$poznamka = $_POST['poznamka'];
$karta = $_POST['karta'];
$kartajmeno = $_POST['kartaj­meno'];
$kartaplatnost = $_POST['karta­platnost'];

$to = "xxxxxxx@xxxx­xx.cz";
$extra = "From: $email\r\nReply-To: $email\r\nContent-Type: text/plain; charset=\"utf-8\"\r\nContent-Transfer-Encoding: 8-bit\r\n";
$subject = "Rezervace od ".$jmeno."";
$mess = "Jméno a příjmení: ".$jmeno."\nTe­lefoní číslo:".$tele­fon."\nEmailo­vá adresa: ".$email."\nDatum příjezdu:".$pri­jezd."\nDatum odjezdu: ".$odjezd."\nPočet osob: ".$osoby."\nTyp pokoje:".$pokoj­."\nPřání a upřesnění: ".$poznamka."\nČís­lo platební karty: ".$karta."\nJméno držitele karty: ".$kartajmeno­."\nPlatnost karty: ".$kartaplatnos­t."\n";
if(Mail($to, $subject, $mess, $extra)) echo "Email byl odeslán";
else "Nastala chyba. Prosím opakujte rezervaci";

?>

Chci docílit: A email přijde asi takhle :
Jméno a příjmení:
Telefoní číslo:
Emailová adresa:
Datum příjezdu:
Datum odjezdu:
Počet osob:
Typ pokoje:
Přání a upřesnění:
Číslo platební karty:
Jméno držitele karty:
Platnost karty:

 
Odpovědět
17.7.2019 17:42
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Dominik Kutil
Jaroslav Smrž:17.7.2019 17:56

To jako vážně???!!!! Ty chceš zasílat tyto údaje mailem? Jméno a příjmení, číslo karty, platnost... Buď rád, že ti to nefunguje. Toto vážně není dobrý nápad. V lepším případě dostaneš jen pokutu za porušení GDPR, v tom horším (až to někdo zneužije) budeš čelit trestnímu stíhání.

Nahoru Odpovědět
17.7.2019 17:56
/* Life runs on code */
Avatar
Odpovídá na Jaroslav Smrž
Dominik Kutil:17.7.2019 18:02

Takhle to funguje všude a už dlouho. V jiném případě jak by jsi to t Dy řešil ty?

 
Nahoru Odpovědět
17.7.2019 18:02
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:17.7.2019 18:02

Souhlasím s Jaroslavem, opravdu není bezpečné to posílat, buď rád že ti to nefunguje, kdyby ti to fungovalo, tak už ti to nikdo neřekne. Jako náhradu bych spíše navrhl způsob že pošleš odkaz který bude fungovat jen tomu uživateli (bude se muset přihlásit) a tam budeš mít vypsané to co potřebuješ a nebo najdi nějaké jiné řešení, ale takovýto způsob určitě není ten pravý.

Nahoru Odpovědět
17.7.2019 18:02
Řeš pouze to, co dokážeš ovlivnit.
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Dominik Kutil
Jaroslav Smrž:17.7.2019 18:08

Tato data by měla být šifrována tzn počínaje HTTPS, až do uložení šifrovaného záznamu do databáze. Klient by měl dostat email kde by bylo vidět max. první 4 číslice karty, určitě ne platnost. Nejlépe, aby každý klient měl vytvořený svůj účet a pomocí něj mohl spravovat a zobrazovat platební metody atd. Opět přes šifrovanou komunikaci. S tímhle není legrace.

Nahoru Odpovědět
17.7.2019 18:08
/* Life runs on code */
Avatar
Dominik Kutil:17.7.2019 18:29

Ale tohle je rezervační formulář, který jde na email schránku, která je zabezpečena. A je to formulář na penzion

 
Nahoru Odpovědět
17.7.2019 18:29
Avatar
Dominik Kutil:17.7.2019 18:48

A tedy je problém jen v té kartě nebo celkově. Protože jak má penzion získat garanci když tam nedají kartu (ty informace jdou jen na ten e-mail recepce a oni pak zvlášť kontaktují dotyčného)

 
Nahoru Odpovědět
17.7.2019 18:48
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Dominik Kutil
Jaroslav Smrž:17.7.2019 18:57

To je úplně jedno, co to je a k čemu to je. Prostě nemůžeš takhle nakládat s citlivými údaji a ještě k tomu najednou v 1 emailu, který je generovaný. BTW: cvc kód bys od nich nechtěl? :-) Jak jsem ti psal, pokud chceš tyto údaje zpětně avizovat klientům, chtělo by to celé od základu předělat. Pokud se jedná pouze o rezervační systém, tak nepotřebuješ číslo karty ani platnost. A máš vůbec ošetřený systém rezervací? Co když ti na 1 den přijdou 3, 4 rezervace o celkovém počtu 30 osob a ty budeš mít kapacitu jen pro 10, ale všem už automaticky pošleš potvrzení? To je trochu na hov**, že? Proto je potřeba stejně systém postavit na databázi, kde při další rezervaci budeš ověřovat dostupnost. Nehledě na komfort při vyhledávání a další správě rezervací a osobních údajů. Na tvém místě bych se vrátil na úpný začátek k návrhu systému.

Nahoru Odpovědět
17.7.2019 18:57
/* Life runs on code */
Avatar
Odpovídá na Jaroslav Smrž
Dominik Kutil:17.7.2019 19:04

Cvc kód mám rozepsány, a kapacitu taky vyřešenou jde mi jen o to že oni to výplní a mě ty informace jdou do schránky (tu kartu smažu po domluvě se zákazníkem - upozornil jsem je na to) a oni pak každého osobně kontaktují . Jde mi o klasické informace jméno příjmení datum rezervace atd

 
Nahoru Odpovědět
17.7.2019 19:04
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Dominik Kutil
Jaroslav Smrž:17.7.2019 19:14

Cvc kód mám rozepsány

Jak rozepsány? CVC kód je na zadní straně platební karty a nelze bez něj provést platbu online
Nezlob se, ale nevypadá to, že bys byl profesionál nebo alespoň měl měl snahu vzít si k srdci rady, které se ti tu snažíme dát, proto se nebudu podílet dál na řešení tvého problému. Doporučím ti jen pročíst si místní tutoriál o základech php, kde je popsán kontaktní formulář https://www.itnetwork.cz/…ovy-formular

Nahoru Odpovědět
17.7.2019 19:14
/* Life runs on code */
Avatar
Odpovídá na Jaroslav Smrž
Dominik Kutil:17.7.2019 19:21

Já myslel jiný kód což je ale jedno. Profesionál nejs věnuji se Javě ne PHP tohle mám jen jako bokovku ale což byl i důvod proč jsem psal o radu. Děkuji že jste mi připomněli zákony jinak z PHP jste mi nic neporadili

 
Nahoru Odpovědět
17.7.2019 19:21
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Dominik Kutil
Jaroslav Smrž:17.7.2019 19:25

Tak proč to nenapíšeš v Java EE a trápíš se s php? Nechápu. A ohledně php jsme ti poradili formou odkazu na článek Davida Čápky, který tam podrobně popisuje kód pro tvorbu kontaktního formuláře.

Nahoru Odpovědět
17.7.2019 19:25
/* Life runs on code */
Avatar
Odpovídá na Jaroslav Smrž
Dominik Kutil:17.7.2019 19:28

Protože jsem měl nápad jak to udělat přes PHP a nic ve zlém ale ten článek mi nepomůže to co tam je už dávno mám

 
Nahoru Odpovědět
17.7.2019 19:28
Avatar
Milan Turyna
Tvůrce
Avatar
Milan Turyna:17.7.2019 20:00

Není to těmi tečky které tam máš? ".$jmeno."

Jinak bych možná volil u tich variable zapsání takovým to způs
$subject = "Rezervace od" . $jmeno;
a nebo $subject = "Rezervace od $jmeno"

Nahoru Odpovědět
17.7.2019 20:00
Řeš pouze to, co dokážeš ovlivnit.
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Dominik Kutil
Jaroslav Smrž:17.7.2019 20:01

Nevím, proč by ti to nemělo pomoct. Ten jeho formulář funguje, tvůj ne. Dej sem celý obslužný kód formuláře, html formuláře a uvidíme. Pokud ho budeš vkládat, použij na to značky </> v editoru. Když to dáš do zprávy, těžko se v tom orientuje.

Nahoru Odpovědět
17.7.2019 20:01
/* Life runs on code */
Avatar
Odpovídá na Dominik Kutil
Michal Štěpánek:18.7.2019 7:58

Ještě jsem se nesetkal s ubytováním, kde by po mně chtěli při rezervaci číslo a platnost karty a abych pravdu řekl, asi bych rychle ty stránky opustil, kdyby toto chtěli. Existují lidé, kteří jednoduše žádnou kartu nemají a hlavně nevidím jediný důvod, proč bych měl tuto informaci někomu sdělovat. Pro rezervaci přeci není důležité, ze které karty se to bude pak platit, ale důležitý může být způsob úhrady...
A co se týče toho formuláře, trošku nechápu jaký jsi měl nápad na PHP, když v tom neděláš? Pokud umíš Javu, tak to spáchej v Javě, uživateli je stejně jedno, v čem je to psané, pro něj je důležitý výsledek...

Nahoru Odpovědět
18.7.2019 7:58
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.7.2019 8:50

https://www.itnetwork.cz/…ovy-formular
Ten clanek se mi nelibi. Mam radeji reseni copy-paste uplny funkcni kod. V tom clanku 70% kodu schazi. Kod je roztrhany na ruzna mista textu. A obsahuje chyby.

Dominik Kutil - kdyz ti to nefunguje, tak postup je takovy, ze do google zadas klicova slova a najdes jiny kod, ktery by mohl fungovat. A tak postupujes, dokud nenarazis na kousek kodu, ktery funguje. jj, jeste se musis hodne ucit :)

Dominik Kutil - A davas sem polovicni kod. Treba je chyba nekde jinde. A nasledujici kod jsem netestoval. Precti si hlavne poznamky s !!!. Kdyz smazes ty komentare, tak se dostanes zhruba na podobny pocet radku, jenom je ten kod prehlednejsi.

<?php
function abc($post=null)
        {
        // !!! tohle ty tam napriklad vubec neresis,
        //     zda uz bylo kliknuto na tlacitko odeslat, pak odesilas prazdne udaje, nejspis, uz pri nacteni stranky
        // byl formular odeslan?
        // ! Pozn: V html kodu mas <form method="post">, ne <form>, ne <form method="get">
        $sended = is_array($post) && count($post)>0;
        // $sended = is_array($post) && isset($post['xyz']) && isset($post['xyz']=='hodnota') // lepe neco takoveho
        if (!$sended)
                {
                echo 'Html formular nebyl odeslan na server.';
                return;
                }

        // precti form
        $names = array(
//              'notify'  => '',
                'jmeno'   => 'Jméno a příjmení',
                'telefon' => 'Telefoní číslo',
                'email'   => 'Emailová adresa',
                'prijezd' => 'Datum příjezdu',
                'odjezd'  => 'Datum odjezdu',
                'osoby'   => 'Počet osob',
                'pokoj'   => 'Typ pokoje',
                'poznamka'=> 'Přání a upřesnění',
                'karta'   => 'Číslo platební karty',
                'kartajmeno'    => 'Jméno držitele karty',
                'kartaplatnost' => 'Platnost karty'
                );
        $form = array();
        foreach ($names as $key=>$value)
                {
                $form[$key] = isset($post[$key]) ? $post[$key] : ''; // viz ten clanek, ten isset je tam nutny, ty to mas bez neho
                }

        // zde dopln validaci udaju - kontrola, zda jsou vyplneny spravne, jinak ti zahlti mail spam s viagrou
        // vysledkem bude $validated = true nebo false
        $validated = true;
        if (!$validated)
                {
                echo 'Html formular je spatne vyplneny.';
                return;
                }

        // mail
//      $from      = $form['email'];
        $from      = "[email protected]";
        $reply     = $form['email'];
        $to        = "[email protected]";
        $subject   = "Rezervace od ".$form['jmeno'];

        $headers   = array();
        $headers[] = "From: $from";
        $headers[] = "Reply-To: $reply";
        $headers[] = "Return-To: $reply";
//      if ($form['notify']==true)
//              {
//              $headers[] = "Disposition-Notification-To: $from";
//              $headers[] = "Return-Receipt-To: $from";
//              }
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'X-Mailer: PHP/' . phpversion();
        $headers[] = 'Content-type: text/plain; charset=utf-8';
        $headers[] = 'Content-Transfer-Encoding: 8-bit';
        $headers   = implode(PHP_EOL, $headers);

        $arr = array();
        foreach($form as $key=>$value)
                {
                $arr[] = $names[$key].': '.$value;
                }
        $message = implode("\n", $arr);

        $sended = mail($to, $subject, $message, $headers);
        if(!$sended)
                {
                echo "Nastala chyba. Prosím opakujte rezervaci"; // !!! tady jsi mel else a zadny prikaz
                return;
                }
        echo "Email byl odeslán";
        }

abc($_POST);
?>
Editováno 18.7.2019 8:51
 
Nahoru Odpovědět
18.7.2019 8:50
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18.7.2019 9:14

Jo, tohle by mozna bylo moc fajn.
mb_internal_en­coding - pridat, viz clanek
mb_send_mail - to jsem nikdy nepouzil, ale mozna by to bylo fajn kvuli diakritice

DISKUZE = "bude hltit fora, aby mu nekdo pomohl tento problem resit"
A v tom clanku je spatne toto:
$hlavicka = 'From:' . $_POST['email'];
$hlavicka .= "\nMIME-Version: 1.0\n";
$uspech = mb_send_mail($a­dresa, $predmet, $_POST['zprava'], $hlavicka);

  • hned tlaci post primo do mailu, bez jakekoliv kontroly, takhle si novacek copy-paste na plnou schranku spamu a DISKUZE
  • ma tam "\n", pritom spousta clanku doporucuje pouzivat PHP_EOL. Kdyz to nebude fungovat, DISKUZE
  • a mozna lepsi pouzit implode pole a zadat tam jedinkrat ten znak. Soucasne to zjednodusi i zapis.

if ($_POST) // V poli _POST něco je, odeslal se formulář

  • ciste teoreticky, post existuje vzdy, lepsi je mozna sledovat pocet polozek a nebo konkretni input, treba type=hidden. Zda byly poslane nejake udaje a zda existuje $_POST['zpracuj'] a zda $_POST['zpracuj']=='ma­il'. Jakoze to ma zpracovavat script pro odeslani na mail a ne jiny pro ukladani do db.

    echo('<p>' . $hlaska . '</p>');

  • echo funguje bez zavorek, detailista :)

A ten kod neni ve funkci, coz je mozna o 3 radky jednodussi, ale horsi pro dalsi zpracovani. Novacek tu funkci nebude umet napsat spravne a DISKUZE.
Jinymi slovy, takove kody jsou k novackum znacne neprivetive.
Vzpominam si, jak skvela byla dokumentace k Turbo-pascal-6, kdy jsem zkopiroval z ni asi 10 radku kodu pro read-key, ktery bych tehdy sam nevyplodil. Tehdy zadny google nebyl :)

 
Nahoru Odpovědět
18.7.2019 9:14
Avatar
Dominik Kutil:19.7.2019 8:12

Děkuji konečně někdo kdo mi poradil

 
Nahoru Odpovědět
19.7.2019 8:12
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 19 zpráv z 19.