안녕하십니까. PHP 페이지에 문제가 있습니다. this 자습서를 사용하여 약간의 CMS를 작성하고 있습니다. 메뉴와 상호 작용하는 데 사용하는 클래스를 작성하고 모두 잘 작동합니다. 순서를 변경할 수있는 페이지에서 메뉴의 모든 항목을 삽입, 삭제 및 가져올 수 있습니다. 나는 사용자가 동일한 페이지를 쓰기 시작했을 때 , 나는 문제가 발생했습니다 : 이제PHP의 로컬 변수 덮어 쓰기 세션 변수
require_once('../includes/Sentry.php');
$theSentry = new Sentry();
if (!$theSentry->checkLogin(1)){ header("Location: index.php"); die(); }
: I는 각 페이지에서 사용자의 유효성을 검사 센트리 클래스를 사용하고 나 혼자이 유효성 검사를 사용하는 경우, 페이지입니다 잘 작동하지만 데이터베이스를 조회하고 user_admin.php 페이지에있는 모든 사용자를 추출 할 필요가 : 나는 두 개의 섹션 중 하나를 언급하면, 모두가 잘 작동
require_once('../includes/DbUser.php');
$user_connector = new DbUser();
$all_users = array();
$all_users = $user_connector->getUserArray();
foreach($all_users as $id => $user){ echo " ... " };
,하지만 난이 코드가 실행 상태로 남아있는 경우 함께 페이지를 올바르게 만들었지 만 다음에 Sentry 클래스를 사용하여 페이지를 실행할 때 오류가있는 로그인 페이지로 리디렉션됩니다. Sentry 클래스는 Validator 클래스를 사용하여 자격 증명을 확인하며이 클래스의 메서드는 단일 값 입력 대신 배열 입력을보고합니다.
내 질문은 : 두 개의 서로 다른 클래스에서 생성 된 두 개의 서로 다른 개체가 이러한 문제를 일으키는 상호 작용할 수 있습니다.
class Sentry {
...
function checkLogin($group=9,$user='',$pass='',$goodRedirect='',$badRedirect='') {
// Include database and validation classes, and create objects
require_once('DbConnector.php');
require_once('Validator.php');
$validate = new Validator();
$loginConnector = new DbConnector();
// If user is already logged in then check credentials
if ($_SESSION['user'] && $_SESSION['pass']){
// Validate session data
if (!$validate->validateTextOnly($_SESSION['user'])){return false;}
if (!$validate->validateTextOnly($_SESSION['pass'])){return false;}
if ($_SESSION['gruppo'] <= $group){
// Existing user ok, continue
if ($goodRedirect != '') {
header("Location: ".$goodRedirect) ;
}
return true;
}else{
// Existing user not ok, logout
//$this->logout();
header("Location: low_perm.php");
die;
//return false;
}
// User isn't logged in, check credentials
}else{
// Validate input
if (!$validate->validateTextOnly($user)){return false;}
if (!$validate->validateTextOnly($pass)){return false;}
// Look up user in DB
$getUser = $loginConnector->query("SELECT * FROM `utenti` WHERE `usr` = '".$user."' AND `psw` = PASSWORD('".$pass."') AND `gruppo` <= ".$group." AND `attivo` = 1");
$this->userdata = $loginConnector->fetchArray($getUser);
if ($loginConnector->getNumRows($getUser) > 0){
// Login OK, store session details
// Log in
$_SESSION["user"] = $user;
$_SESSION["pass"] = $this->userdata['pass'];
$_SESSION["gruppo"] = $this->userdata['gruppo'];
if ($goodRedirect) {
header("Location: ".$goodRedirect);
}
return true;
}else{
// Login BAD
unset($this->userdata);
if ($badRedirect) {
header("Location: ".$badRedirect) ;
}
return false;
}
}
}
}
그리고 이것은 사용자가 얻을 수있는 기능입니다 : 나는 당신이 두 방법의 코드를 필요가 있다고 생각 나는 그것이 알고
class DbUser extends DbConnector{
...
function getUserArray() {
while ($row = mysql_fetch_object($this->user_result)) {
$this->users[$row->id] = $row;
}
return $this->users;
}
}
을 어려운 - 투 - 설명 질문을, 그래서 알려주세요 뭔가 다른 ... 감사를 지정해야하는 경우
편집 :
function validateTextOnly($theinput,$description = ''){
$result = preg_match ("/^[A-Za-z0-9\ ]+$/", $theinput);
if ($result AND $theinput!=''){
return true;
}else{
$this->errors[] = $description;
return false;
}
}
: 오류은 (는 preg_match와 라인()) Validator 클래스에서이 기능에
좋은 소식은 : 오류가 어디에 내가 찾았지만,이 코드가 작동하지 않는 이유를 이해할 수 아니에요 :
$user_connector = new DbUser();
$all_users = array();
$all_users = $user_connector->getUsers();
foreach($all_users as $id => $user){ ... }
foreach는 문이 지점입니다 : 내가 $all_user
등을 사용하고 때 $id=>$user
일 때 실제로 $ _SESSION [ 'user']의 내용을 싸이클에서 마지막으로 사용한 객체 ("user"객체)로 덮어 씁니다. 누구나 로컬 변수가 세션 변수를 덮어 쓰는 방법을 설명 할 수 있습니까? 나는 그것을 명확하게하고 싶다 : 나는 문제를 해결한다 ($id => $user
을 $id => $userObj
로 바꾸는 것). 그러나 나는 설명을 찾고있다. 감사합니다.
오류 메시지가 표시 될 수 있습니까? – krifur
물론 유용하다고 생각하지는 않습니다 ... Validator 클래스에 관한 오류입니다 : 경고 : preg_match()는 매개 변수 2가 /web/htdocs/www.subamiata.it/에 지정된 문자열 일 것으로 기대합니다. home/nuovo/includes/Validator.php on line 21 – Paciotti
글쎄, 이제 Validator.php를 보여주고 우리는 21 줄을 살펴볼 것입니다. –