【发布时间】:2014-05-04 20:45:54
【问题描述】:
我正在尝试创建一个 php 函数来检查数据库中是否存在某些内容,并根据此检查返回“1”或“null”。它在第一次检查是否找到匹配时成功返回“1”,但之后它总是返回“1”,直到页面没有刷新。
所以,我认为这与缓存或类似的东西有关。我使用 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
}
这是负责这种情况的整个代码,现在谁能告诉我如何在每次提交时重置函数的返回值?或任何解决方案。
更新(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来检查,你为什么
include('functions.php')? -
没错... bcz 表单是通过 ajax 从 HTML 提交到 PHP 的,因此不需要刷新页面。我使用“include('functions.php')”bcz 如果在functions.php中定义的所有函数和类,“main.php”返回JSON格式的结果。
-
看起来问题不在服务器端,而是在客户端(javascript)端。你能提供一些html/javascript代码吗?
标签: php jquery html ajax web-applications