Autor | Zpráva | ||
---|---|---|---|
goatee Profil |
#1 · Zasláno: 28. 5. 2012, 22:52:41
Dobrý den,
upravil jsem si formulář na odesílání e-mailu, který má pomocí tagu <select> a <option> odesílat mail na různé e-mailové adresy v závislosti na tom, co si návštěvník vybere z nabídky. <form id="contactform" action="/contact.php" method="post"> <ul> <li>Zvolte <select name="volba"> <option value="email1@neco.cz"> volba č. 1 </option> <option value="email2@neco.cz"> volba č. 2 </option> </select> </li> <li><label for="name">Jméno </label> <input id="name" class="text" type="text" name="name" /></li> <li><label for="email">Váš e-mail </label> <input id="email" class="text" type="text" name="email" /></li> <li><label for="message">Zpráva </label> <textarea id="message" name="message" rows="6" cols="50"></textarea></li> <li class="buttons"><input id="imageField" class="send" type="image" name="imageField" src="images/send.gif" /></li> </ul> </form> Tady je soubor contact.php: <?php if(!$_POST) exit; $email = $_POST['email']; //$error[] = preg_match('/\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i', $_POST['email']) ? '' : 'INVALID EMAIL ADDRESS'; if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$email )){ $error.="Invalid email address entered"; $errors=1; } if($errors==1) echo $error; else{ $values = array ('name','email','message'); $required = array('name','email','message'); $your_email = $_POST['volba']; $email_subject = "Zpráva z webového formuláře"; $email_content = "new message:\n"; foreach($values as $key => $value){ if(in_array($value,$required)){ if ($key != 'subject' && $key != 'company') { if( empty($_POST[$value]) ) { echo 'PLEASE FILL IN REQUIRED FIELDS'; exit; } } $email_content .= $value.': '.$_POST[$value]."\n"; } } $service = "webform@neco.cz"; $header = "Return-Path: $service\n" ."From: $service\n" ."Errors-To: $service\n" ."Reply-To: $email\n" ."X-Mailer: PHP/".phpversion()."\n" ."MIME-Version: 1.0\n" ."Content-Transfer-Encoding: 8bit\n" ."Content-type: text/plain; charset=UTF-8\n"; $email_subject = "=?utf-8?B?".base64_encode($email_subject)."?="; if(@mail($your_email,$email_subject,$email_content,$header)) { echo 'Zpráva byla odeslána.'; } else { echo 'ERROR!'; } } ?> Takto formulář bez problémů funguje. Když však do hlavičky html přidám javascript, díky kterému se po odeslání formulář "schová" a vypíše se zpráva o úspěšném odeslání, žádný e-mail už nepřijde. V chybovém logu na serveru se objeví: "PHP Notice: Undefined index: druh in /var/www/web53/web/contact.php on line 18 ..." Prosím o radu, jak to rozchodit (bez javascriptu se vypíše echo jen na prázdné, bílé stránce). Javascript: <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript">// <![CDATA[ jQuery(document).ready(function(){ $('#contactform').submit(function(){ var action = $(this).attr('action'); $.post(action, { name: $('#name').val(), email: $('#email').val(), company: $('#company').val(), subject: $('#subject').val(), message: $('#message').val() }, function(data){ $('#contactform #submit').attr('disabled',''); $('.response').remove(); $('#contactform').before('<p class="response">'+data+'</p>'); $('.response').slideDown(); if(data=='Zpráva byla odeslána.') $('#contactform').slideUp(); } ); return false; }); }); // ]]></script> |
||
peta Profil |
Odkaz na ukazku a puvodni zdrojovy kod?
Ve vypsanem kodu neni nikde php kod s pole['druh']. Takze si dej vyhledavani textu, napis tam druh a podivej se, co tam mas napsane. Php pise, ze je chyba na radku 18. Cili problem se javascriptu nejspis vubec netyka. PHP Notice: Undefined index: druh in /var/www/web53/web/contact.php on line 18 ... = soubor: contact.php = radek: 18 = index pole: druh (cili v php bude zapis neco jako $pole['druh']) Zadny isset nebo neco, co by osetrilo pripad, kdyz ten index nevznikne z predchoziho kodu. Pravdepodobne nebyl poslan input pres $_POST. Co se tyce mailu, tak na localhost nemas spusteny mail sever, jestli to spoustis na lokalnim php. Takze z hlediska php odeslani mailu probehne v poradku, preda udaje mimo php. Jenze k funkci mail nema system (tve windows) pridruzeny zadny program a tim to pro nej dal konci. |
||
goatee Profil |
Omlouvám se, upravoval jsem kód a změnil jsem pole z ['druh'] na ['volba'], chyba je však jen v tomto postu.
Chyba se tedy týká tohoto řádku: $your_email = $_POST['volba']; Pokud odkomentuju javascript, odesílání funguje. S javascriptem to běží jedině v případě, že $your_email = $_POST['volba']; nahradím $your_email = nejaky.konkretni@mail.cz; - což bylo v původním kódu. To je jediná zásadní věc, kterou jsem měnil + rolovací nabídka v html formuláři pomocí <select>.
Web neběží na localhost, ale na hostingu, který má mail server funkční. Ukázka zde |
||
Davex Profil |
#4 · Zasláno: 30. 5. 2012, 00:10:45
goatee:
Neumím jQuery a nevím, zda ten JavaScript chápu správně a jestli plně nahrazuje normální odeslání formuláře. Chápu to tak, že je v něm definováno, že se mají odeslat pouze hodnoty z polí #name, #email, #company, #subject a #message. A u toho netuším, proč by se měly odeslat pole #company a #subject, když ve formuláři nejsou. Možná je chyba ještě někde jinde, ale zkus si toto ještě jednou projít. |
||
peta Profil |
<?php //$your_email = $_POST['volba']; //nahradím $your_email = nejaky.konkretni@mail.cz; echo ">$your_email<"; ?> $.post(action, { name: $('#name').val(), email: $('#email').val(), company: $('#company').val(), subject: $('#subject').val(), message: $('#message').val() }, |
||
goatee Profil |
#6 · Zasláno: 31. 5. 2012, 11:42:03
Musím se přiznat, že tohle je bohužel nad mé možnosti...
Vyřešil jsem to nakonec jiným formulářem, v každém případě vám děkuju za čas. |
||
Časová prodleva: 12 let
|
0