0

簡単なフォーム検証に Javascript を使用しようとしています。この場合、電子メールのテキスト入力があり、電子メールが有効な電子メールではないか、電子メール アドレスが既に使用されている場合にエラーが発生するようにします。有効な電子メール部分は問題なくエラーになっていますが、電子メール アドレスは既に使用されており、常にパスします。

ここに私のスクリプトコードがあります

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
function valemail() 
{
var email = $('input#email').val();
var atpos=email.indexOf("@");
var dotpos=email.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=email.length)
    {
    document.getElementById("email").style.border="3px solid red";
    document.getElementById('email_error').style.display = 'block'; 
    document.getElementById('email_error').innerHTML = 'A valid email address is required';
    } else {
if ($.trim(email) != '') 
{

    $.post('../ajax/registeremail.php', {email: email}, function(data) 
    {
        if ($.trim(data) == 'That email address is already in use. If you have created an account, 
<a href="../login.php">Login</a>') 
        {
            document.getElementById("email").style.border="3px solid red";
            document.getElementById('email_error').style.display = 'block'; 
            $('div#email_error').text(data);
        } else {
            document.getElementById("email").style.border="3px solid #33FF33";
            document.getElementById('email_error').style.display = 'none'; 
        }
    });
   }
}}
 </script>

私の registeremail.php ファイルは単独で動作し、次のとおりです。

<?php
include('../init.php');
//email validation
if (isset($_POST['email']) === true && empty($_POST['email']) === false) {
$email = $_POST['email'];

if (email_exists($email) === true) {
echo('That email address is already in use. If you have created an account, <a>Login</a>');
} else {
echo('Good');
}
?>

実際のテキスト入力とdivコードは

      <input class="input" type="text" tabindex="2" placeholder="Email*" style="height:20px;" name="email"  
id="email" onchange="valemail()">
<div id="email_error"></div>

なぜこれが起こっているのか誰にも分かりますか?本当に困惑しています。

4

2 に答える 2

4

問題は、PHPでエコーするのは

That email address is already in use. If you have created an account, <a>Login</a>

JavaScriptでチェックするのは

That email address is already in use. If you have created an account, <a href="../login.php">Login</a>

つまり、それらは同じではありません...

1(true) または0(false) を返し、JavaScript を使用してテキストを出力することをお勧めします。

if (email_exists($email) === true) {
   echo('0');
} else {
   echo('1');
}

あなたのJavaScriptは次のようになります

if ($.trim(data) == '0') {
    document.getElementById("email").style.border = "3px solid red";
    document.getElementById('email_error').style.display = 'block';
    $('div#email_error').text('That email address is already in use. If you have created an account,<a href="../login.php">Login</a>');
} else {
    document.getElementById("email").style.border = "3px solid #33FF33";
    document.getElementById('email_error').style.display = 'none';
}
于 2013-01-03T15:49:55.793 に答える
0

正確にコピーしていない可能性のある長いエラーメッセージをチェックするのではなく、javascriptロジックを変更して「Good」応答がないことをチェックすることをお勧めします。これに変更します:

$.post('../ajax/registeremail.php', {email: email}, function(data) 
{
    if ($.trim(data) != 'Good') 
    {
       ...

これにより、エラーメッセージが正確に一致しないという問題を防ぐだけでなく、エラー検出コードを変更せずに、そのエラーメッセージを変更したり、他のエラーを作成したりすることもできます。

于 2013-01-03T15:52:54.423 に答える