【问题标题】:checking Email availablity using AJAX in php在 php 中使用 AJAX 检查电子邮件可用性
【发布时间】:2014-09-08 16:07:08
【问题描述】:

我需要检查此任务的电子邮件可用性。当我输入任何电子邮件地址时,按 Tab 后,它应该检查数据库并返回此电子邮件是否已经存在。 但是这个例程在控制台中检查时给出了我期望的准确输出。但错误消息没有写在我的 html 页面上。谁能帮我?提前致谢。

HTML 编码

<div class="txtinputcomp">
   <input name="frmVisitorEmail" id="frmVisitorEmail" onblur="checkEmail(this.value);" class="emailbox" required="required" value="<?php echo $_POST['frmVisitorEmail']; ?>" placeholder="Visitor Email" type="email" />   
    </div>
<div class="emptytxtcomp">
     <span id="errorEmail" class="errorStyle"></span>
 </div>

FindEmail.php

<?php
    include("includes/config.php"); 
    $strEmail = $_GET["email"];
    $strData = doCheckEmail($strEmail);
    if($strData!=0) {
        echo "<script type='text/javascript'>
            document.getElementById('errorEmail').innerHTML = 'Email address are already exist!';
            return false;
        </script>";

    } else {
        echo '<script type="text/javascript"> 
            document.getElementById("errorEmail").innerHTML = "";
        </script>';
    }
?>

AJAX 脚本

function checkEmail(str)
{
    var xmlhttp;
    if (str.length==0) {
        document.getElementById("frmVisitorEmail").innerHTML="";
        return;
    }
    if (window.XMLHttpRequest) {
        xmlhttp=new XMLHttpRequest();
    } else {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status==200) {
            document.getElementById("frmVisitorEmail").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","findEmail.php?email="+str,true);
    xmlhttp.send(null);
}

功能

function doCheckEmail($strIdent)
    {
        $strSelectsSql = "Select count(*) as TotalCnt from tbl_visitor Where visitor_email='".$strIdent."' ";
        $strSelectsResult = SelectQry($strSelectsSql);
        return $strSelectsResult[0][0];
    }


function SelectQry($Qry) {
        $result = mysql_query($Qry) or die ("QUERY Error:".$Qry."<br>".mysql_error());      
        $numrows = mysql_num_rows($result); 
        if ($numrows == 0) {            
            return;
        } else {
           $row = array(); 
           $record = array();
           while ($row = mysql_fetch_array($result)) { 
                $record[] = $row; 
           }        
        }   
        return MakeStripSlashes($record);
    }

【问题讨论】:

  • 当您插入带有innerHTML 的脚本时,Javascript 不会运行。
  • 哇! (题外话,但是)这段代码是等待发生的 SQL 注入攻击!
  • 与其返回脚本,不如直接返回errorEmail内容,并让回调函数将其插入其中。
  • 我没有得到你的兄弟.. @Barmar
  • 顺便说一句,如果你使用 jQuery $.ajax

标签: javascript php html mysql ajax


【解决方案1】:

此行不会运行 PHP 正在回显的脚本:

document.getElementById("frmVisitorEmail").innerHTML=xmlhttp.responseText;

为了执行动态添加的 Javascript,您必须使用 createElement 创建一个 script 元素。

相反,我建议 PHP 只返回错误消息,而不是脚本块。所以应该是:

if($strData!=0) {
    echo "Email address are already exist!";
} else {
    echo "";
}

那么 Javascript 将是:

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status==200) {
        document.getElementById("errorEmail").innerHTML=xmlhttp.responseText;
    }
}

【讨论】:

  • 除非他走上了eval()的黑暗之路,否则你的答案是合适的。此外,如果 PHP 回显与结果相对应的 HTTP 标头,也就是 200 响应(如果未找到电子邮件)和 400 响应(如果找到电子邮件),那将是更可取的。
猜你喜欢
  • 2016-08-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多