半年以上、断続的にPHPを独学で勉強してきましたが、最終的には気持ちを引き締めてPHPを続けてきたので、頼まれてもいない安定したPHPの仕事を見つけるためにこのPHPブログを書いています。給料は高いけど、土地を認めてもらいたい。私は英語の文書のほとんどを理解できます。私は愚かではないので、興味があれば、私に連絡してください。誠実な方は来てください! qq:240382473
すべての主要なコードとドキュメントの手順を 3 ~ 5 回に分けてリリースし、ブログ バックエンドのすべてのスタイルを Blog Park に適用します。でもコンセプトはこんな感じです。非常に安定した MVC アーキテクチャを書くことは不可能だからです。
2. JQUERY AJAX にはあまり慣れておらず、自由に使用できないため、ほとんど使用しません。ゲストブックには AJAX を使用できます。
3. 公開クラスがいくつかあり、その他のコードはすべて手書きです。よろしくお願いします。
4. 批判や指導は歓迎しますが、その理由も教えてください。
本題に戻ります: まずデータベースのアーキテクチャを見てみましょう
これらのテーブルのエンジンはすべて MYISAM であり、アクセスに便利です。 (黄色のキーは主キーを表します。青いひし形は空ではないフィールドを表します。白いひし形は null フィールドを表します) 図内のリンクは、それらの間の潜在的な関係を表すだけであり、検索エンジンの操作中に関連付けることはできません。 MyISAM です。 したがって、結合クエリと複数テーブルの操作が必要です。
投稿テーブルとカテゴリテーブルで最も重要な特殊フィールドを選択して詳細に説明し、他の重要なフィールドについても説明します。 post:
post_id
category_id varchar(10) これは、ブログ投稿のインデックスに使用されるカテゴリです。ここでの category_id も文字列型であるため、ブログ投稿ごとに複数のカテゴリを設定できます。
type varchar(20) このフィールドは、投稿、記事、日記を区別するために使用されます。postDraft、articleDraft に設定することもできます。
visiable ブログ投稿が表示されるかどうか
その他の一般的なフィールド、作成時刻、最終変更時刻、ビュー数、コメント数、タグ、許可されたコメント、および一部の予約済みフィールド。
カテゴリ:
parent、count_child_number、count_parent_number (将来の拡張用)
type はフォトアルバム、ブログ投稿、日記のカテゴリをそれぞれ設定できます
名前、説明、作成時間、公開範囲などのその他の一般的なフィールド
コメント:
アドレスユーザー IP
user_agent ユーザー ブラウザの種類
その他のフィールドは若干...
サーバーアーキテクチャ
PHP5.4.2 + MYSQL 5.523 + APACHE 2.2.22 + Windows NT ARIST-PC 6.1 build 7600 (Windows 7 Home Basic Edition) i586 (local)
ブログのアーキテクチャ
バックエンドディレクトリ:
バックエンドディレクトリの説明:
assertは、さまざまなリソースjs、css、画像を格納します。 classは、データベース操作クラス、ページングクラス、およびほとんどのモデルなどの共通クラスを格納します。 。 。
extension は mce などのリッチエディター拡張機能を保存します
config は設定情報を保存します
templates はすべてのテンプレートを保存します (smarty は使用されません)
upload は写真やその他のファイルを保存します
admin ルートディレクトリには、index などの同様のコントローラーがいくつかあります。 php、post.php、article.php、photo.php
まずadmin/config/config.phpを見てみましょう
コードをコピーします
コードは次のとおりです: ini_set( "display_errors", true );
date_default_timezone_set( "Asia/Shanghai" );
// ルートとディレクトリを分離
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', dirname(__FILE__); ));
// データベース情報
// ハッシュが必要です
define( "DB_PASSWORD", '*****' ); ", " blog" );
// 重要なディレクトリ
define( "CLASS_PATH", "classes" );
define( "TEMPLATE_PATH", "templates" );
// ユーザー情報
define( "ADMIN_USERNAME", "admin" ;
$strength = "08";
//暗号化されたデータが渡された場合、入力 ($info) と照合します
if ($encdata) {
if (substr($encdata, 0, 60) == crypt($info, "$2a$".$strength ."$".substr($encdata, 60))) {
return true;
}else {
return false
}
} else {
//makeソルトを入力してハッシュし、末尾にソルトを追加します
$salt = "";
for ($i = 0; $i $salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" , mt_rand(0, 63), 1);
}
//return 82 char string (60 char hash & 22 char Salt)
return crypt($info, "$2a$".$strength."$".$ Salt).$salt;
}
}
function __autoload($className) {
if (file_exists(ROOT . DS . 'classes' . DS . strto lower($className) . '.class.php')) {
require_once(ROOT . DS . 'classes' . DS . strto lower ($className) . '.class.php'); else {
/* ここにエラー生成コード */
}
}
ここでは、いくつかの基本的な定数といくつかの関数を定義します。
__autoload() 関数は、admin/class/ 内のすべてのクラスをロードします。
hasher() 関数を使用して、88 ビットの不可逆パスワードを暗号化します。 ログイン プロセスでは、検証のために config.php の定数と hasher() 関数が使用されます。
admin/index.php バックエンド コントローラーを見てみましょう。このコントローラーのホームページには、ブログ関連のデータが表示されます
コードをコピーします コードは次のとおりです:
require_once( " config/config.php" );
session_start( );
$action = isset( $_GET['action'] ) ? $_GET['action'] : "";
$username = isset( $_SESSION['username '] ) ? $_SESSION['ユーザー名'] : "";
if ( $action != "ログイン" && $action != "ログアウト" && !$username ) {
exit; switch($ case "olgut); }
function login( ){
$results['pageTitle'] = "ログインフォーム";
// ログインを処理します
if( isset( $_POST['login'] ) ){
// から簡単に検証します定数変数
/ / データベースからユーザーを確認する必要がある場合は、後で実行します
// $user = new User
// $user->isValidateUser( $name, $password ); ['username' ] == ADMIN_USERNAME && $_POST['password'] == hasher($_POST['password'], ADMIN_PASSWORD ) ){
// セッションデータを登録します
$_SESSION['username'] = ADMIN_USERNAME ;
// 管理ページの場所
header( "Location:index.php");
} else {
// ログイン失敗: ユーザーにエラーメッセージを表示
$results['errorMessage'] = "ユーザー名またはパスワードが間違っていますもう一度お試しください。";
require( TEMPLATE_PATH . "/loginForm.php" );
}
} else {
require( TEMPLATE_PATH . "/loginForm.php" );
}
}
function admin( ){
$results[ 'pageTitle'] = "管理者ページ";
require( TEMPLATE_PATH . "/admin.php" );
}
function logout( ){
$results['pageTitle'] = "ログインページ";
unset( $ _SESSION['username'] );
header( "Location:index.php ");
このデザインパターンは外国人から学びました
まず、 config.php で、セッション変数を初期化し、重要な変数 $action の値を取得します。ユーザーがログインしておらず、ユーザー名が空の場合は、$action と $username の値を決定します。ログイン ページ;
ユーザーがユーザー名とパスワードを正しく入力した場合は、セッション変数 $username を登録し、メイン ページのindex.php にジャンプします。このとき、デフォルトの $action admin() を呼び出します。関数はテンプレート admin.php をロードします。配列変数 $results[ 'pageTitle'] とバックエンドのブログ スタイル フレームワークがあります。
ユーザーが間違って入力した場合は、プロンプトメッセージが表示されます。
この設計コンセプトの核心は、「アクション」を与えてから「何かをする」ということです
次のコードで繰り返し見ていきます。
これはブログ バックエンドのフレーム スタイルで、ブログ パークからコピーされ、テーブル レイアウトを使用しており、他のスタイルと互換性があり、カスタマイズ可能で、シンプルで実用的でスケーラブルで、完璧なバックエンド フレームです。
このブログ記事を書いている時点で、このスタイルは他のブラウザでも互換性があります。 次の記事: エッセイ、記事、日記とそれらの分類に CRUD を実装します。
追記: 私はまだ ajax に慣れていないため、これらの操作では ajax を使用していません。
http://www.bkjia.com/PHPjc/328067.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/328067.html
技術記事
半年以上、断続的にPHPを独学で勉強してきましたが、最終的には気持ちを引き締めてPHPを続けてきたので、給料を求めずに安定したPHPの仕事を見つけるためにこのPHPブログを書きました。 .