Autor Zpráva
FakeGameCZ
Profil
Mam na stranke hypotekarnu kalkulacku, pri ktorej ked kliknes na vypocitat ukaze ti tabulku s vysledkami hypoteky. Nasledne tam je formular - kontakt na Vas (ked chcete tu hypoteku) a ked ten formular vyplnite funkciou mail() sa mi odosle mail s udajmi, ktore zadal vo formulari. Potrebujem ale este spravit funkciu na "ulozenie" zadanych udajov z kalkulacky a ked vyplni formular s kontaktom na seba tak sa do mailu mne prida aj udaje z kalkulacky ktore zadal.

Value z kontaktneho formularu - pridal som k input aj value="<?php echo $_POST['abc'] ?>" ... Ked skusim z kalkulacky to vytiahnut rovnako, tzn. pridat value k input - value="<?php echo $_GET['abc'] ?>" tak mi to nefunguje. Ako by sa dali ulozit inak tie udaje a po vyplneni formularu s kontaktom odoslat cez funkciu mail() mne na mail? Udaje z kontaktneho formularu posielam cez mail napr. "Meno: " . $_POST['abc'] a funguje to dobre... Dakujem

Moderátor juriad: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou a interpunkcí.
jefitto44
Profil
1. toto, čo máš vo value ti vyhadzuje undefined index ak užívateľ nevyplní nejaký input a odošle. Treba použiť funkciu isset
2. Hodnota sa do poľa $_POST (dúfam, že to posielaš cez post a nie cez get) dostáva bezohľadu na value, ale s ohľadom na atribut name. Čiže ak máš input name="daco" a value="daco2", hodnotu, ktoru zada užívateľ budeš mať dostupnú v $_POST["daco"] a nie v $_POST["daco2"], skús pozrieť, či by toto nemohla byť chyba.
3. Budeš si musieť urobiť asi nejakú medzipremennú a to buď $_SESSION, alebo to uložiť do databázy, v horšom prípade vytvoriť file, alebo $_COOKIE. To je ale blbosť, podľa mňa by na to bolo najvhodnejšie použiť $_SESSION, to ostatné ber len ako možnosti. Do tej SESSION uložíš všetko čo zadal do kalkulačky (možno to pôjde cez $_SESSION=$_POST a ešte aj indexy budeš mať rovnaké). Ide o to, že pravdepodobne nechceš, aby sa pri každom potvrdení kalkulačky odoslal aj mail
FakeGameCZ
Profil
Nie, nechcem aby sa mail odoslal po každom potvrdení kalkulačky. Kalkulačku posielam cez $_GET a formulár s údajmi cez $_POST. Input kalkulačky vyzerá takto:

<input type="text" name="vyska_hypoteky" required="required" placeholder="Výška hypotéky (EUR)" value="<?php echo $_GET['vyska_hypoteky']; ?>" />

Hodnota value je vo funkcií mail() zapísaná takto:

"Výška hypotéky: " . $_GET['vyska_hypoteky']
jefitto44
Profil
Nepovedal by som, že odosielať formuláre cez $_GET je najrozumnejší nápad...
Ak to ale posielaš cez get, tak hodnoty tam budeš mať vždy, čiže to môžeš smelo poslať na mail. A ono si hodnoty z $_GET vybere
Tomáš123
Profil
FakeGameCZ:
Nástrel s jedným formulárovým poľom pre hodnotu a jedným pre e-mail:
<?php
  if(!empty($_GET['vyska_hypoteky']) and !empty($_POST['email'])) {
    $adresat = "tvoj.email@email.sk";
    $predmet = "Výška hypotéky";
    $sprava = "E-mail od: " . htmlspecialchars($_POST['email']) . PHP_EOL;
    $sprava .= "Výška hypotéky: " . htmlspecialchars($_GET['vyska_hypoteky']);
    mail($adresat, $predmet, $sprava); //*
  }
  else {
    echo "Nebol dodaný e-mail alebo údaj o výške hypotéky";
  }
?>
*V reálnom svete je potrebné pridať aj štvrtý, nepovinný, argument kódovania správy, aby ti neprichádzali otázniky.

Z tvojho prejavu v prvom príspevku som nepochopil, či je nutne potrebné prechádzať medzi stránkami, vsúvať tam ďalšiu (zbytočne) a potom riešiť zabezpečenie údajov.

Pozor. Posielanie údajov prostredníctvom metódy GET nemusí byť vhodné aj v prípade, že údaje nie sú citlivé. Dĺžka reťazca v adresnom riadku je obmedzená. Na prenos výšky hypotéky by som použil metódu POST, ale ak je to iba číslo, pravdepodobne nie je nijako nebezpečné používať GET.

jefitto44:
Treba použiť funkciu isset
Lepšia bude !empty(). Premenná je isset aj vtedy, keď je iba deklarovaná $a = "";. !empty vyžaduje, aby disponovala nejakou hodnotou (ktorá sa nevyhodnotí na false).

tak hodnoty tam budeš mať vždy
To určite nie. Bolo by celkom pracné zabezpečiť zachovanie.
jefitto44
Profil
Akož e nie? Však keď sú raz v query stringu, tak tam sú... či azda nie?
FakeGameCZ
Profil
Prišiel som zrejme na príčinu problému. Mám tam jednu funkciu mail(), do ktorej musím dať zrejme obe formuláre. Momentálne je to takto:

if(isset($_POST['odoslat'])){

Neviem len, ako dám do toho aj druhú premennú $_POST['vypocitat'] ... Zistil som, že keď tam mám premennú $_POST['odoslat'] tak funguje prvá časť emailu kde sa tie údaje z formulára vypíšu. Keď tam dám tu druhú premennú $_POST['vypocitat'] tak zase funguje druhá časť, len tá prvá nie. Neviete ako to môžem spojiť?

if(isset($_POST['vypocitat'] || $_POST['odoslat'])){

Toto mi nechcelo fungovať :)
Keeehi
Profil
or issetu, ne isset oru
if(isset($_POST['vypocitat']) || isset($_POST['odoslat'])){
Nekontroloval jsem, zda je to to, co k´od potřebuje. Jen jsem opravil samotnou podmínku.
FakeGameCZ
Profil
Funguje to momentálne tak, že po vyplnení formulára s kalkulačkou sa odošle 1 mail s údajmi z kalkulačky a po vyplnení druhého formuláru s kontaktom sa odošle ďalší mail s týmito údajmi. Ja to potrebujem dať do spoločného e-mailu.
FakeGameCZ
Profil
Nemáte s tým niekto skúsenosť?

if(isset($_POST['vypocitat']) && isset($_POST['odoslat'])){

Takto mi to nefunguje.
jefitto44
Profil
Jak nefuguje? Vypisuje error?
FakeGameCZ
Profil
<?php

if(isset($_POST['vypocitat']) && isset($_POST['odoslat'])){
    $to = "..."; // Váš e-mail
    $from = "..."; // Odosielateľ e-mailu
    $subject = "..."; // Predmet e-mailu
    $message = "Na stránke ... sme zaznamenali novú žiadosť o nezáväznú kalkuláciu.\n\n" . 
    "KONTAKTNÉ ÚDAJE\n\n" . "Meno a priezvisko: " . $_POST['meno_priezvisko'] . "\n" . "E-mail: " . $_POST['email'] . "\n" . "Tel. číslo: " . $_POST['cislo'] . "\n" . "Mesto: " . $_POST['mesto'] . "\n\n" .
    "VÝPOČET HYPOTÉKY\n\n" . "Výška hypotéky: " . $_POST['vyska_hypoteky'] . "€" . "\n" . "Hodnota nehnuteľnosti: " . $_POST['hodnota_nehnutelnosti'] . "€" . "\n" . "Doba splácania: " . $_POST['doba_splacania'] . " rokov";
    
    $headers = "From:" . $from;
    mail($to,$subject,$message,$headers);
}?>

Takto vyzerá celý skript na odosielanie e-mailov. Nefunguje to tak, že keď všetko vyplním a odošlem, mail nepríde. Keď tam ale dám namiesto && značku || tak sa mail odošle po zadaní údajov do kalkulačky a následne aj po vyplnení kontaktu. Ja to potrebujem odoslať v 1 maily.
juriad
Profil
FakeGameCZ:
Když chceš, aby ti přišel jeden mail, musíš mít jen jedno odesílací tlačítko, nikoli dvě.
Máš-li dva různé formuláře, musíš je sloučit do jednoho.

Jelikož se ti nikdy nestane, že by byl formulář odeslaný zároveň tlačítkem vypocitat i odoslat, tvá podmína s && nedává smysl.
FakeGameCZ
Profil
juriad:
Myslíš, že by to fungovalo cez uloženie do $_SESSION?
juriad
Profil
Je to možné, ale to má zase nevýhodu, že si uživatel nemůže spustit dvě kalkulačky zároveň (v různých tabech).
Netušíme, jak máš navržené stránky, ani jaká je souvislost mezi kalkulačkou a kontaktem.
FakeGameCZ
Profil
juriad:
Môžeš mi na teba poslať kontakt, nerád by som dával stránku tu verejne.
juriad
Profil
Nechci to řešit soukromě. Tady je víc lidí, kteří ti mohou pomoci.
Nemusíš ukazovat web, stačí jen dostatečně přesně popsat vztah těch formulářů.

Předpokládám, že v kalkulačce uživatel bude mnohokrát přepočítávat výsledek, dokud nebude spokojený. Pak někde zmáčkne tlačítko odeslat žádost a to mu zobrazí kontaktní formulář. Až jej vyplní a potvrdí, odešle se mail.

Je tomu tak? V takovém případě bys klidně mohl mít jeden <form> a uvnitř něj jak kalkulačku, tak vyplnění kontaktu. Každá z těchto částí by měla odesílací tlačítko a podle názvu bys je v PHP rozeznal.
FakeGameCZ
Profil
Tak teda môžeš si to pozrieť na http://***/ .. pod sliderom je tá kalkulačka.

To by s jedným tlačítkom na odoslanie vyriešiť zrejme nešlo.
Moderátor juriad: Obnoven text příspěvku; vyhvězdičkován odkaz
juriad
Profil
Aha, tak to už skoro máš hotové.
Vše dáš do jednoho formu. Druhou část (výsledky a kontakt) budeš samozřejmě generovat až po prvním výpočtu.
Tento form bude mít až dvě odesílací tlačítka (input type="submit"), tak jak je máš teď.

Kromě této změny, uděláš ještě:
1) Zrušíš ty placeholdery v inputech a inputům přidáš normální label. Aby bylo vidět, co to je zač, jakmile uživatel něco vyplní.
2) Do inputu při generování stránky po vypočítání vyplníš hodnoty, které tam uživatel zadal minule (je to pro něj i lepší, že je může upravovat).

Pak odeslání tlačítkem přepočítat bude v PHP znamenat, že kontakt má ignorovat (a jen předvyplnit do inputů, aby o něj uživatel nepřišel, když už si dal tu práci s vyplněním).
Odeslání druhým bude znamenat odeslání mailu.
Všimni si, že v obou případech se odešlou vyplněné hodnoty o částkách a době. Tedy i v druhém případě se výsledek přepočítá, ale navíc se pošle mail.

Uvědom si, že je dobrý nápad převyplnit do inputu hodnotu, kterou tam předtím uživatel zadal. Je velice nepravděpodobné, že bude chtít změnit hodnotu nemovitosti. S ostatními dvěma si bude hrát.
FakeGameCZ
Profil
Vyriešil som to, spravil som z toho jeden form a spravil som to s týmto:

value="<?php echo $_POST['vyska_hypoteky'] ?>"

Ďakujem veľmi pekne za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: