프로필 사용자 PHP를 터치했습니다. WordPress 관리 영역에서 시각적 편집기, 색 구성표 선택 및 기타 세부 정보 제거

저는 이 수업을 창작에 전념하고 싶습니다. 개인 프로필등록된 사용자용(사이트에서 사용자 등록 생성 레슨에 추가) 이제 사용자는 아바타를 추가하고 이름과 성을 변경하고 거주지와 생일을 추가할 수 있습니다. 그러기 위해서는 표에서 사용자몇 가지 필드를 추가해 보겠습니다.

이제 프로필 페이지를 만들어 보겠습니다. profile.php그리고 페이지에 추가하세요 index.php그것에 대한 링크

에코"
내 프로필"; 이제 페이지 자체에 대한 코드 profile.php

프로필<?php echo $login; ?>

프로필



"; 에코 " ".$array["name_user"]." ".$array["성"]."
"; switch ($array["birthdate_month"])(//월 수를 이름으로 변환합니다. case "1" : $month = "January"; break; case "2" : $month = "February"; break; 케이스 " 3" : $month = "3월"; 중단; 케이스 "4" : $month = "4월"; 중단; 케이스 "5" : $month = "5월"; 중단; 케이스 "6" : $month = "6월"; 중단; 사례 "7" : $month = "7월"; 중단; 사례 "8" : $month = "8월"; 중단; 사례 "9" : $month = "9월"; 중단; 사례 " 10" : $month = "10월"; break; case "11" : $month = "11월"; break; case "12" : $month = "12월"; break; ) echo "등록 날짜: ".$array ["reg_date"]."
"; echo "성별: ".$array["sex"]."
"; echo "생일: ".$array["birthdate_day"]." ".$월." ".$array["생년월일_연도"]."
"; echo "국가: ".$array["국가"]."
"; echo "도시: ".$array["city"]."
"; if($_GET["id"] == $id_user)(//소유자만이 프로필을 편집할 수 있습니다 echo "프로필 편집"; ) )else( print<<입구:
로그인: 비밀번호:
여기에서 등록비밀번호를 복구하세요. ) ?>

당연히 이 페이지로 이동하면 표준 아바타를 볼 수 있습니다. noAvatar.jpg이름과 성도 가능하며, 사용자가 등록 중에 이를 표시한 경우 나머지 항목은 비어 있습니다. 이 페이지 맨 끝에는 프로필 편집 페이지 링크가 있습니다. edit.php. 이 페이지의 코드는 매우 가볍고 데이터 입력 양식으로 구성됩니다. 용량이 꽤 크기 때문에 여기에서는 전체 내용을 공개하지 않고 일부만 공개하겠습니다. 전체 내용은 소스 파일에서 얻을 수 있습니다.

다른 모든 형식은 유사하며 하나의 처리기를 참조합니다. save_edit.php, 그러면 데이터베이스가 변경됩니다. 또한 상당히 큰 코드가 있으므로 여기서도 제시하지는 않지만 그 안에서 무슨 일이 일어나는지에 대해 약간만 설명하겠습니다(전체 코드는 소스 파일에서도 찾을 수 있습니다). 우선, 사용자가 아바타를 업로드했다면 아바타를 생성하고 그렇지 않으면 표준 아바타를 그대로 둡니다. 이 경우 먼저 폴더에 다운로드합니다. 아바타(그런데, 허용되는 확장자를 확인한 후 이 폴더를 만들고 쓰기 권한 755를 부여하십시오.) 그러면 선택한 모드에 따른 형식으로 새 이미지가 생성됩니다. $레짐 = 1정사각형 이미지가 생성되고, $레짐 = 2사진은 원본 사진과 비례합니다. 생성된 이미지의 너비도 설정해야 합니다. $w그리고 품질 $품질. 함수를 사용하여 생성된 이미지를 jpg 형식으로 저장합니다. 이미지 JPEG임의의 이름을 생성합니다. 이제 이전 이미지를 삭제하고 데이터베이스에서 새 이미지로 업데이트해야 합니다. 그게 이미지의 전부입니다.

이 파일의 다른 모든 항목은 사용자에 대한 개인 데이터를 업데이트하기 위한 것이며 필드를 업데이트하기 위해 데이터베이스에 대한 간단한 쿼리입니다. 업데이트하기 전에 다음을 사용하여 들어오는 변수의 존재와 안전성을 확인합니다. 스트립 슬래시그리고 htmlspecialchars. 업데이트가 성공하면 즉시 사용자를 프로필 페이지로 리디렉션합니다.
이제 로그인한 사용자가 등록된 다른 모든 사용자를 볼 수 있는지 확인하겠습니다. 이를 위해 페이지를 만들어 보겠습니다. user.php, 루프의 모든 사용자를 표시합니다.

나는 이미 WordPress 사용자에 대해 글을 썼습니다(링크 참조). 그러나 모든 도구(큰 망치 제외)와 마찬가지로 Adminimize는 이상적이지 않으며 모든 것을 완전히 제거할 수는 없지만 WordPress 프로그래머에게만 감사합니다.

이 포스팅은 즉흥적으로 탄생한 포스팅으로, 게스트 Blow님 덕분에 감사 인사를 전할 수 있습니다. 그의 질문의 요점은 다음과 같습니다(일련의 질문에 더 가깝습니다).

1. "선택"을 숨기는 방법 색 구성표"사용자를 위해?

2. WordPress 패널에서 "단축키"와 "비주얼 편집기"를 숨기는 방법은 무엇입니까?

바로 본론으로 들어가겠습니다. 이 방법을 사용하면 사용자의 프로필과 다른 페이지에서도 해당 사용자의 모든 요소를 ​​숨길 수 있습니다. 가장 쉬운 방법은 디스플레이 파일을 편집하는 것입니다!

"프로필"의 경우 파일입니다. 사용자-edit.php, 폴더에 있음 wp-admin.매우 신중하게 편집해야 합니다. 그렇지 않으면 실험에 대한 비용을 잘 "지불"할 수 있습니다.

솔루션(통합):

1. 파일을 PC에 다운로드하고 복사본을 만드세요(안전합니다....)

2. 필요한 정보를 표시하는 HTML 코드를 찾고 있습니다.

3. 그것에 대해 주의 깊게 설명하고 대체 항목으로 다시 "채우십시오".

이제 연습해 보세요(User-edit.php 편집):

솔직히 테스트 사이트에 어떤 버전의 WP가 있는지 기억이 나지 않지만 확실히 2.8.2보다 낮지는 않습니다.

먼저 파일을 PC에 다운로드한 후 크롬 코드 뷰어를 이용해 코드를 살펴보고, Notepad++에서 필요한 코드를 찾았습니다.

(양쪽에 대시 2개 "-")

1. "비주얼 편집기" 숨기기

코드로 변경:

—>

ps: 이 코드를 복사하지 말고 직접 변경하세요. 오류가 발생할 확률이 높습니다!!!

2. "색 구성표 선택"을 숨깁니다.

코드 간의 차이점을 알아차렸기를 바랍니다. 총 7자가 추가되었습니다. 우리가 찾고 있는 이 항목을 숨기려면 if (count($_wp_admin_css_colors) > 1)그리고 그 줄 아래에 있는 모든 코드를 주석으로 처리하세요. ~ 전에

3. "단축키"를 숨깁니다.

두 번째 레슨에서는 두 개의 클래스를 더 작성하고 스크립트의 내부 부분을 완전히 마무리하겠습니다.

계획

이 튜토리얼 시리즈의 목표는 사용자가 등록, 로그인, 로그아웃 및 설정 변경을 수행할 수 있는 간단한 애플리케이션을 만드는 것입니다. 사용자에 대한 모든 정보를 포함하는 클래스는 User라고 불리며 User.class.php 파일에 정의됩니다. 입력/출력을 담당할 클래스는 UserTools(UserTools.class.php)라고 합니다.

클래스 이름 지정에 대해 조금

적절한 에티켓은 클래스 자체와 동일한 이름을 가진 클래스를 설명하는 파일의 이름을 지정하는 것입니다. 이렇게 하면 클래스 폴더에 있는 각 파일의 목적을 쉽게 결정할 수 있습니다.

클래스 파일 이름 끝에 .class 또는 .inc를 추가하는 것도 일반적입니다. 이렇게 하면 파일의 목적을 명확하게 정의하고 .htaccess를 사용하여 이러한 파일에 대한 액세스를 제한할 수 있습니다.

사용자 클래스(User.class.php)

이 클래스는 각 사용자를 정의합니다. 성장과 함께 이 신청서"사용자"의 정의는 크게 변경될 수 있습니다. 다행스럽게도 OOP 프로그래밍을 사용하면 추가 사용자 속성을 쉽게 추가할 수 있습니다.

건설자

이 클래스에서는 생성자를 사용합니다. 이는 클래스의 다음 복사본을 만들 때 자동으로 호출되는 함수입니다. 이를 통해 프로젝트가 생성된 후 일부 속성을 자동으로 게시할 수 있습니다. 이 클래스에서 생성자는 단일 인수, 즉 데이터베이스 사용자 테이블의 한 행을 포함하는 연관 배열을 사용합니다.

require_once "DB.class.php"; 클래스 사용자( 공개 $id; 공개 $username; 공개 $hashedPassword; 공개 $email;
공개 $joinDate;
//생성자는 새로운 객체가 생성될 때 호출됩니다.//DB 행을 인수로 사용하여 연관 배열을 사용합니다. function __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" 사용자 이름"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["password"])) ? $data["password"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" Join_date"] : ""; )
public function save($isNewUser = false) ( //새 데이터베이스 객체를 생성합니다. $db = new DB(); //사용자가 이미 등록되어 있고 //그냥 정보를 업데이트하는 중이라면 if(!$isNewUser ) ( //데이터 배열 설정 $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"이메일" => ""$this->이메일"");
//데이터베이스의 행 업데이트 $db->update($data, "users", "id = ".$this->id); )else ( //사용자가 처음으로 등록되는 경우 $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); $this-> id = $db->insert($data, "users"); $this->joinDate = time(); ) true를 반환합니다. ) ) ?>

설명

클래스 영역 외부에 있는 코드의 첫 번째 부분은 클래스가 데이터베이스에 연결되어 있는지 확인합니다(User 클래스에는 이 클래스를 필요로 하는 함수가 있으므로).

"보호된" 클래스의 변수(첫 번째 강의에서 사용됨) 대신 "공용"으로 정의합니다. 이는 클래스 외부의 모든 코드가 User 개체로 작업할 때 이러한 변수에 액세스할 수 있음을 의미합니다.

생성자는 테이블의 열이 키인 배열을 사용합니다. $this->variablename을 사용하여 클래스 변수를 정의합니다. 이 클래스의 예에서는 먼저 특정 키의 값이 존재하는지 확인합니다. 그렇다면 클래스 변수를 해당 값으로 설정합니다. 그렇지 않으면 빈 문자열입니다. 다음과 같은 경우 코드는 짧은 형식의 표기법을 사용합니다.

$값 = (3 == 4) ? "A" : "B";

안에 이 예에서는 3이 4인지 확인합니다! 그렇다면 - $value = "A"이고, 아니오 - $value = "B"입니다. 이 예에서 결과는 $value = “B”입니다.

우리는 사용자에 대한 정보를 데이터베이스에 저장합니다.

저장 기능은 사용자 개체의 현재 값으로 데이터베이스 테이블을 변경하는 데 사용됩니다. 이 함수는 첫 번째 튜토리얼에서 생성한 DB 클래스를 사용합니다. 클래스 변수를 사용하여 $data 배열이 설정됩니다. 사용자 데이터가 처음으로 저장되는 경우 $isNewUser가 $true(기본적으로 false)로 전달됩니다. $isNewUser = $true이면 DB 클래스의 insert() 함수가 호출됩니다. 그렇지 않으면 update() 함수가 호출됩니다. 두 경우 모두 사용자 개체의 정보가 데이터베이스에 저장됩니다.

클래스 UserTools.class.php

이 클래스에는 사용자와 관련된 함수인 login(), logout(), checkUsernameExists() 및 get()이 포함됩니다. 하지만 이 애플리케이션이 확장되면 더 많은 것을 추가할 수 있습니다.

//UserTools.class.php require_once "User.class.php"; require_once "DB.class.php";
클래스 사용자 도구(
//사용자를 로그인합니다. 먼저 //사용자 이름과 비밀번호가 데이터베이스의 행과 일치하는지 확인합니다. //성공하면 세션 변수를 설정하고 //사용자 개체를 저장합니다.
공개 함수 로그인($username, $password)
{
$hashedPassword = md5($password); $result = mysql_query("SELECT * FROM users WHERE 사용자 이름 = "$username" AND 비밀번호 = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; true를 반환; )else( false를 반환; ) )
//사용자를 로그아웃합니다. 세션 변수를 삭제합니다. public function logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //다음과 같은지 확인합니다. 사용자 이름이 존재합니다. //모든 사용자 이름이 고유한지 확인하기 위해 등록 중에 호출됩니다. 공용 함수 checkUsernameExists($username) ( $result = mysql_query("username="$username""인 사용자로부터 ID 선택); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//사용자 가져오기 //사용자 개체를 반환합니다. 사용자 ID를 입력 공용 함수로 사용 get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ) )
?>

로그인() 함수

login() 함수는 이름으로 명확합니다. 사용자 인수 $username 및 $password를 가져와서 일치하는지 확인합니다. 모든 것이 일치하면 모든 정보가 포함된 User 개체를 생성하고 이를 세션에 저장합니다. 우리는 PHP serialize() 함수만 사용하고 있다는 점에 유의하세요. unserialize()를 사용하여 쉽게 직렬화 해제할 수 있는 객체의 저장된 버전을 생성합니다. 또한 로그인 시간도 저장됩니다. 이는 나중에 사용자에게 사이트 체류 기간에 대한 정보를 제공하는 데 사용될 수 있습니다.

또한 $_SESSION["logged_in"]을 1로 설정한 것을 볼 수 있습니다. 이를 통해 각 페이지에서 사용자가 로그인했는지 여부를 쉽게 확인할 수 있습니다. 이 변수만 확인하면 충분합니다.

로그아웃() 함수

또한 간단한 기능. PHP 함수 unset()은 메모리의 변수를 지우고, session_destroy()는 세션을 삭제합니다.

checkUsernameExists() 함수

영어를 아는 사람이라면 누구나 쉽게 그 기능을 이해할 수 있을 것이다. 단순히 유사한 로그인이 사용되었는지 여부를 데이터베이스에 묻습니다.

get() 함수

이 함수는 사용자의 고유 ID를 가져와 DB 클래스, 즉 select() 함수를 사용하여 데이터베이스에 쿼리를 만듭니다. 다수의 사용자 정보가 포함된 연관 배열을 사용하고 새 User 객체를 생성하여 해당 배열을 생성자에 전달합니다.

이것을 어디에 사용할 수 있나요? 예를 들어, 특정 사용자 프로필을 표시해야 하는 페이지를 만드는 경우 이 정보를 동적으로 가져와야 합니다. 이를 수행하는 방법은 다음과 같습니다. (URL이 http://www.website.com/profile.php?userID=3이라고 가정)

//참고: 먼저 데이터베이스 연결을 열어야 합니다. //이 작업에 대한 자세한 내용은 1부를 참조하세요. //또한 클래스 파일을 포함했는지 확인해야 합니다.
$tools = 새로운 UserTools(); $user = $tools->get($_REQUEST["userID"]); echo "사용자 이름: ".$user->사용자 이름.""; echo "참여 날짜: ".$user->joinDate."";

용이하게! 사실인가요?

서버 측의 마지막 터치: global.inc.php

global.inc.php는 사이트의 모든 페이지에 필요합니다. 왜? 이런 식으로 페이지에 필요한 모든 일반적인 작업을 배치합니다. 예를 들어, session_start()를 시작하겠습니다. 데이터베이스 연결도 열립니다.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//데이터베이스에 연결 $db = new DB(); $db->연결();
//UserTools 개체 초기화 $userTools = new UserTools(); //세션 시작
세션_시작();
//로그인된 경우 세션 변수 새로 고침 if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

그는 무엇을 하고 있나요?

여기에는 몇 가지 일이 진행되고 있습니다. 먼저 데이터베이스에 대한 연결을 엽니다.

연결한 후 session_start() 함수를 시작합니다. 이 함수는 세션을 생성하거나 사용자가 이미 로그인한 경우 현재 세션을 계속합니다. 우리 애플리케이션은 사용자가 로그인/아웃할 수 있도록 설계되었기 때문에 이 기능은 모든 페이지에 필요합니다.

다음으로 사용자가 로그인되어 있는지 확인합니다. 그렇다면 $_SESSION["user"]를 업데이트하여 가장 많은 내용을 반영하겠습니다. 최신 정보사용자에 대해. 예를 들어, 사용자가 이메일을 변경하면 이전 이메일이 세션에 저장됩니다. 하지만 자동 업데이트를 사용하면 이런 일이 발생하지 않습니다.

이것으로 두 번째 부분을 마칩니다! 내일 이 주제에 대한 마지막 강의를 기대해 주세요.

모두 제일 좋다!

공유하다