2012-05-10 61 views
-1

這是我昨晚問了一個問題的擴展版本,但有更多的細節。我所有的php文件和js文件都位於我的html頁面的一個名爲js的文件夾中。 我有一個聯繫表單,它將我的購物車的內容郵寄到我的電子郵件並使用php郵件形式輸入。我確認在提交表格:驗證後郵件不發送

<form name="theForm" id="theForm" onsubmit="return validateFormOnSubmit(this)"> 

與此提交按鈕:

<input type=submit name=Submit value=Send style=cursor:pointer/> 

驗證工作,因爲它應該,這裏是代碼(validate.js):

function setSelRange(inputEl, selStart, selEnd) { 
if (inputEl.setSelectionRange) { 
inputEl.focus(); 
inputEl.setSelectionRange(selStart, selEnd); 
} else if (inputEl.createtextRange) { 
var range = inputEl.createtextRange(); 
range.collapse(true); 
range.moveEnd('character', selEnd); 
range.moveStart('character', selStart); 
range.select(); 
} 
} 

window.onload=function(){ 
setSelRange(document.theForm.textbox, 0, 0); 
} 

function validateFormOnSubmit(theForm) { 
var reason = ""; 
reason += validateName(theForm.name); 
reason += validatePhone(theForm.phone); 
reason += validateEmail(theForm.emaile); 

if (reason != "") { 
alert("Some fields need correction:\n" + reason); 
return false; 
} 

simpleCart.checkout() 
} 



function validateEmpty(fld) { 
var error = ""; 

if (fld.value.length == 0) { 
    fld.style.background = '#3399ff'; 
    error = "The required field has not been filled in.\n" 
} else { 
    fld.style.background = 'White'; 
} 
return error; 
} 



function trim(s) 
{ 
return s.replace(/^\s+|\s+$/, ''); 
} 

function validateName(fld) { 
var error = ""; 
var illegalChars = /\W/; // allow letters, numbers, and underscores 

if (fld.value == "") { 
    fld.style.background = '#3399ff'; 
    error = "Please enter a name.\n"; 
} else if ((fld.value.length < 2) || (fld.value.length > 30)) { 
    fld.style.background = '#3399ff'; 
    error = "The nme is too long!\n"; 
} else { 
    fld.style.background = 'White'; 
} 
return error; 
} 

function trim(s) 
{ 
return s.replace(/^\s+|\s+$/, ''); 
} 

function validateEmail(fld) { 
var error=""; 
var tfld = trim(fld.value);      // valu 
trimmed off 
var emailFilter = /^[^@][email protected][^@.]+\.[^@]*\w\w$/ ; 
var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ; 

if (fld.value == "") { 
    fld.style.background = '#3399ff'; 
    error = "Please enter an email address.\n"; 
} else if (!emailFilter.test(tfld)) {    //test email for illegal characters 
    fld.style.background = '#3399ff'; 
    error = "Please enter a valid email address.\n"; 
} else if (fld.value.match(illegalChars)) { 
    fld.style.background = '#3399ff'; 
    error = "The email address contains illegal characters.\n"; 
} else { 
    fld.style.background = 'White'; 
} 
return error; 
} 

function validatePhone(fld) { 
var error = ""; 
var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');  

if (fld.value == "") { 
    error = "Please enter a phone number.\n"; 
    fld.style.background = '#3399ff'; 
} else if (isNaN(parseInt(stripped))) { 
    error = "The phone number can only contain numbers.\n"; 
    fld.style.background = '#3399ff'; 
} else if (!(stripped.length == 10)) { 
    error = "The phone number is the wrong length.  area  code.\n"; 
    fld.style.background = '#3399ff'; 
} 
return error; 
} 

當表格成功驗證時,我正在運行函數simpleCart.checkout():(來自上面的代碼)

if (reason != "") { 
alert("Some fields need correction:\n" + reason); 
return false; 
} 

simpleCart.checkout() 
} 

這裏是simpleCart.js我特林調用函數,(設置爲emailCheckout):

me.checkout = function() { 
    if(me.quantity === 0){ 
     error("Cart is empty"); 
     return; 
    } 
    switch(me.checkoutTo){ 
     case PayPal: 
      me.paypalCheckout(); 
      break; 
     case GoogleCheckout: 
      me.googleCheckout(); 
      break; 
     case Email: 
      me.emailCheckout(); 
      break; 
     default: 
      me.customCheckout(); 
      break; 
    } 
}; 

me.emailCheckout = function() {  

itemsString = ""; 
for(var current in me.items){ 
    var item = me.items[current]; 
    itemsString += item.name + " " + item.quantity + " " + item.price + "\n"; 
} 

var form = document.createElement("form"); 
form.style.display = "none"; 
form.method = "POST"; 
form.action = "js/sendjs.php"; 
form.acceptCharset = "utf-8"; 
form.appendChild(me.createHiddenElement("wsp_key", wsp_key)); 
form.appendChild(me.createHiddenElement("wsp_code", wsp_code)); 
form.appendChild(me.createHiddenElement("textbox", textbox)); 
form.appendChild(me.createHiddenElement("name",name)); 
form.appendChild(me.createHiddenElement("phone",phone)); 
form.appendChild(me.createHiddenElement("emaile",emaile)); 
form.appendChild(me.createHiddenElement("jcitems", itemsString)); 
form.appendChild(me.createHiddenElement("jctotal", me.total)); 
document.body.appendChild(form); 
form.submit(); 
document.body.removeChild(form); 
} 

它臨危車信息,輸入驗證碼和鍵和代碼的形式和行動sendjs.php給它發郵件給我:

(從上面的代碼)

form.action = "js/sendjs.php"; 

如果圖形驗證碼是正確的,將其郵寄給我,重定向到「從-accepted.php」頁面上,如果不是會重定向到一個「形式,rejected.php」頁面(sendjs.php):

<?php 
include_once("wsp_captcha.php"); 

if(WSP_CheckImageCode() != "OK") { 
header('location:/form-rejected.php'); 
die(); 
} 
$to  = '[email protected]'; 
$subject = 'Order Inquiry'; 
$jcitems = " <p><b>ORDER:</b></p><p> " . $_POST['jcitems']."<p/>" .  "<p><b>Total:</b>  $" . $_POST['jctotal']."</p>"; 
$time = date ("h:i A"); 
$date = date ("l, F jS, Y"); 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
$headers .= 'From: [email protected]' . "\r\n" . 
'Reply-To: [email protected]' . "\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
$name = $_POST['name']; 
$phone = $_POST['phone']; 
$emaile = $_POST['emaile']; 
$textbox = $_POST['textbox']; 
$text = "<html><body><p>This form was submitted on Your Web Site on \n $date at\n $time</p><p><b>Message:</b>\n$textbox</p><p><b>Customers Email Address:</b>$emaile</p><p><b>Customers Name:</b> $name </p><p><b>Customers Phone Number:</b> $phone </p></html></body>"; 
$body = $text . $jcitems; 
mail($to, $subject, $body, $headers); 
Header('Location: ../form-accepted.php'); 
?> 

的問題是,經過驗證是不操作sendjs.php並重新加載聯繫頁面。調試器顯示沒有錯誤,並且我通過其他方式測試了simpleCart.checkout,它應該可以工作。對不起,這篇文章的長度,但我很難過,並失去了業務(並試圖讓它工作很多睡眠)沒有這種形式運作。

這裏是頁面的鏈接:

http://www.diysoakwells.com.au/cart.php

有沒有人有什麼建議?我現在不得不彈出一個小時,但我會監視這個帖子,當我回來時,至少在未來的四五個小時內或直到它的固定時間處理這個問題。提前致謝。

傑米

+0

沒有任何人有任何建議嗎? –

+0

測試了sendjs.php(發送郵件)及其罰款。我如何才能讓simpleCart在驗證後採取行動! –

回答

0

在Chrome中我得到這個錯誤:遺漏的類型錯誤:無法讀取的不確定上validate.js財產「文本框」:16

和BTW我被重定向到http://www.diysoakwells.com.au/form-rejected.php,這樣的帖子是確定它似乎。以前它沒有工作,因爲我的購物車是空的

+0

感謝您的評論,將調查 –

+0

確定其工作的一切,但IE瀏覽器 –

+0

它只適用於當我使用'action =「javascript:simpleCart.checkout()調用該函數,但這不適用於IE瀏覽器。 –