我試圖與之交互的類對象超出範圍。我已經嘗試了一些東西,但仍似乎無法解決它。PDO對象超出範圍,嘗試使用Javascript函數調用
我仍然收到錯誤致命錯誤:調用控制檯日誌中非對象的成員函數userExists()。
該網站的結構是:
我有了包括所有的類和實例化對象的的init.php。
這是包含在每頁的頂部。 然後我有一個標題include,它也包含在body的每個頁面中。 標題內是一個登錄框,以及一個內聯事件處理程序到一個js函數,它調用Ajax來驗證登錄等。
我知道該對象超出了函數的作用域,我嘗試通過它作爲一個參數並且失敗,並且使它成爲全球性的。
有人可以請建議一個解決方案嗎?
代碼:
init文件:
//start session data
session_start();
require 'core/connect/dbConnect.php';
require 'core/classes/users.php';
require 'core/classes/general.php';
require 'core/classes/helper.php';
require 'include/facebook.php';
//instantiating the classes
$users = new Users($db);
$general = new General();
$helper = new Helper();
error_reporting(E_ALL); ini_set('display_errors', 'On');
調用該函數的HTML:
<form method="post" action="" id="ourLoginFormID_JS">
<div class="ourContactFormElement2">
<label for="username">Username:</label>
<input type="text" id="username" name="username" autocomplete="off" class="required" value="<?php if(isset($_POST['username'])) echo htmlentities($_POST['username']); ?>" />
</div>
<div class="ourContactFormElement2">
<label for="password">Password:</label>
<input type="password" id="password" name="password" autocomplete="off" class="required"/>
</div>
<div class="ourContactFormElement2">
<label> </label>
<input type="submit" name="loginButton" id="loginButton" value="Login!" onclick="validLogin(); return false;"/>
</div>
<div id="statusLogin"></div>
</form>
阿賈克斯/ js函數:
function validLogin(){
alert("adsad");
$('.error').hide();
var username = $('#username').val();
if(username == ""){
$('label#usernameError').show();
$('input#username').focus();
return false;
}
$('.error').hide();
var password = $('#password').val();
if(password == ""){
$('label#passwordError').show();
$('input#password').focus();
return false;
}
alert("12344242");
var params = {username: username, password: password};
var url = "../js/loginProcessAjax.php";
$("#statusLogin").show();
$("#statusLogin").fadeIn(400).html('<img src="images/loading.gif" />');
$.ajax({
type: 'POST',
url: url,
data: params,
dataType: 'json',
beforeSend: function() {
document.getElementById("statusLogin").innerHTML= 'checking...' ;
},
success: function(data) {
alert("success Area ofAjax");
$("#statusLogin").hide();
if(data.success == true){
alert("if data.success Area of Ajax");
alert(data.message);
}else{
alert("data.message... " + data.message);//undefined
$("#errorConsole").html(data.message);
}
},
error: function(error) {
console.log(error);
}
});
}
編輯:添加PHP的Ajax調用。
<?php
global $users;
if($_POST){
if($users->userExists($username) === false){
$data['message'] = "User doesn't exist";
$data['success'] = false;
....etc etc....
}else{
$login = $users->login($username, $password);
if($login === false){
$data['message'] = 'Incorrect Password or username';
$data['success'] = false;
}else{
$data['success'] = true;
//destroy old session and create new - prevents session fixation attacks
session_regenerate_id(true);
//all details are correct - the method returns the id to be sotred as a session
$_SESSION['id'] = $login;
}
}
echo json_encode($data);
}
如果添加var_dump($ users),會得到什麼結果;出口; ($ users-> userExists($ username)=== false){ – Maximus2012
爲什麼'init。php'不包含在你處理Ajax的文件中? –
你也可以發佈'core/classes/users.php'類的代碼嗎? – Maximus2012