2014-03-26 31 views
0

我试图做一个php函数来检查数据库中是否存在某个东西,并根据这个检查返回“1”或“null”。如果找到匹配,它会在第一次检查时成功返回“1”,但在此之后它总是返回“1”直到页面未刷新。从PHP函数获取错误的返回值

所以,我认为这是有关缓存或类似的东西。我使用jQuery/AJAX从我的HTML页面提交表单。

让我用例子更清楚地说明我的代码。

的functions.php(检查用户名功能):

if(!defined('INCLUDE_CHECK')) die('You are not allowed to execute this file directly'); 

// some functions 
function checkUser($email){ 
    $userFound = null; 
    // check condition with if and for-each 
    foreach....... 
     if(...... 
     // user found 
     $userFound = 1; 
     break; 
     } 
    } 
    return $userFound; 
    } 

现在,我包括在我的 “main.php” 这个文件与

define('INCLUDE_CHECK',true); 
include('functions.php'); // also tried : require 'functions.php'; 

$email = $_POST['email']; 

,并初始化它:

if(!checkUser($email)){ 
    // perform action when user is not found 
}else{ 
    // echo an error msg 
} 

这是负责情况的整个代码,现在任何人都可以告诉我如何重置f的返回值对每一次提交都表示一致?或任何解决方案。

更新(HTML代码):

$('html').on('click','.submit',function(e){ 
    window.clearTimeout(formreply); 
    var $frm = $(this).parents('form'); 
    var serial = $frm.serialize(); 
    var name = $(this).attr('name'); 
    $.ajax({ 
    url: $frm.attr('action')+'?'+name+'=true', 
    type: $frm.attr('method'), 
    data: serial, 
    success: function(response){ 
     if($frm.find('#formreply').length <= 0){ 
     $frm.prepend('<span id="formreply"></span><hr/>'); 
     } 
     if(response.err){ 
     $frm.find('#formreply').empty().attr('class','formerr').html(response.err); 
     return false; 
     }else if(response.info){ 
     $frm.find('#formreply').empty().attr('class','forminfo').html(response.info); 
     }else if(response.msg){ 
     $frm.find('#formreply').empty().attr('class','formmsg').html(response.msg); 
     } 
    }, 
    error: function(jqXHR, textStatus, errorThrown){ 
     if($frm.find('#formreply').length <= 0){ 
     $frm.prepend('<span id="formreply"></span><hr/>'); 
     } 
     $frm.find('#formreply').empty().attr('class','formerr').text(textStatus); 
    } 
    }); 
    formreply = window.setTimeout(function(){ 
    $('#formreply,hr').empty().remove(); 
    },4500); 
    e.preventDefault(); 
}); 

更新(为了更好的评价提供了更多的代码(main.php)):

define('INCLUDE_CHECK',true); 
include('functions.php'); 
header('Content-Type: application/json'); 

$admin = array(
    'err'=>null, 
    'info'=>null, 
    'msg'=>null 
); 

// more vars & REQUESTS 

if($_REQUEST['Register']){ 
    if(strlen($name)<4 || strlen($name)>32){ 
    $admin['err'] .= "Your name must be between 3 and 32 characters!"; 
    } 
    if(!checkName($name)){ 
    $admin['err'] .= "Your name contains invalid characters!"; 
    } 
    if($email){ 
    if(!checkEmail($email)){ 
     $admin['err'] .= "Your email is not valid!"; 
    } 
    }else{ 
    $admin['err'] .= "Please enter your Email ID."; 
    } 
    if(strlen($password)<6 || strlen($password)>32){ 
    $admin['err'] .= "You must enter your password!! (6-32)"; 
    } 
    if(!count($admin['err'])){ 
    if(checkUser($email) !== 1){ // also tried "!checkUser($email)" 
     $admin['msg'] = "Thanks".checkUser($email); 
    }else{ 
     $admin['info'] = "echoing info ".getName($email).checkUser($email); 
    } 
    } 
} 

echo json_encode($admin); 
+0

“_但之后,如果总是返回”1“,直到页面没有刷新_”你需要不断检查这个值,而不刷新页面?如果你使用AJAX来检查,为什么你要包含('functions.php')'? –

+0

yeh ... bcz表单是通过ajax从HTML提交给PHP的,因此不需要页面刷新。 我使用“include('functions.php')”bcz所有的函数和类,如果在functions.php中定义,并且“main.php”以JSON格式返回结果。 –

+0

看起来问题不在服务器端,而是在客户端(javascript)端。你能提供一些html/javascript代码吗? –

回答

0

可能是你在你的if

需要 break
function checkUser($email) { 
    $userFound = null; 
    // check condition with if and for-each 
    foreach....... 
     if(...) { 
      // user found 
      $userFound = 1; 
      break; 
     } 
    } 
    return $userFound; 
} 
+0

我用“break”在我的功能。但忘了把它写入我的问题。 –

0

你在做什么?如果您永远不会将$ userFound重置为null,它将在第一次更改后始终为1。您可以在将其更改为1时跳出foreach,将其更改为1时返回该函数(您可以仅返回1而不是设置temp变量),或者在if条件(尽管我认为如果你没有做任何事情,这可能毫无意义)。

+0

我用“break”找到用户后。 –

+0

知道你在做什么可能仍然有帮助。另外,你可以在if后返回1,最后返回null。您不需要$ userCheck变量。您也可以尝试将检查更改为if(checkUser($ email)!== null)而不是检查!的回报价值。由于PHP是松散类型的,它可能会做一些奇怪的事情,最好尽可能频繁地检查类型(=== /!==是类型安全的比较)。你确定函数每次都返回1吗?还是只是出现这种方式?尝试在代码中添加一些探测器来查看变量的变化。 – user3147515

+0

ya我确信在执行第一次usercheck后,返回值总是“1”(使用echo $ checkUser($ email)) –