2011-05-08 88 views
2

我遇到了使用ajax和php的麻烦。我想要做的是调用一个ajax函数,它从表单的输入中获取一个值,并检查该电子邮件是否存在于数据库中。这是我目前的javascript:Ajax如何与PHP一起工作?

//Checks for Existing Email 
function checkExisting_email() { 
    $.ajax({ 
     type: 'POST', 
     url: 'checkExist.php', 
     data: input 
    }); 

emailExists = checkExisting_email(); 

//If it exists 
if (emailExists) { 
    alert("This email already exists!"); 
} 

不幸的是,我不能让我的警报熄灭。在我的PHP函数中,它检查输入是用户名还是电子邮件(仅用于我的目的,所以你知道),然后在任一列中查找它。如果找到,则返回true,如果没有,则返回false:

include ('func_lib.php'); 
connect(); 
check($_POST['input']); 

function check($args) 
{ 
    $checkemail = "/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i"; 
    if (!preg_match($checkemail, $args)) { 
     //logic for username argument 
     $sql = "SELECT * FROM `users` WHERE `username`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 

     if (mysql_num_rows($res) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } else { 
     //logic for email argument 
     $sql = "SELECT * FROM `users` WHERE `email`='" . $args . "'"; 
     $res = mysql_query($sql) or die(mysql_error()); 

     if (mysql_num_rows($res) > 0) { 
      return true; 
     } else { 
      return false; 
     } 
    } 

} 

所以我的问题是,如何将这些收益AJAX回应,我该如何作出相应的AJAX功能?主要是,为什么这不起作用?

任何帮助,非常感谢。谢谢!

+0

焦虑问题:当你将$ _POST变量直接传递给你的MySQL查询,而不使用像mysql_real_escape_string()这样的转义函数时,你的PHP可以适应XSS攻击。 – cmbuckley 2011-05-08 20:49:47

+0

Buckley,我认为你的意思是sql注入,因为xss是一个依赖用户运行任意javascript的前端功能。 – BRampersad 2011-05-08 21:12:25

+0

感谢您纠正我的胡言乱语! – cmbuckley 2011-05-08 22:44:31

回答

1

您需要将success选项添加到您的Ajax请求中,这是在XHR成功时执行的JS函数。查看jQuery documentation了解更多信息。

没有运行脚本,我想你会发现$_POST['input']是空的;你需要传递你的数据,像data: {'input': input}这样做。

您的PHP还需要将一些内容返回给脚本;考虑改变您的来电check()到这样的事情:

echo (check($_POST) ? 'true' : 'false'); 

现在可以检查在JavaScript中的内容。

+0

感谢您的回复。所以如果我在那里取得成功,它会是什么样子?从服务器返回的数据将是什么数据?基本上,我只需要ajax调用返回true或false,但我将'emailExists'设置为'undefined'。 – Sawyer 2011-05-08 20:51:54

+0

默认情况下,Ajax调用不会返回任何内容,因为它是异步的。你需要创建一个回调函数,如:'function callback(data,status,xhr){if(data =='true'){alert('Already exists!'); }}'然后将'success:callback'添加到'.ajax'调用中。上面的文档链接有一些关于异步操作的更多信息。 – cmbuckley 2011-05-08 20:59:11

+0

我明白你的意思了,我已经试过了。我的麻烦是让该数据变量返回true。 check($ _ POST ['input']); 函数检查($ args).... 这就是我的麻烦所在,我不确定php如何与ajax交互,那么我的变量如何被馈送到php,然后返回?它返回true还是试图返回一个变量?这么多问题......重点是,我甚至不认为成功被称为是因为它不成功! 再次感谢您的回复。 ;) – Sawyer 2011-05-08 21:06:56

1

基本上ajax是一个与你的服务器握手的例程。

阿贾克斯:

$.post('yoursite.com/pagewithfunction.php', 
    {postkey1:postvalue1, postkey2:postvalue2...}, 
    function (response) { 
     // response is the data echo'd by your server 
    }, 'json' 
); 

pagewithfunction:

yourFunction(){ 
    $var1 = $_POST['postkey1'];.... 
    $result = dosomething($var1..); 
    echo json_encode($result); // this is passed into your function(response) of ajax call 
} 

所以在$。员额你有功能PHP页面的URL,{VAR:VAL}是后数据,以及函数(响应)是处理从服务器回显的数据的位置 - 变量response是回显的内容。