ホームページ >バックエンド開発 >PHPチュートリアル >PHPもどきブログパーク 個人ブログ(2)データベースの追加・変更・削除_PHPチュートリアル

PHPもどきブログパーク 個人ブログ(2)データベースの追加・変更・削除_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:00:331206ブラウズ

早速ですが、前の記事には「アクションを実行する」という中心的な概念がありました。この記事では、この概念が何を意味するのかをコードを使って説明します。まず、このファイルが私たちのものです。データ層処理クラス。



このモデル クラスを簡単に紹介します。これは crud などの一般的な操作を実行するためにデータベースの基本クラスを継承し、データベース オブジェクト $db を使用してデータを操作します。

データ操作には 2 つの重要なメソッドがあります。storePostFormValues() と storeDiaryFormValues() です。これら 2 つのメソッドはデータ フローの始まりです。

他に 2 つの興味深いメソッド、addChildNumber( ) と ReduceChildNumber( ) があります。これらは、ドキュメントの挿入または削除時のブラックボックス操作を担当します。私のドキュメントは複数のカテゴリに分類できるため、ドキュメントを操作するときに考慮しなければならない問題の 1 つは、カテゴリ テーブルにこのカテゴリに属する​​ドキュメントの数を記録するフィールドがあることです。したがって、これらの数値の値は動的に変更する必要があります。
post.php コントローラーを使用すると、データのプロセスを開始できます (コントローラーはまだクラスではないため、API ドキュメントを生成できません。これは実際の MVC アーキテクチャではないためです。) したがって、MVC の前に、これも実行されます。 MVC とは何か、またそれを適用して独自の MVC を作成する方法をより深く理解するのに役立ちます。

以下の状況はすべて仮定です:

$action = "空からガールフレンドをください!"; このコントローラーを渡して、何が起こるか見てみましょう。

コードをコピーします コードは次のとおりです:
require_once( "config/config.php" );
session_start( );
$action = isset( $_GET['action'] ) $ _GET['アクション '] : "";
$username = isset( $_SESSION['username'] ) $_SESSION['username'] : "";

if( !$username ) {

header("Location:index.php?action=login");
exit;
}


ここには、スイッチを意味する重要なフロー制御ステートメントがあります。そのため、上記の $action = "Give me a girl from the sky!" が渡されるとき、可能性は 2 つだけです。 1 つがオフです。ここにはちょっとしたダジャレがあり、それを目にする学生もいるかもしれません。おいおい!

本題に戻ります。スイッチがこれらの $action をどのように切り替えるかを見てみましょう。コントローラーにはそのようなスイッチがないため、空からガールフレンドを得ることができないのは明らかです。そのため、コードについてしか話せません。 。

コードをコピーします コードは次のとおりです:
switch( $action )
{
case "newPost" :
newPost( );
Break;

case "delete" :
delete( ) ;
ブレーク;

ケース "updatePost":
updatePost( );
ブレーク;

ケース "IsDraft":
listDraft( );
ブレーク;

ケース "ログアウト" :
logout( ) ;
ブレーク;
case "ispost":
listpost();
listpost();
各スイッチはデフォルトのスイッチを定義する必要があります。これにより、ガールフレンドがいない場合でも、ゲイの友達がいることを確認できます。
実際に渡すにはどうすればよいですか?
バックグラウンド フレームワークのナビゲーションである URL を見てみましょう。これは、実際にはこれらのアクションで構成されています。これにより、コントローラーで定義されたメソッドで GET (これらの変数の値を取得) できるようになり、より詳細な制御が可能になります。
この URL がコントローラーに到達すると、判定を受け取り、isPost スイッチをオンにします。これにより、照明のオンとオフ、コンピューターのオンとオフ、スイッチのオンとオフについて考えてみましょう。それは私たちがよくやっていることです。
ここは場所を変更したところです。
わかりました。 このスイッチの次のメソッドを見てみましょう。




コードをコピーします

コードは次のとおりです:

function listPost( )
{
$results = array( );
$results['pageTitle'] = "投稿リスト" ;
$results['path'] = "Essay";
// メッセージを設定します
if ( isset( $_GET['error'] ) ) )
{
if ( $_GET['error'] == "InsertedFailed" ) $ results ['errorMessage'] = "ドキュメントの追加に失敗しました";
if ( $_GET['error'] == "postDeleteFailed" ) $results['errorMessage'] = "ドキュメントの削除に失敗しました";
}
if ( isset ( $_GET['status'] ) )
'] == "削除済み" ) $results['statusMessage'] = "文档删除了!";
if ( $_GET['status'] == "挿入済み" ) $results['statusMessage'] = "新しいドキュメントを追加! ";; 档 if ($ _Get ['STATUS'] ==" Savetodract ") $ Results ['StatusMessage'] =" ドキュメントは下書きボックスに保存されます! ";
$db = MySQL::getInstance( );
$pagination = 新しいページネーション;
$cat = 新しいカテゴリ;
$results['categories'] = $cat->getCategoryList("post");

$pagination ->countSQL = "select * from post where type = 'post' " ;
$db->Query( $pagination->countSQL );
$pagination->totalRecords = $db-> RowCount( ) ;
$records = $db->HasRecords( $pagination->rebuiltSQL( ) );
if( $records )
{
$results['posts'] = $db->QueryArray( $ pagination-> ;rebuiltSQL( ) );
require_once(TEMPLATE_PATH . "/post/post_list.php");
}
else
{
require_once(TEMPLATE_PATH . "/post/post_list.php");
}

}



配列 $results = array(); を定義しました。この配列の役割は明らかであり、モデルから取得したデータを保存し、URL からの GET の特別なパラメーターも保存できます。次に、以下の require_once(*****) に含まれるテンプレートに表示され、パスは path 変数で定義されます。

同時に、2つのプロンプトパラメータを受け取ります。
エラーとは、操作に間違いがあることを意味します。コンピューターを含め、誰でも間違いを犯すことは避けられません。重要なのは、コンピューターは良い仕事をするものであり、間違いを認める勇気を持っているということです。

status; 操作が成功したステータスを示します。

$pagination = new Pagination; このクラスは合計数を渡すと、ページにジャンプするたびに合計ページ数を計算します。つまり、コンストラクターで URL 上のページの値を GET (取得) し、それがどのページであるかを知らせます。同時に、クエリ ステートメントを再生成し、その後に、limit $start (開始 ID)、$offset (長さ) と同様の制限ステートメントを追加しました。この設定は、次のとおりです。 10、より柔軟にすることもできます。

$cat = new category; このクラスについては後で詳しく説明しますが、非常に重要な分類モデルでもあります。ここでは、このタイプの下にあるすべてのカテゴリを取得し、サイドバーに表示するだけで完了です。写真と真実があります!



このようにして、$results 配列にはページに必要なすべてのデータが保存されます。 さて、テンプレートがどのように出力されるかを見てみましょう。


コードをコピーします

コードは次のとおりです:


 
 
    
         <br>             博客后台管理
            
                       
        
    
            
                
                    
                
                
                    
                    
                
                
                    
                    
                
            

                        
操作

                    

                        

                

                
                 if( isset( $results['statusMessage'] )){echo $results['statusMessage'];}
if( isset( $results['errorMessage'] )){echo $results['errorMessage'];}
?>
                

 

    

         文章(主要用于转载,发布原创博文要通过“随笔”)
    

    
if( isset( $results['posts'] )){
echo <<



             




EOB;
foreach( $results['posts'] as $post ){
$time = date("Y-m-d H :i:s", $post['create_time']);
if( $post['status'] == "1" ){
$post['status'] = "発信";
} else {
$post['status'] = "未公開";
}
             echo <<
                
                
                
                
                
                    
            
 EOB;
         }
             echo "

标题
< /th>

公開

状態态

评论

页面

浏览

操作

操作
{$post['title']} ({$time}){$post['status']}{$post['view_count']}{$post['comment_count']}编辑删除
";               
             if( isset( $pagination) ){$pagination->createLinks( ) ;}
     } else {
         echo "当前无内容!";
     }

 ?>  

    

 


 

                        

                    

            

                
                
         
                    logout
                

                

            

&lt; div&gt;
&lt;/body&gt;&lt;/html&gt;



上記はデータを示すだけなので、誰でも実行できます。



このデータはどのように操作しますか?

操作はコントロール能力のようなものです。 学生時代にフットボールをしていたとき、私はコートをコントロールする能力が高く、大学のフットボールの試合で優勝1回、準優勝1回、3位1回を経験しました。中学時代に数々の栄誉を獲得。
私のポジションは、サッカー場でのセンターディフェンダーです。このポジションでは、全体の状況を把握する能力、強力な個人能力、そして指揮能力が必要です。今、あなたは毎日コンピューターの前に座っています。こんなものはとうの昔になくなってしまいました

体験談をいくつか残しました。しかし、味も体験する必要があります。

私のブログには欠点があります。データベースで読み取りまたは書き込み操作を実行するたびに、更新する必要があります。サーバーに大きな負荷がかかることは承知していますが、新しい技術をよく理解せずにやみくもに使っても逆効果になるだけだと感じています。

そのため、当面はサーバーの応答時間とメモリ消費を犠牲にして、相対的な安定性を実現します。

なので、全体の状況はよくわかっていませんし、ajaxの奥深くまで入ったり、phpやcの奥に入ったりなど、まだ関わっていない未知の領域がたくさんあります。 。 。 もう言うことはありません。

それでは、データを CRUD する方法を見てみましょう!

DELETE 削除

最初にこのコマンドを見てくださいpost.php?action=delete&postID=132

削除することを確認するとき、最初にドキュメントが属するカテゴリの下の count_child_number フィールドで 1 の減算操作を実行できることに注意してください。

なぜですか? 私も論理的な間違いを犯し始めたので、削除後にのみこのメソッドを呼び出しました。覚えておいてください。 reduceChildNumber() の興味深い部分はここにあり、私にとって大きな恩恵を受けました。デバッグにも時間がかかりました。

つまり、文法が正しい場合、論理が間違っている可能性があります。もしくはやり方が間違っている!それは私のメモです! ご覧ください:


コードをコピー

コードは次のとおりです:

$post = new Post;

$filter['post_id'] = isset( $_GET['postID'] ) ( int )$_GET[' postID'] : "";

// !重要 データを削除する前に、このカテゴリの記事数を 1 減らしてください // そうしないと、そのカテゴリで削除する記事の数がわかりません //論理的な誤りがあり、最初のドキュメントを削除してから、そのドキュメントのカテゴリ ID を確認してください。そのドキュメントはもう存在しないため、見つかりません。 $post->reduceChildNumber( "category", ( int ) $_GET['postID'] );
$result = $post->delete("post", $filter );



ここでは、記事の先頭でモデルを初期化する限り、簡単に delete() メソッドを呼び出すことができます。

CREATE insert
まずこのコマンドを見てくださいpost.php?action=newPost
正直に言うと、長い間挿入していませんでした。ふふ! 制御方法を参照してください:

コードをコピーします

コードは次のとおりです:


function newPost( )
{
$results['action'] = "newPost" ;
$results['pageTitle'] = " 新しい投稿を追加" ;
$results['newPost'] = "true";
$results['path'] = "随笔» 追加随笔" ;
$post = 新しい投稿;
$cat = 新しいカテゴリ;
$results['categories'] = $cat->getCategoryList( "post");
// 新建文档
if( isset( $_POST[' saveChanged'] ))
{
$post-> storePostFormValues( $_POST );
$result = $post->insertPost( );
if( $result )
{
$post->addChildNumber( "category", $_POST['category'] );
ヘッダー("場所: post.php?action=isPost&status=Inserted");
}
else
{
header("Location: post.php?action=isPost&error=InsertedFailed");
}
// 草稿箱に保存
} else if( isset( $_POST['saveDraft']) )
{
$post = new Post;
$post-> storePostFormValues( $_POST );
$post->saveDraft( );
header("Location: post.php?action=isPost&status=postSaveToDraft");
// cancel
} else if( isset( $_POST['cancel'] ))
{
header("Location: post.php?action=isPost");
}
else
{
{
require_once(TEMPL ATE_PATH 。 /post/post_edit.php");
}
}


私は 1 つのモードを使用して、同時にテキストの入力と更新を実行します。 問題は isset( ) であり、コントロールを使用する newPost メソッドを使用するとき、モード内でのテキストの転送はありません。

したがって、モードでは isset( ) 判断するとき、私たちは空きを獲得しました。これは良い西です。このようにして、私たちはユーザーの交換を待っていますが、ここでは、節約のため、テーブルのフィルタリングが行われています。後から更新する必要はありません。

我们调使用ポストモデル内のstorePostFormValues()、storeDiaryFormValues(); ご承知のとおり、この方法では、すべてのテーブルの内容が 1 つのグループに入れられ、基本的なタイプの検査が行われた後、ここまでの作業が半分完了しています。もちろん、より厳密な処理が必要な場合は、そのメソッドを継承したり、そのメソッドを拡張したり、新しいメソッドを作成したりすることができます。共有の文書が分別を選択するとき、同時に対応する分別表の count_child_number に 1 が追加されます。
ユーザーが文書をボックスに入れることを選択した場合は、 type = PostDraft の文書名を入力するだけで済みます。
UPDATE 更新
先にこの命令を参照してください post.php?action=updatePost&postID=132
最初に更新して、この文書のデータ、postID、同様に GET メソッドを取得します。 このようにして、テーブル内の値を初期化できます。 isset( ) 此処起了关键作用,不是嘛?

次の部分大同小异、storePostFormValues( ) 、storeDiaryFormValues( ); その後、ポストモデルの更新***( ) を使用します。


复制代码

代码如下:


function updatePost( )
{
$results['action'] = "updatePost";
$results['pageTitle'] = "投稿の編集";
$post = 新しい投稿;
$cat = 新しいカテゴリ;
$results['categories'] = $cat->getCategoryList("post");
if( isset( $_POST['saveChanged'] ))
{
// 更新を行います
$post->storePostFormValues( $ _POST );
$post->updatePost( );
header("Location: post.php?action=isPost&status=changesSaved") ;                   
} else if( isset( $_POST['cancel'] ) )
{
header("Location: post.php?action=isPost&status=Cancel");
}else
{
// 投稿を取得する
$postID = isset( $_GET['postID'] ) ?  $_GET['postID'] : " ";
$results['post'] = $post->getPostByID( $postID );
require_once(TEMPLATE_PATH . "/post/post_edit.php");
}

}

ここまでに多くの違いはありますが、すべての基本的な操作を実行しました。

要点を説明すると、これらのアクションにはナビゲーションがあり、生成され、大部分が固定されています。

ソースコード学的な文章が必要な場合は、ダウンロードを提供します。

http://www.bkjia.com/PHPjc/328065.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/328065.html技術記事废话不多说了,上一篇有个核心概念就是 give action do something! この篇我就用代码来解释この概念は啥意思、先看我的 post.class.php です。 この文章は...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。