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.
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zkus tu hlavičku nějak takhle:
$headers = 'From: '. $_POST['name'] .' <'. $_POST['email'] .'>';
Zkusil jsem a přestal se zobrazovat email odesílatele (předtím to bylo něco ve stylu "jmeno_domeny@poskytovatel.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ě..
Pouzivam https://github.com/…/swiftmailer a doporucuji
A jak to souvisí s tím, že dotyčný neumí spojit 2 stringy?
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
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"
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);
Moc děkuji, už to všechno funguje. Pořádně nechápu jak, ale snad to časem pochopím.
Jeste si uprav ten subjekt nebo ti nebudou chodit dobre ceske znaky :
$subject = '=?utf-8?B?' . base64_encode($_POST['subject']) . '?=';
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ář.
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'];
?>
Zobrazeno 12 zpráv z 12.