Diskuze: úprava kontaktního formuláře

PHP PHP úprava kontaktního formuláře American English version English version

Avatar
tbartolen
Člen
Avatar
tbartolen:

Ahoj, upravil jsem si kontaktní formulář, aby lidi museli vyplňovat i číslo, ale jelikož jsem lamér, potřeboval bych to zhodnotit, a nastal jeden problém. Když teď kliknu na odeslat zprávu, tak mi vyskočí error 404...nemuže to být tim, že jsem trošku laboroval s projektem v netbeans a překopíroval všechny soubory do nového projektu? Jak to případně opravit? NEbo mám chybu v kodu? Děkuju za rady

<?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'] &&//Podmínka řiká že musí být vyplněný formulář
            isset($_POST['email']) && $_POST['email'] &&
            isset($_POST['zprava']) && $_POST['zprava'] &&
            isset($_POST['cislo']) && $_POST['cislo'] &&
            isset($_POST['rok']) && $_POST['rok'] == date('Y'))
        {
            $hlavicka = 'From:' . $_POST['email']; //Nastavení že se odesílá email
            $hlavicka .= "\nMIME-Version: 1.0\n"; //Nemám se vzrušovat
            $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";//Kodování asi
            $adresa = 'vas@email.cz';//Email kam se odesilá
            $predmet = 'Nová zpráva z mailformu';//Předmět odeslaného emailu abych v tom neměl bordel
            $uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu
            if ($uspech)//Podmínka která hlásí uživateli jestli ano nebo ne
            {
                $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ý!';
    }

?>

A tady HTML část

<?php
           if ($hlaska)  //funkce vypsani hlasky
               echo('<p>' . htmlspecialchars($hlaska) . '</p>');//ochrana proti XSS utoku

           $jmeno = (isset($_POST['jmeno'])) ? $_POST['jmeno'] : '';//Nutnost vyplneni formularu
           $email = (isset($_POST['email'])) ? $_POST['email'] : '';
           $zprava = (isset($_POST['zprava'])) ? $_POST['zprava'] : '';
           $cislo = (isset($_POST['cislo'])) ? $_POST['cislo'] : '';
       ?>

       <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>
               <tr>
                   <td>Telefonní číslo</td>
                   <td><input name="cislo" type="number" /></td>
               </tr>

           </table>
           <!--<div class="zprava">-->
           <table>
               <tr>
                   <td>Vaše Zpráva</td>
                   <td><textarea name="zprava"><?= htmlspecialchars($zprava) ?></textarea></td>
               </tr>
           </table>

           <br />

           <input type="submit" value="Odeslat" />
            </div>
       </form>
Odpovědět 31.7.2015 12:08
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

404 je chyba, že daná stránka neexistuje. Jak se tedy jmenuje tvůj soubor s kontaktem? mailform.php?

Nahoru Odpovědět 31.7.2015 12:11
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

Takovej soubor nemám...mám to celé nasypané v index.php se zbytkem stránky, z návodu jsem to pochopil že to tak má být? O_o

Editováno 31.7.2015 12:21
Nahoru Odpovědět 31.7.2015 12:20
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Nemá. Tam se tvoří celá stránka jenom v mailform.php. Vytvoř si tedy soubor mailform.php a tam dej svoje PHP včetně HTML. Pak by to už mělo jít. :)

Nahoru Odpovědět 31.7.2015 12:24
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

aha !!! Iž jsem si toho všimnul, měl jsem tam mailform misto index.php....to je tak když si to nepřečtu po zkopírování =) nicméně už je mi to jasný proč a jak...ještě jsem se chtěl zeptat na jednu věc

$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu

Tenhle řádek mi řiká, když jsou vyplněný tyhle položky, tak se email odešle, neměl bych tam přidat ještě teda takhle?:

$uspech = mb_send_mail($adresa, $predmet, $cislo, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu

A s tim, že se mi teda do emailu odešle adresa, předmět a číslo toho danýho člověka?

Nahoru Odpovědět 31.7.2015 12:27
Navštiv www.fb.com/skkelticz
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

No moment, ale jak potom tu stránku zakomponuju do svý index stránky, kde to chci mít zobrazený, když ten mailform budu mít někde uplně jinde? Já jsem ted přepsal tohle:

if ($uspech)//Podmínka která hlásí uživateli jestli ano nebo ne
           {
               $hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
               header('Location: index.php?uspech=ano');
               exit;
           }

A funguje to ...moc se mi nechce dělat nějaký obstrukce...ale jestli je to takhle napsaný špatně...? 8-|

Nahoru Odpovědět 31.7.2015 12:29
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Ne. Pěkně si to probereme. :)

$adresa E-mail, kam se to má odeslat
$predmet Předmět E-mailu
$_POST['zprava'] Zpráva E-mailu
$hlavicka Nastavení E-mailu

Tam posíláš nastavené věci. Pokud tedy chceš poslat i číslo uživatele, můžeš to udělat takto:

$uspech = mb_send_mail($adresa, $predmet, "Číslo: " . $_POST['cislo'] . "<br />" . $_POST['zprava'], $hlavicka);

Spojíš tedy jenom řetězce. Ale na tu zprávu by bylo si už lepší udělat proměnnou a tam spojovat řetězce. Tu proměnnou by jsi pak poslal.

Nahoru Odpovědět 31.7.2015 12:31
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Pokud to máš v tom indexu, nech to tak. Nevěděl jsem, jak to tam máš udělaný. :)
Doporučoval bych ale si udělat na kontakt vlastní stránku (takže např. mailform.php). Ale to je na tobě.

Nahoru Odpovědět 31.7.2015 12:33
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

Aha, takže to se mi neodešle ani ten email, který mi tam ten člověk složitě vyplňuje, jestl itomu dobře rozumim, a měl bych udělat finální verzi asi takhle :

$uspech = mb_send_mail($adresa, $predmet,  $_POST['cislo'], $_POST['zprava'],  $_POST['email'] $hlavicka);

Proč si tam dával to odřádkování ?

Nahoru Odpovědět 31.7.2015 12:45
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

To máš zase špatně. :D
mb_send_mail() má jenom 4 parametry. Já jsem předtím spojoval řetězce, ty předáváš parametry funkci.
Promiň, jestli je to nesrozumitelné, lépe to nedokážu popsat. Mrkni na tu tabulku, co jsem ti psal výše. Tyto parametry má funkce mb_send_mail() a ty musíš dodržet. Jenom obsah proměnných může být jiný.

Nahoru Odpovědět 31.7.2015 13:16
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
katrincsak
Člen
Avatar
katrincsak:

Není to náhodou tím, že ti chybí přesměrování formuláře? Respektive "action"?

Ty máš:

<form method="post">

Mělo by být:

<form action="ODKAZ" method="post">

Jestli se teda nepletu, tak bez toho se formulář neodešle a neví. Pakliže se jedná o ten samí soubor, měl by být action="" bez udání odkazu...

 
Nahoru Odpovědět 31.7.2015 13:17
Avatar
IT Man
Redaktor
Avatar
Odpovídá na katrincsak
IT Man:

Atribut action tam být nemusí. :)

Nahoru Odpovědět  +2 31.7.2015 13:19
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

No jo, ale v tomhle návodu...
http://www.itnetwork.cz/…ovy-formular
píše, že by to mělo fungovat tak, že se odešle i ten email, i jméno ...?

Když mám celý ten blok v

<form method="POST">

Tak by se měl odeslat celý ten blok, ne?

Editováno 31.7.2015 13:36
Nahoru Odpovědět 31.7.2015 13:34
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Odešle se jenom ta zpráva ($_POST['zprava']). E-mail se odešle, to máš nastavený v hlavičce a vidíš, od koho ti zpráva přišla. Pokud to číslo chceš odeslat, musíš ho dát do zprávy či předmětu a to spojením řetězců (viz. výše).

Nahoru Odpovědět 31.7.2015 13:39
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

A kdybych to teda přiupravil nějak takhle:

$hlavicka = 'From:' . $_POST['email']; //Nastavení že se odesílá email
$hlavicka = 'From:' . $_POST['cislol'];
$hlavicka .= "\nMIME-Version: 1.0\n"; //Nemám se vzrušovat
$hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";//Kodování asi
Nahoru Odpovědět 31.7.2015 13:44
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Pokud umíš anglicky, from je odkud. Pokud chceš to číslo, spoj řetězce!

$predmet = "E-mail odeslal uživatel s číslem " . $_POST['cislo'];
Nahoru Odpovědět 31.7.2015 13:49
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Fredep
Redaktor
Avatar
Odpovídá na tbartolen
Fredep:

Ne, to nemůžeš, tam patří mail, nikoli telefonní číslo. Pokud ho tam chceš, přidej ho do zprávy, například na konec..

$uspech = mb_send_mail($adresa, $predmet,  $_POST['zprava'] . "<br>==============<br>Tel: " . $_POST['cislo'], $hlavicka);
Nahoru Odpovědět 31.7.2015 13:50
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

Už to asi chápu, rozumim tomu jak k předmětu připnout číslo, ale nevím proč hlavička neumí brát ze dvou míst, asi si to zbytečně komplikuju vymejšlením složitostí

Nahoru Odpovědět 31.7.2015 13:52
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Ty jsi to hlavně předtím přenastavil. :D
Nebo ještě můžeš upravit první řádek hlavičky takto:

$hlavicka = "From:" . $_POST['email'] . " <" . $_POST['cislo'] . ">";

Výsledek: tvuj@email.cz <123456789>
S tímhle si však nejsem jist. Můžeš zkusit.

Nahoru Odpovědět 31.7.2015 14:02
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tbartolen
Člen
Avatar
Odpovídá na IT Man
tbartolen:

Už to chápu, jen pro uplnost, chci tomu rozumět uplně do podrobna, tak si to trošku zrekapituluju, vim že jsem otravnej, ale kdyby si mi do těch popisku mrknul, a připadně mi řekl kde píšu kravinu? Hodně by mi to pomohlo...

Začátek skriptu

$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ář

V tomhle definuju proměnou -hlaska-, v tý proměný je podmínka....pokud dostanu -uspech-, tak se hlaska rovna "'Email byl úspěšně odeslán, brzy vám odpovíme."
Soucasne s tim musi byt neco v poli POST...

Ted pokracovani podminky hlaska

if (isset($_POST['jmeno']) && $_POST['jmeno'] &&//Podmínka řiká že musí být vyplněný formulář
         isset($_POST['email']) && $_POST['email'] &&
         isset($_POST['zprava']) && $_POST['zprava'] &&
         isset($_POST['cislo']) && $_POST['cislo'] &&
         isset($_POST['rok']) && $_POST['rok'] == date('Y'))

Takze tady mi to definuje tu druhou podminku ze zacatku, ze v poli post musí něco být, a zároveň mi to definuje, co tam přesně musí být

Pokračování programu

$hlavicka = 'From:' . $_POST['email']; //Nastavení že se odesílá email
          $hlavicka .= "\nMIME-Version: 1.0\n"; //Nemám se vzrušovat
          $hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";//Kodování asi
          $adresa = 'tbartolen@cz';//Email kam se odesilá
          $predmet = 'Nová zpráva z mailformu';//Předmět odeslaného emailu abych v tom neměl bordel
          $uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka); //Funkce odeslani emailu
          if ($uspech)//Podmínka která hlásí uživateli jestli ano nebo ne

Tady moc nechápu tu hlavičku, potom niz definuju adresu kam se email ma odeslat, predmet, do kterýho si pridam pomoci retezce to číslo, a do promeny uspech dávám funkci mb_send, která obsahuje ty presne dany ctyri polozky...pak dál už definuju jen zprávy co se vypisou v pripade uspechu a neuspechu...

Rozumim tomu tak nějak správně? Nechci bejt jen kopírovač =)

Nahoru Odpovědět 31.7.2015 22:57
Navštiv www.fb.com/skkelticz
Avatar
IT Man
Redaktor
Avatar
Odpovídá na tbartolen
IT Man:

Takže ... začnu taky od začátku. :D

Proměnná $hlaska není podmínka, ale je to pouze zpráva pro uživatele, co se děje apod. Na začátku skriptu se definuje prázdná, jinak by to při výpisu házelo chybu (v tomhle případě notice), že tato proměnná není. Ten GET a POST chápeš správně.

Zase. $hlaska není podmínka, ale je to ta zpráva pro uživatele. Tu podmínku ale chápeš správně. :)

Jak se u hlavičky definuje to From - to je adresa, odkud se ten E-mail odeslal (resp. v E-mailové schránce uvidíš, od koho E-mail je). To kódování chápeš správně. K tomu se tam nastavuje, aby se to zobrazovalo jako HTML dokument. Takže pokud by ti někdo do té zprávy vložil např. tag strong, v E-mailové schránce by se ti to zobrazilo tučně. Ten zbytek chápeš správně. :)

Btw. máš ten E-mail, kam se to má odesílat, napsaný správně?

Nahoru Odpovědět 1.8.2015 9:17
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
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 21 zpráv z 21.