我试图做一个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);
“_但之后,如果总是返回”1“,直到页面没有刷新_”你需要不断检查这个值,而不刷新页面?如果你使用AJAX来检查,为什么你要包含('functions.php')'? –
yeh ... bcz表单是通过ajax从HTML提交给PHP的,因此不需要页面刷新。 我使用“include('functions.php')”bcz所有的函数和类,如果在functions.php中定义,并且“main.php”以JSON格式返回结果。 –
看起来问题不在服务器端,而是在客户端(javascript)端。你能提供一些html/javascript代码吗? –