無限分類はすべてのプログラム開発で遭遇する問題です。ここで、php+mysql で実装された無限分類プログラムを紹介します。
私のデータベース構造をお見せしましょう: データベースの名前は: fa_category です
フィールド | タイプ | コメント |
シド | int(11) | カテゴリーID |
カテゴリ名 | varchar(255) | カテゴリ名 |
カテゴリータイプ | int(1) | カテゴリタイプ、1は単一ページ、2は一般カテゴリです |
キャットディル | varchar(255) | 英語カタログ |
ディスプレイ | int(1) | 1は表示、2は表示しないことを意味します |
キーワード | varchar(255) | コラムキーワード |
説明 | テキスト | コラム説明 |
時間 | int(11) | 作成時間 |
親ID | int(11) | 親ノードID、最上位ノードの親ノードは0です |
parentid フィールドを使用して親ノードの ID を記録します。parentid が 0 の場合、それは root です。さっそく、コードの書き方を見てみましょう。実現したい機能は次の図に示すとおりです:
このように表示するにはどうすればよいですか?私はこの質問について長い間考えてきました。まずこの SQL ステートメントを見てみましょう。
コードをコピー | |
SELECT c.cat_id、c.cat_name、c.measure_unit、c.parent_id、c.is_show、c.show_in_nav、c.grade、c.sort_order、COUNT( s.cat_id ) AS has_children
FROM ecs_category AS c |
代码如下 | 复制幣 |
パブリック関数 getCategory($catid=0,$re_type = true,$selected=0) { $db = new Public_DataBase(); $sql = 'select c.cid,c.catename,c.catetype,c.ctime,c.parentid,count(s.cid) as has_children from '. __MYSQL_PRE.'c 左結合としてのカテゴリ '. __MYSQL_PRE.'category as s on s.parentid=c.cid c.cid によるグループ c.parentid asc による順序'; $res = $db->selectTable($sql); $cateInfo = self::getChildTree($catid,$res); if($re_type==true) { $select = ''; foreach($cateInfo as $val) { $select .= ' $select .= ($selected == $val['cid']) ? "selected='ture'" : ''; $select .= '>'; if($val['レベル']>0) { $select .= str_repeat(' ', $val['level'] * 4); } $select .= htmlspecialchars(addslashes($val['catename']), ENT_QUOTES) 。 'オプション>'; } $select を返します; } それ以外 { foreach($cateInfo as $key=>$val) { if($val['レベル']>0) { $cateInfo[$key]['catename'] = "|".str_repeat(' ', $val['level'] * 8)."└─".$val['catename']; } } $cateInfo を返します; } } /** * 通过父ID递归得すべての子节点树 * @param int $catid 上级分类 * @param array $arr にはすべての分类の数グループが含まれます * @return 配列 */ パブリック関数 getChildTree($catid,$arr) { $level = $last_cat_id = 0; while (!empty($arr)) { foreach($arr as $key=>$value) { $cid = $value['cid']; if ($level == 0 && $last_cat_id == 0) { if ($value['parentid'] > 0) { 休憩; } $options[$cid] = $value; $options[$cid]['level'] = $level; $options[$cid]['id'] = $cid; $options[$cid]['name'] = $value['catename']; unset($arr[$key]); if ($value['has_children'] == 0) { 続けます; } $last_cat_id = $cid; $cat_id_array = 配列($cid); $level_array[$last_cat_id] = ++$level; 続けます; } if ($value['parentid'] == $last_cat_id) { $options[$cid] = $value; $options[$cid]['level'] = $level; $options[$cid]['id'] = $cid; $options[$cid]['name'] = $value['catename']; unset($arr[$key]); if ($value['has_children'] > 0) { if (end($cat_id_array) != $last_cat_id) { $cat_id_array[] = $last_cat_id; } $last_cat_id = $cid; $cat_id_array[] = $cid; $level_array[$last_cat_id] = ++$level; } } elseif ($value['parentid'] > $last_cat_id) { 休憩; } } $count = count($cat_id_array); if ($count > 1) { $last_cat_id = array_pop($cat_id_array); } elseif ($count == 1) { if ($last_cat_id != end($cat_id_array)) { $last_cat_id = end($cat_id_array); } それ以外 { $レベル = 0; $last_cat_id = 0; $cat_id_array = array(); 続けます; } } if ($last_cat_id && isset($level_array[$last_cat_id])) { $level = $level_array[$last_cat_id]; } その他 { $レベル = 0; } } return $options; |
}Smarty ループを使用して表示します。効果は上の写真と同じです。ご質問がある場合は、メッセージを残してください。

セッション固定攻撃を防ぐための効果的な方法には、次のものがあります。1。ユーザーがログインした後にセッションIDを再生します。 2。安全なセッションID生成アルゴリズムを使用します。 3。セッションタイムアウトメカニズムを実装します。 4。HTTPSを使用したセッションデータを暗号化します。これらの措置は、セッションの固定攻撃に直面するときにアプリケーションが破壊されないようにすることができます。

セッションのない認証の実装は、サーバー側のセッションストレージなしですべての必要な情報がトークンに保存されるトークンベースの認証システムであるJSonWebtokens(JWT)を使用することで実現できます。 1)JWTを使用してトークンを生成および検証する、2)トークンが傍受されるのを防ぐためにHTTPSが使用されることを確認する、3)クライアント側にトークンを安全に保存する、4)改ざんを防ぐためにサーバー側のトークンを検証する、5)短期アクセスや長期的なリフレイを使用するなどのトークンの取り消しメカニズムを実装する。

PHPセッションのセキュリティリスクには、主にセッションハイジャック、セッションの固定、セッション予測、およびセッション中毒が含まれます。 1。HTTPSを使用してCookieを保護することにより、セッションハイジャックを防ぐことができます。 2。ユーザーがログインする前にセッションIDを再生することにより、セッションの固定を回避できます。3。セッションの予測は、セッションIDのランダム性と予測不可能性を確保する必要があります。 4.セッションの中毒は、セッションデータを確認およびフィルタリングすることで防ぐことができます。

PHPセッションを破壊するには、最初にセッションを開始してから、データをクリアしてセッションファイルを破壊する必要があります。 1。Session_start()を使用してセッションを開始します。 2。Session_unset()を使用して、セッションデータをクリアします。 3.最後に、session_destroy()を使用してセッションファイルを破壊して、データのセキュリティとリソースのリリースを確保します。

PHPのデフォルトセッションの保存パスを変更する方法は?次の手順で達成できます。Session_save_path( '/var/www/sessions'); session_start(); PHPスクリプトで、セッション保存パスを設定します。 session.save_path = "/var/www/sessions"をphp.iniファイルに設定して、セッションの保存パスをグローバルに変更します。 memcachedまたはredisを使用して、ini_set( 'session.save_handler'、 'memcached')などのセッションデータを保存します。 ini_set(

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版
便利なJavaScript開発ツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

メモ帳++7.3.1
使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









