| 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: 14 let
|
|||
0