NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nefunkční php script pro Emailový formulář.

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jakub Bezr
Člen
Avatar
Jakub Bezr:29.5.2017 12:12

Ahoj lidi, mám problém s php scriptem v kontkatním formuláři. Emaily mi chodí, ale nevím, jak udělat, aby se v emailu zobrazoval email a jméno odesílatele. Zobrazuje se mi pouze text zprávy a předmět.

<?php
mb_internal_encoding("UTF-8");
$headers = $_POST['email'];
$headers .= "\nMIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset=\"utf-8\"\n";
$to = '[email protected]';
$subject = $_POST['subject'];
$name = $_POST['name'];
$message = $_POST['message'];
mail($to, $subject, $message, $headers);

?>
<html><head>
<meta http-equiv="refresh" content="0; url=index.html">
<title>Přesměrování...</title>
</head><body></body></html>
 
Odpovědět
29.5.2017 12:12
Avatar
Odpovídá na Jakub Bezr
Neaktivní uživatel:29.5.2017 12:28

Zkus tu hlavičku nějak takhle:

$headers = 'From: '. $_POST['name'] .' <'. $_POST['email'] .'>';
Nahoru Odpovědět
29.5.2017 12:28
Neaktivní uživatelský účet
Avatar
Jakub Bezr
Člen
Avatar
Jakub Bezr:29.5.2017 12:45

Zkusil jsem a přestal se zobrazovat email odesílatele (předtím to bylo něco ve stylu "jmeno_domeny@pos­kytovatel.cz"). V těle emailu pořád pouze zpráva a nic víc.. Vážně netuším, čím by to mohlo být, zkoušel jsem hledat na internetu více php email formulářů a všechny skončily vesměs stejně..

 
Nahoru Odpovědět
29.5.2017 12:45
Avatar
Neaktivní uživatel:29.5.2017 13:17

Pouzivam https://github.com/…/swiftmailer a doporucuji :)

Nahoru Odpovědět
29.5.2017 13:17
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:29.5.2017 13:23

A jak to souvisí s tím, že dotyčný neumí spojit 2 stringy?

Nahoru Odpovědět
29.5.2017 13:23
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jakub Bezr
David Hartinger:29.5.2017 13:24

Logicky email přidáš do zprávy, která se ti posílá:

$message = $_POST['email'] . ': ' . $_POST['message'];

EDIT: Jméno připojíš stejně. Případně jestli chceš email i v hlavičce, tady je ukázané jak to udělat - https://www.itnetwork.cz/…ovy-formular

Editováno 29.5.2017 13:35
Nahoru Odpovědět
29.5.2017 13:24
New kid back on the block with a R.I.P
Avatar
Jakub Bezr
Člen
Avatar
Odpovídá na David Hartinger
Jakub Bezr:29.5.2017 14:10

Omlouvám se, Davide, ale jsme v programování nováček. Učím se podle tutoriálů, videí a když narazím na problém, snažím se nejdřív vyhledat řešení. Jenže s tímhle si vážně nevím rady.
Začínám mít tušení, že problém bude někde v html souboru, jenže ho tam také nevidím.
PHP:

<?php
mb_internal_encoding("UTF-8");
$headers .= "\nMIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset=\"utf-8\"\n";
$to = '[email protected]';
$email = $_POST['email'];
$subject = $_POST['subject'];
$name = $_POST['name'];
$message = $_POST['name'] . ':' . $_POST['email'] . ': ' . $_POST['message'];
mail($to, $subject, $message, $headers);

?>
<html><head>
<meta http-equiv="refresh" content="0; url=index.html">
<title>Přesměrování...</title>
</head><body></body></html>

HTML formuláře:

<form id="contact-form" action="mailform.php" method="post">
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="name">
                                Jméno</label>
                            <input type="text" class="form-control" id="name" placeholder="Vaše jméno" required="required" name="jmeno"/>
                        </div>
                        <div class="form-group">
                            <label for="email">
                                Email</label>
                            <div class="input-group">
                                <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span>
                                </span>
                                <input type="email" name="email" class="form-control" id="email" placeholder="Napište email" required="required" /></div>
                        </div>
                        <div class="form-group">
                            <label for="subject">
                                Předmět</label>
                            <select id="subject" name="subject" class="form-control" required="required">
                                <option value="na" selected="">Vyberte:</option>
                                <option value="Obecne">Obecné</option>
                                <option value="Obchodni">Obchodní</option>
                                <option value="Media">Média</option>
                            </select>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="message">
                                Text zprávy</label>
                            <textarea name="message" id="message" class="form-control" rows="9" cols="25" required="required"
                                placeholder="Text zprávy"></textarea>
                        </div>
                    </div>
                    <div class="col-md-12">
                        <button type="submit" class="btn btn-skin pull-right" id="btnContactUs">
                            Odeslat</button>
                    </div>
                </div>
                </form>

V emailu chodí předmět a text zprávy vypadá takto ":: text"

 
Nahoru Odpovědět
29.5.2017 14:10
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Jakub Bezr
David Hartinger:29.5.2017 14:41

Proč nefunguje jméno mi dává smysl, jelikož jsi použil klíč "name" a v HTML kódu máš "jmeno". Proč nejde email je dost divné. Můžeš si zkusit vypsat co se odeslalo pomocí následujícího kódu (a vypni si pod tím to přesměrování):

print_r($_POST);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.5.2017 14:41
New kid back on the block with a R.I.P
Avatar
Jakub Bezr
Člen
Avatar
Odpovídá na David Hartinger
Jakub Bezr:29.5.2017 15:11

Moc děkuji, už to všechno funguje. Pořádně nechápu jak, ale snad to časem pochopím.

 
Nahoru Odpovědět
29.5.2017 15:11
Avatar
Jiří Fencl
Člen
Avatar
Jiří Fencl:29.5.2017 15:22

Jeste si uprav ten subjekt nebo ti nebudou chodit dobre ceske znaky :

$subject = '=?utf-8?B?' . base64_encode($_POST['subject']) . '?=';
 
Nahoru Odpovědět
29.5.2017 15:22
Avatar
Jakub Bezr
Člen
Avatar
Odpovídá na Jiří Fencl
Jakub Bezr:30.5.2017 13:53

Subject mam formou výběru ze 3 možností, ale děkuji, napíšu si to, až budu dělat nějaký další formulář.

 
Nahoru Odpovědět
30.5.2017 13:53
Avatar
Odpovídá na Jakub Bezr
Michal Šmahel:31.5.2017 15:13

Co konkrétně nechápeš?? Přečti si zdejší tutoriály, je tu vše pěkně popsané.

Toho nefungovalo kvůli tomu, že jsi z POST vytahoval data ze špatného klíče. Funguje to takto jednoduše:

<input name="klic" />

<?php
    // hodnota name="" je klíčem u superglobálního pole $_POST
    $hodnota = $_POST['klic'];
?>
Nahoru Odpovědět
31.5.2017 15:13
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
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 12 zpráv z 12.