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


Kit:28.12.2013 21:50
Ten PHP skript musí být v souboru kontakt.php a musí začínat na 1. řádku souboru.
Kamil:29.12.2013 16:43
Je v souboru kontakt.php, dal jsem to na začátek a stejně nic.
David Hartinger:29.12.2013 16:47
Vždyť tu hlášku nikde nevypisuješ. Jen jsi to bezmyšlenkovitě zkopíroval z tutoriálu.
Kamil:29.12.2013 17:24
I když hlášku uvedu, tak nic se nestane.
<?
mb_internal_encoding("UTF-8");
$hlaska = '';
if ($_POST) // V poli _POST něco je, odeslal se formulář
{
if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['email']) && $_POST['email'] &&
isset($_POST['zprava']) && $_POST['zprava'] &&
isset($_POST['rok']) && $_POST['rok'] == date('Y'))
{
$hlavicka = 'From:' . $_POST['email'];
$hlavicka .= "\nMIME-Version: 1.0\n";
$hlavicka .= "Content-Type: text/html; charset=\"utf-8\"\n";
$adresa = 'saalieri@seznam.cz';
$predmet = 'Nová zpráva z mailformu';
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
if ($uspech)
{
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
}
else
$hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
}
else
$hlaska = 'Formulář není správně vyplněný!';
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta charset="utf-8">
<title>Dacia Logan</title>
<link href="ikona/ikona.ico" rel="shortcut icon" type="image/x-icon" />
<style>
*{margin:0px;padding:0px;font-family:century gothic;}
.header{background:#1b2466;height:18%;}
.menu{float:right;}
.menu li{list-style:none;display:inline;}
a{color:white;padding-left:8px;text-decoration:none;text-shadow:10px 10px 10px black;}
a:hover{text-decoration:underline;}
.napis{color:white;}
img{position:relative;top:-23%;}
.odsazeni{padding-right:10px;}
.napis{position:relative;top:-60%;font-size:40px;text-shadow:10px 10px 10px black;}
.main{margin:0px auto;border:solid white 1px;width:70%;height:100%;overflow:auto;}
.footer{background:#1b2466;height:9%;color:white;text-align:center;}
.devbook a{color:blue;}
</style>
</head>
<body>
<div class="header">
<br>
<br>
<img src="obrazky/logo.png" width="100px" height="100px" alt="Dacia logo" title="Dacia logo">
<span class="napis"> Dacia Logan</span>
<ul class="menu">
<li><a href="index.html">Úvodní</a></li>
<li><a href="technicka.html">Technická data</a></li>
<li><a href="">Logan Pick-up</a></li>
<li><a href="">Fotogalerie</a></li>
<li><a href="">Vaše názory</a></li>
<li><a href="kontakt.php" class="odsazeni">Kontakt</a></li>
</ul>
</div>
</div>
<br>
<div class="main">
<center>
<p>Můžete mne kontaktovat pomocí formuláře níže.</p><br><br>
<?php
if (isset($hlaska)){
echo('<p>' . $hlaska . '</p>');
}
?>
<form action="kontakt.php" method="POST">
<table>
<tr><td>Váše jméno:  </td><td><input type="text" name="jmeno"></td></tr>
<tr><td>Váš email:</td><td><input type="text" name="email"></td></tr>
<tr><td>Aktuální rok</td>
<td><input name="rok" type="number" /></td></tr>
<tr><td>Zpráva:</td><td><textarea name="zprava" cols="70" rows="15"></textarea></td></tr>
<tr><td><input type="submit" value="Odeslat"></td></tr>
</table>
</form>
<br>
Tento formulář je použit ze serveru <a href="devbook.cz" class="devbook">devbook.</a>
</center>
</div>
<div class="footer">
<br>
<!----Počítadlo---->
<!----------------->
</div>
</body>
</html>
done:29.12.2013 17:32
Nebude problém, že ten script ti začíná na <?, měl by začínat na <?php nebo <?= .
Může mi někdo vysvětlit proč proboha používá toto:
if ($_POST) // V poli _POST něco je, odeslal se formulář
{
if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['email']) && $_POST['email'] &&
isset($_POST['zprava']) && $_POST['zprava']
{...
Nejsem v php nováček (expert taky ne),
ale zapsal bych to nějak takto:
<input type='submit' name='odeslat' value='Odeslat'>
if(isset($_POST['odeslat']))
{
if($_POST['jmeno'] != "") // popřípadě !empty($_POST['jmeno'])
{
// nějaký kód
}
}
Pokud já vím tak
if($_POST['jmeno'])
ti zjišťuje jestli je T/F ne jestli je plná. Tím pádem
bude false ne? Možná se pletu a něco jsem přehlédl.
Pavel Mareš:29.12.2013 17:44
On ho tam nemá, chtěl jsem ho tam připsat,
aby bylo vidět co tím myslím.
Kit:29.12.2013 17:48
Jenom mateš lidi. Pak si budu myslet, že se to píše před skript.
V té podmínce bude víc problémů. Bez řádného testu se můžeme jen dohadovat, co bude výsledkem této podmínky - ať původní či opravené.
done:29.12.2013 17:49
Proč by mělo být
if(isset($_POST['odeslat']))
?
Na tlačítko se volá událost ale nemá mít zadanou hodnotu od uživatele.
Možná kdyby byly 2 tlačítka a rozeznávalo by se např. mezi Odeslat a
Smazat. Potom by to bylo na místě, ale takhle to nemá smysl.
ano95:29.12.2013 17:58
Ale nema definovane name teda nic neposiela -> skript skonci pri prvom ife
done:29.12.2013 17:59
Má smysl ho testovat, pokud by tam byly např. 2 tlačítka a měli by hodnotu např. Odeslat a Smazat aby se odlišilo, jaká část scriptu se provede.
ano95:29.12.2013 18:03
Ale POST cita obsah inputu podla name. Lenže teraz je prázdny lebo ten button nema name.
Kamil:29.12.2013 18:03
Tlačítko s hodnotou submit má mít i name? to si myslim,že ten problém
neni
done:29.12.2013 18:08
Pokud myslíš ten původní kód od Salieriho, ale já myslím ten od Pavla Mareše.
ano95:29.12.2013 18:10
Ano, myslím ten od Salieriho.
Keby to tam bolo tak by to išlo.
ano95:29.12.2013 18:13
Daj na ten submit name="odeslat" a pojde to.
EDIT: Vastne nie, tam je nieco ine. Pomýlil ma kód od Pavel Mareš
nebolo by lepšie naučiť sa HTML5 ???
vymazal som niekoľko zbytočností ako
<br/> alebo </div> ktoré s ničím nesúviseli
taktiež   by malo končiť ; tj. ale bolo by lepšie používať css
štýl na zarovnanie.
môžeš to rozdeliť na 2 súbory, html súbor v ktorom budeš mať
formulár, a php súbor ktorý ti formulár spracuje
toto je napr. kontakt.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta charset="utf-8">
<title>Dacia Logan</title>
<link href="ikona/ikona.ico" rel="shortcut icon" type="image/x-icon" />
<style>
<!-- tvoj CSS štýl -->
</style>
</head>
<body>
<div class="header">
<!-- nejaky kod v hlavičke -->
</div>
<div class="main">
<center>
<p>Můžete mne kontaktovat pomocí formuláře níže.</p><br><br>
<form action="kontakt.php" method="POST">
<!-- action="kontakt.php" preto, lebo práve jemu budeme odosielať dáta z formuláru -->
<table>
<tr><td>Váše jméno:  </td><td><input type="text" name="jmeno"></td></tr>
<tr><td>Váš email:</td><td><input type="text" name="email"></td></tr>
<tr><td>Zpráva:</td><td><textarea name="zprava" cols="70" rows="15"></textarea></td></tr>
<tr><td><input type="submit" value="Odeslat"></td></tr>
</table>
</form>
<br>
Tento formulář je použit ze serveru <a href="devbook.cz" class="devbook">devbook.</a>
</center>
</div>
<div class="footer">
<!-- nejaky kod v pätičke -->
</div>
</body>
</html>
a toto je napr. kontakt.php na ktorý sa budú posielať dáta
<?php
$hlaska = '';
if ($_POST) // V poli _POST něco je, odeslal se formulář
{
if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['email']) && $_POST['email'] &&
isset($_POST['zprava']) && $_POST['zprava'])
//tu bola chyba, nebola ukončená if() podmienka znakom )
{
$hlavicka = 'From:' . $_POST['email'];
$adresa = 'saalieri@seznam.cz';
$predmet = 'Nová zpráva z webu';
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
if ($uspech)
{
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
}
else
$hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
}
else
$hlaska = 'Formulář není správně vyplněný!';
}
?>
je dobré začínať <?php namiesto <?
ak by si to chcel dať všetko do jednoho súboru:
súbor musí mať koncovku .php! ale to snáď viete
<?php
$hlaska = ''; //hlaska ak by sa nič nespravilo, aby nám pri výpise premennej $hlaska nevypísalo chybu že nie je definovaná premenná
if ($_POST) // V poli _POST něco je, odeslal se formulář
{
if (isset($_POST['jmeno']) && $_POST['jmeno'] &&
isset($_POST['email']) && $_POST['email'] &&
isset($_POST['zprava']) && $_POST['zprava'])
//tu bola chyba, nebola ukončená if() podmienka znakom )
{
$hlavicka = 'From:' . $_POST['email'];
$adresa = 'saalieri@seznam.cz';
$predmet = 'Nová zpráva z webu';
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
if ($uspech)
{
$hlaska = 'Email byl úspěšně odeslán, brzy vám odpovíme.';
}
else
$hlaska = 'Email se nepodařilo odeslat. Zkontrolujte adresu.';
}
else
$hlaska = 'Formulář není správně vyplněný!';
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta charset="utf-8">
<title>Dacia Logan</title>
<link href="ikona/ikona.ico" rel="shortcut icon" type="image/x-icon" />
<style>
<!-- tvoj CSS štýl -->
</style>
</head>
<body>
<div class="header">
<!-- nejaky kod v hlavičke -->
</div>
<div class="main">
<center>
<p>Můžete mne kontaktovat pomocí formuláře níže.</p><br><br>
<form method="POST">
<!-- action="" nedávame preto, lebo práve budeme odosielať dáta z formuláru na rovnakú stránku z akej sme to odoslali -->
<table>
<tr><td>Váše jméno:  </td><td><input type="text" name="jmeno"></td></tr>
<tr><td>Váš email:</td><td><input type="text" name="email"></td></tr>
<tr><td>Zpráva:</td><td><textarea name="zprava" cols="70" rows="15"></textarea></td></tr>
<tr><td><input type="submit" value="Odeslat"></td></tr>
</table>
</form>
<!-- napr. tu vypíšeme hlášku o odoslaní mailu -->
<?php echo $hlaska; ?>
<br>
Tento formulář je použit ze serveru <a href="devbook.cz" class="devbook">devbook.</a>
</center>
</div>
<div class="footer">
<!-- nejaky kod v pätičke -->
</div>
</body>
</html>
snad som pomohol a snad nie som odveci a snad som nevytvoril nejaké dezinformácie
done:29.12.2013 18:34
Myslím, že pokud by to měl ve 2 souborech, čili v externím php souboru logiku a výstup v HTML, tak by $hlaska musela být SESSION, např. $_SESSION['hlaska'] = "Odesláno".
ano95:29.12.2013 18:34
Inač tam kam si napísal že tam bola chyba, tak tam už ) bola. kukni si
počet zátvoriek
Matúš Petrofčík:29.12.2013 18:43
ano95: ja som skopíroval ten prvý kód, nie ten druhý
quill: na to som zabudol :[
Salieri: ja som to na svojej stránke vyriešil takto:
<?php
if((isset($_POST['email']))&&(isset($_POST['message']))&&(!isset($_POST['robot']))){
if(isset($_POST['name'])){$name = $_POST['name'];}else{$name = 'Unknown';}
$email = $_POST['email'];
$message = $_POST['message'];
$mail_to = 'mojemail@server.ks';
$subject = 'Message from a site visitor: '.$name;
$body_message = 'From: '.$name."\n";
$body_message .= 'E-mail: '.$email."\n";
$body_message .= 'Message: '.$message;
$headers = 'From: '.$email."\r\n";
$headers .= 'Reply-To: '.$email."\r\n";
$mail_status=mail($mail_to,$subject,$body_message,$headers);
if($mail_status){
echo('<script language="javascript" type="text/javascript">alert(\'Thank you for the message!\');</script>');
}else{
echo('<script language="javascript" type="text/javascript">alert(\'Message sending failed.\');</script>');
}
}
?>
ano95:29.12.2013 18:49
Zdroj: http://www.php.net/…end-mail.php
Oddelenie headerov sa robí pomocou \r\n ale ty tam máš \n:
<code>$hlavicka = 'From:' . $_POST['email'];
$hlavicka .= "\nMIME-Version: 1.0\n";
$hlavicka .= "Content-Type: text/html;
charset=\"utf-8\"\n";</code>
Malo by to byť takto:
<code>$hlavicka = 'From:' . $_POST['email'];
$hlavicka .= "\r\nMIME-Version: 1.0\r\n";
$hlavicka .= "Content-Type: text/html;
charset=\"utf-8\"\r\n";</code>
ano95:29.12.2013 19:00
Díky. Ale to tam už bolo. Našiel si dalšiu chybu. Škoda že to už
nemôžem upraviť
Zdravím,
omlouvám se za malé zdržení....
Nyní mi to hlásí hlášku tuto a to opravdu nevím co s tím....
) Warning: mb_send_mail() [<a href='function.mb-send-mail'>function.mb-send-mail</a>]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\Dacia - xxx\kontakt.php on line 16
$uspech = mb_send_mail($adresa, $predmet, $_POST['zprava'], $hlavicka);
Matúš Petrofčík:31.12.2013 17:11
ak to skusas na localhoste, tak ti to nemusí fungovať, skús to dať na hosting a tak vyskúšať
mne na localhoste maily posielat nejde, ale na hostingu je vsetko v pohode. predpokladám že nie je nainštalovaný mail server, ale týmto tvrdením si nie som istý
mkub:31.12.2013 20:55
PHP odosiela maily pomocou mailing serveru, aj preto niektore funkcie PHP nefunguju, ale teoreticky by sa dal z PHP urobit aj mail server, ked sa pouziju funkcie na pracu s protokolmi smtp a pop (resp. pop3) a potom uz ten mail server asi nebude potrebny
mkub:1.1.2014 0:23
niekedy treba robit aj zlozitejsim, lebo jednoduhsie veci nie vzdy funguju
spolahlivo...
pokial napr. vytvaras portal, kde by si potreboval aj mail server a nemal by si
ho v PC nainstalovany, musel by si ho bud doinstalovat a nastavit, alebo
posielat maily pomocou SMTP a POP (resp. POP3) funkcii, inak to nejde
a dalsia moznost je vyvijat web na hostingu, kde maju aj mail server, ale s obmedzenym mail adries a aliasov (casto iba jednu adresu a k nej niekolko aliasov), ale na zakladny kontakt to staci
zaujimalo by ma za čo som dostal i--
minuskari, nainstalujte si na lokalhost LAMP, resp. WAMP, ci XAMPP a skuste bez nastaveneho mailservera posielat maily tymito funkciami,ako je napr. mail(), ci mb_send_mail() a uvidite, realitu posielania pomocou tychto funkcii...
neodoslete nic, aj keby ste neviem co robili! tieto funkcie totiz pripravuju spravu pre skutocny SMTP server, ktory odosle spravu
Zobrazeno 43 zpráv z 43.