Ajax和PHP与数据库连接

时间:2012-10-20 22:26:07

标签: php mysql ajax jquery

我在下面的代码中遇到问题,如果电子邮件已经存在,我正试图收到错误消息,但我没有成功..看看代码:

Ajax jQuery:

<script type="text/javascript">  

    // Centering the text content
    jQuery(window).resize(function () {
        boxHeight();
    }).load(function() {
        boxHeight();
        // Show the content and focus the email input
        $("#content").fadeIn();
        $("#email").focus();


    });

    jQuery(document).ready(function($){
        $('#subscribe').submit(function(e){
            e.preventDefault();

            email = $('input#email');           
            email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;           
            if(!email_regex.test(email.val())) {
                $('#response', form).fadeIn(500, function() {
                    $('#response', form).html('<p class="message warning" align="center">Invalid email</p>');
                });
                return;
            } else {
                $('#response', form).html('<p class="message">Please Wait...</p>');
            }

            var form = $(this);
            var post_url = form.attr('action');
            var post_data = form.serialize();               
            $.ajax({
                type: 'POST',
                url: post_url,
                data: post_data,
                success: function(responseText) {  if(responseText == 1) {
                    $('#response', form).html('<p class="message">Error...</p>');
                } else { if(responseText == "") {                       
                    $(form).fadeOut(500, function(){
                        form.html(msg).fadeIn();
                    });

                }
                }
            }
            });
        });
    });
</script>

PHP数据库连接:

    <?php    
$host="xxxx"; // Host name
$username="xxxx"; // Mysql username
$password="xxxx"; // Mysql password
$db_name="xxxx"; // Database name
$tbl_name="xxxx"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// Get values from form
$email = $_POST['email'];

$query = mysql_query("SELECT email FROM banco_emails WHERE 'email' = '$email'");
    if(mysql_num_rows($query) == 1) { // if return 1, email exist.
    echo '1';
    } else {
// Insert data into mysql
$sql="INSERT INTO $tbl_name(email) VALUES ('". $email . "')";
$result=mysql_query($sql);
echo '<p class="message">Thanks for registering. Our bar is getting crowded!</p>';

问题是ajax代码没有显示错误消息,只显示消息“Please wait ...”并且没有任何反应,我不知道为什么......

抱歉我的英语不好。

先谢谢!


问题解决了,问题出在php代码中,我做了它并且有效!

    $query = mysql_query("SELECT email FROM banco_emails WHERE email = '$email' LIMIT 1");

    $email_check = mysql_num_rows($query);
     if ($email_check > 0) {
    echo '1';
    } else if ($email_check == 0) {
// Insert data into mysql
$sql="INSERT INTO $tbl_name(email) VALUES ('". $email . "')";
$result=mysql_query($sql);
echo '<p class="message">Thanks for registering. Our bar is getting crowded!</p>';

2 个答案:

答案 0 :(得分:1)

在您的成功函数中,您错误地处理PHP成功返回的内容。如果电子邮件是新的并且已添加到数据库中,PHP将回显:

<p class="message">Thanks for registering. Our bar is getting crowded!</p>

您的JS会像这样解析响应:

if(responseText == 1) {
    $('#response', form).html('<p class="message">Error...</p>');
} else {
   if(responseText == "") {                       
       $(form).fadeOut(500, function(){
          form.html(msg).fadeIn();
       });
   }
}

这里的问题是,如果responseText为空字符串,则只显示HTML消息。你应该摆脱if语句:

if(responseText == 1) {
    $('#response', form).html('<p class="message">Error...</p>');
} else {                       
   $(form).fadeOut(500, function(){
      form.html(msg).fadeIn();
   });
}

这样显示responseText。我并不是100%确定你的提交HTML是什么样的,但是在你显示消息之后你可能想要淡出“请等待”,如果你隐藏表单后它仍然可见。

答案 1 :(得分:0)

尝试这种方式:

制作唯一的电子邮件列。 如果电子邮件地址已经存在,则返回错误,并且您可以在ajax错误部分向用户显示错误消息。