2011-06-29 35 views
8

Tôi tìm thấy mã này trong W3Schools. Đó là về xác nhận biểu mẫu với Javascript.xác thực biểu mẫu bằng javascript đến php

Khi định dạng thư sai của người dùng, cảnh báo sẽ xuất hiện.

Khi tôi kiểm tra mã tôi thấy trên biểu mẫu onsubmit="return validateForm();, hàm trả về sai trong trường hợp lỗi.

Vì vậy, câu hỏi của tôi là làm thế nào để có được giá trị boolean từ javascript để sử dụng nó trong PHP để viết thông báo lỗi thay vì sử dụng hộp thư.

Đây là mã của tôi:

<html> 
<head> 
    <script type="text/javascript"> 
    function validateForm() 
    { 
    var x=document.forms["myForm"]["email"].value 
    var atpos=x.indexOf("@"); 
    var dotpos=x.lastIndexOf("."); 
    if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
     { 
     alert("Not a valid e-mail address"); 
     return false; 
     } 
    } 
    </script> 
    </head> 

    <body> 
    <form name="myForm" action="demo_form.asp" onsubmit="return validateForm();" method="post"> 
    Email: <input type="text" name="email"> 
    <input type="submit" value="Submit"> 
    </form> 
</body> 

</html> 

Cảm ơn trước.

Ali

+3

W3Schools không đáng tin cậy: [Xem W3Fools] (http://w3fools.com/) – mc10

Trả lời

7

Bạn không thể nhận giá trị boolean từ javascript. Những gì bạn cần làm là có lỗi div sẵn sàng trước. Một cái gì đó như thế này:

<body> 
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm();" method="post"> 
Email: <input type="text" name="email"> 
<div id="error"></div> 
<input type="submit" value="Submit"> 
</form> 

Thêm css vào nó để ẩn. Sau đó, trong biểu mẫu xác thực của bạn, hãy sử dụng javascript để thay đổi HTML của div lỗi.

if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
    { 
     document.getElementById("error").innerHTML="Not a valid e-mail address"; 
     return false; 
    } 

"return false;" một phần là nói với biểu mẫu không gửi. Như đã đề cập trong các câu trả lời khác PHP và Javascript không giao diện. PHP là phía máy chủ, Javascript là phía khách hàng. Họ không nói chuyện với nhau. Họ có thể, tuy nhiên, cả hai sửa đổi HTML. Chỉ cần nhớ, Javascript luôn chạy trong trình duyệt. Vì vậy, nếu nó cần gửi những thứ tới PHP, bạn cần sử dụng AJAX để gọi một kịch bản PHP phía máy chủ và gửi thông tin theo cách đó.Hầu hết thời gian, tuy nhiên, khi bạn đang sử dụng Javascript, nó không phải là PHP cần thông tin, đó là người dùng. Vì vậy, bằng cách sử dụng Javascript để sửa đổi HTML hiện các trick.

3

Ngoài việc sử dụng AJAX, bạn không thể. Hãy nhớ rằng PHP là một ngôn ngữ phía máy chủ và JavaScript đó chạy trên máy khách trong trình duyệt. Vào thời điểm PHP hiển thị trang trong trình duyệt, nó đã được xử lý xong. Những gì bạn cần là hai lớp xác thực - xác thực JavaScript VÀ xác thực PHP. Tại sao? Bởi vì JavaScript có thể được tắt trong trình duyệt. Điều đó làm cho nó vô dụng như một biện pháp an ninh. Xác thực JavaScript chỉ nên được sử dụng như một cách để nâng cao trải nghiệm của người dùng.

Cuối cùng, đừng đến w3schools. Rất nhiều thông tin của nó không hợp lệ (xem trang web http://www.w3fools.com để biết thêm thông tin). Thay vào đó, hãy sử dụng Mạng nhà phát triển của Mozilla: https://developer.mozilla.org/en-US/learn/

3

Điều đơn giản nhất là làm hiển thị trong hàm. Thay thế cảnh báo bằng một cái gì đó như: -

document.getElementById ("errormessage"). InnerHTML = "Không hợp lệ địa chỉ e-mail";

Bạn cũng sẽ cần DIV trong HTML của mình có id không đúng.

6
if (..) 
{ 
    document.getElementByID('error').InnerHTML = "Not a valid e-mail address!"; 
    return false; 
} 
else 
{ 
    document.getElementByID('error').InnerHTML = ""; 
} 

và add đánh dấu của bạn:

<span id="error"></span> 
3

tôi sẽ không sử dụng PHP cho việc này.

<html> 
<head> 
<script type="text/javascript"> 
function validateForm() 
{ 
var x=document.forms["myForm"]["email"].value 
var atpos=x.indexOf("@"); 
var dotpos=x.lastIndexOf("."); 
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) 
    { 
    document.getElementById('errorMsg').style.display = 'block'; 
    return false; 
    } 
} 
</script> 
</head> 

<body> 
<form name="myForm" action="demo_form.asp" onsubmit="return validateForm();" method="post"> 
Email: <input type="text" name="email"> 
<input type="submit" value="Submit"> 
<div id="errorMsg" style="display: none;">Not valid email</div> 
</form> 
</body> 

</html> 

Bằng cách này bạn sẽ không phải quay lại máy chủ của mình.

Các vấn đề liên quan