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

Člen

Zobrazeno 43 zpráv z 43.
//= 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.
Ten PHP skript musí být v souboru kontakt.php a musí začínat na 1. řádku souboru.
Je v souboru kontakt.php, dal jsem to na začátek a stejně nic.
Vždyť tu hlášku nikde nevypisuješ. Jen jsi to bezmyšlenkovitě zkopíroval z tutoriálu.
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 = '[email protected]';
$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>
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.
On ho tam nemá, chtěl jsem ho tam připsat,
aby bylo vidět co tím myslím.
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é.
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.
Ale nema definovane name teda nic neposiela -> skript skonci pri prvom ife
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.
Ale POST cita obsah inputu podla name. Lenže teraz je prázdny lebo ten button nema name.
Tlačítko s hodnotou submit má mít i name? to si myslim,že ten problém
neni
Pokud myslíš ten původní kód od Salieriho, ale já myslím ten od Pavla Mareše.
Ano, myslím ten od Salieriho.
Keby to tam bolo tak by to išlo.
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 = '[email protected]';
$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 = '[email protected]';
$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
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".
Inač tam kam si napísal že tam bola chyba, tak tam už ) bola. kukni si
počet zátvoriek
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 = '[email protected]';
$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>');
}
}
?>
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>
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);
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ý
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
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.