2015-10-26 56 views
-1

我試圖讓這個代碼工作,我敢肯定它的一個小錯誤。我需要檢查XML的電子郵件地址,並與用戶在表單上輸入的電子郵件進行匹配。我哪裏錯了?如何檢查在XML中匹配的電子郵件

在我最初輸入到XML之前是否需要清理代碼(它是通過另一種形式完成的)?感謝您給予的任何幫助!

XML:

<?xml version="1.0"?> 
<customers> 
<customer> 
    <custid>1</custid> 
    <firstname>ben</firstname> 
    <lastname>ben1</lastname> 
    <email>[email protected]</email> 
    <password>ben</password> 
    <phone>0200000000</phone> 
</customer> 
</customers> 

HTML &聯JavaScript

<!DOCTYPE html> 
<html> 
<head> 
<title>Existing Customer Login Page</title> 
</head> 
<body> 
<h1>Existing Customer Login Page</h1> 
<fieldset> 
     <form name="myForm" method="post" onsubmit="return loadDoc()"> 
      <legend> 
       Email: <input type='email' name='email' id="email" /> 
       <br><br> 
       Password: <input type='password' name='password' 
       id="password" /> 
       <br><br> 
       <input type='Submit' value='Log In' /> 
      </legend> 
     </form> 
</fieldset> 
<!--Javascript--> 
<script type="text/javascript"> 

function loadDoc() 
{ 
email = document.getElementById('email'); 
password = document.getElementById('password'); 

var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() 
{ 
    if (xhttp.readyState == 4 && xhttp.status == 200) 
    { 
     alert('Connected!'); 
     myFunction(xhttp); 
    } 
} 
xhttp.open("GET", "data/customer.xml", true); 
xhttp.send(); 
} 


function myFunction(xml) 
{ 
var x, i, xmlDoc, txt; 
xmlDoc = xml.responseXML; 
x = xmlDoc.getElementsByTagName("customer"); 
alert(xml.responseXML); 
for (i = 0; i < x.length; i++) 
{ 
    if (x[i].getElementsByTagName("email")[0].childNodes[0].nodeValue 
== document.getElementById('email')) 
    { 
     alert('Success, you have logged in!'); 
     return (true); 
    } 
    alert('Failed to log in'); 
    document.myForm.email.focus(); 
    return false; 
} 
} 

</script> 
</body> 
</html> 
+1

您的客戶密碼是否爲明文,您是否在匹配前下載到客戶端?你知道任何訪問該頁面的人都可以檢查流量並登錄爲你的任何客戶嗎? –

+0

這是一個任務,沒有安全需要。 – Jimmcafairlane

回答

1

也許這樣做,你在找什麼:

如果你改變什麼:

<form name="myForm" method="post" onsubmit="return loadDoc()"> 

<form name="myForm" method="post"> 

而變化:

<input type='Submit' value='Log In' /> 

<input type='Submit' value='Log In' onclick="loadDoc(); return false;"/> 

,然後改變:

== document.getElementById('email')) 

要:

== document.getElementById('email').value) 

也許this page可以給你更多的信息

//編輯爲您的評論

的響應,您可以訪問循環內的其他XML元素,例如像這樣:

function myFunction(xml) { 
    var x, i, xmlDoc, txt; 
    xmlDoc = xml.responseXML; 
    x = xmlDoc.getElementsByTagName("customer"); 
    for (i = 0; i < x.length; i++) { 

     var emailFromXml; 
     var passwordFromXml; 
     var emailFromForm = document.getElementById('email').value; 
     var passwordFromForm = document.getElementById('password').value; 

     if (x[i].getElementsByTagName("email")[0]) { 
      console.log("email: " + email); 
      emailFromXml = x[i].getElementsByTagName("email")[0].childNodes[0].nodeValue; 
     } 
     if (x[i].getElementsByTagName("password")[0]) { 
      passwordFromXml = x[i].getElementsByTagName("password")[0].childNodes[0].nodeValue; 
     } 

     if (emailFromXml == emailFromForm && passwordFromXml == passwordFromForm) { 
      alert('Success, you have logged in as ' + emailFromForm + '!'); 
      return (true); 
     } 
    } 
    alert('Failed to log in'); 
    document.myForm.email.focus(); 
    return false; 
} 
+0

謝謝,我現在看到,onclick效果更好。但是它只查看XML中的第一個條目,我無法查詢其他條目是否匹配? – Jimmcafairlane

+0

當然可以,我已經用代碼示例更新了我的答案。 這個例子是否回答你的問題? –

+0

這使得它更清晰,但不幸的是沒有幫助。在我的XML中,我添加了2個額外的數據集,一個用於約翰,一個用於標記。它們都沒有工作,它似乎只是讀取第一組數據的第一個索引......? – Jimmcafairlane

相關問題