データ|データベース
このコードは非常にシンプルなので、すぐに読むことができます。主な作業は、「get_checkbox_labels」と「make_checkbox_html」の 2 つの関数によって実行されます。このうち、「get_checkbox_labels」は const_skills テーブルをクエリし、各オブジェクトには id 値と対応するスキル名が含まれています。この配列とその他のパラメータを「make_checkbox_html」に渡すと、この関数はチェックボックスの HTML コードの生成に使用される文字列を返します。次に、この文字列を HTML ファイルに挿入して、さまざまなスキルの選択を含む必要なフォームを生成します。変数 $checked を「make_checkbox_html」に渡していないことに注意してください。このパラメータは、表示したいチェックされたオブジェクトの配列です。ユーザーが新しいスキルを学習した場合、ユーザーの保存されたスキル項目を事前にチェックする必要があるチェックボックスを表示する「スキルの編集」ページを提供できます。
この方法を使用してフォームを動的に作成することと、固定 HTML コードを使用してスキル チェックボックスを生成することの利点は何ですか?そうですね、おそらく、求職者がテーブル const_skills にない項目 (DHTML など) を選択できるようにすると、それをテーブル const_skills に挿入できるようになります。 DHTML オプションがもう 1 つあります。これはすべて、HTML ファイルを調整することなく実行できます。
lookup_skills を挿入
このフォームを作成したので、このユーザーが選択したスキルを保存する必要があります。 make_checkbox_html 関数では、skill[] を使用して各オプション要素を呼び出します。これは、各オプションに配列要素としてアクセスできることを意味します。このようにして、この選択をテーブル lookup_skill に挿入できます。ユーザーが 5 つのオプションを選択した場合、lookup_skill に 5 つのレコードが挿入されます。 lookup_skills テーブルの各レコードには、ユーザー ID とスキル ID の 2 つのフィールドしかないことに注意してください。私のサイト例では、ユーザーは登録してプロフィールを作成/編集できます。ログイン時にセッションを使用してユーザー ID を保存したい場合があります。ただし、ユーザー ID を管理する方法については、この記事の範囲外です。
次のコードでは、変数名 $uid を使用してこのユーザー ID にアクセスできると想定しています。レコードを挿入する関数コードは次のとおりです:
/* 挿入するために呼び出す関数は
$skills です。ユーザーが送信ボタンを押したときに
スクリプトに送信されるスキル配列
*/
function insert_skills($uid, $skills) {
/* まず、このユーザーがすでに持っているエントリをすべて削除します
table */
purge_lookup("lookup_skills", $uid);
/* SQL 挿入クエリを作成します */
$query = create_checkbox_query($skills, "lookup_skills", $uid);
/* クエリを実行します*/
mysql_query ($query);
}
/* insert_skills() のヘルパー関数。
$uid を持つ $table 内のすべての行を削除します */
function purge_lookup($table, $uid) {
$q = " DELETE FROM $table , WHERE uid = '$uid'";
mysql_query($q);
}
/* insert_skills() のヘルパー関数。
実際の SQL クエリを生成します */
function create_checkbox_query($arr, $ table, $uid ) {
$q = "INSERT INTO $table (uid, skill_id) VALUES";
foreach ($arr as $check) {
$q .= " ( $uid , $check ) " . ,";
}
/* 最後のカンマを削除して return */
return substr($q, 0, -1);
}
?>
とても簡単です。これで、const_skill テーブルからレコードを読み取ってフォームを動的に作成する方法と、ユーザーが選択したスキルを lookup_skills テーブルに保存する方法がわかりました。次は何をするの?検索を見てみましょう
検索
雇用主が Web 開発者を探して検索ページにアクセスしたとき、同じフォームを表示して、雇用主が従業員に身につけてほしいスキルを選択できるようにすることができます。彼が選択したスキルの配列を取得し、配列を反復処理して SQL ステートメントを使用して、リストまたは結果を表示し、検索者が項目をクリックしてその項目を表示できるようにすることができます。詳細。 。次の関数は、このクエリの作成方法を説明しています。
/* $skills 配列でチェックオフされたスキル
を検索するクエリを構築します */
function skill_search($skills) {
if (!empty( $skills )) {
$query = "SELECT DISTINCT user.username
FROM user, const_skills, lookup_skills
WHERE lookup_skills.uid = user.id
AND lookup_skills.skill_id = const_skills.id ";
$query .= " AND (" ;
foreach ($skills as $check) {
$query .= " const_skills.id = $check OR";
/* 最後の OR を削除 */
$query = substr($query, 0 , - 2);
$query .= ")";
$count = count($skills);
$query .= "GROUP BY user.username HAVING count(user.username) >= $count"; $クエリ .= ";"
$クエリを返す
}
;PHP と Javascript を検索する場合、この関数は次のステートメントを返します:
SELECT DISTINCT user.username FROM user, const_skills, lookup_skills WHERE lookup_skills.uid = user.id AND lookup_skills.skill_id = const_skills.id AND ( const_skills.id = 3 OR const_skills .id = 5 ) GROUP BY user.username HAVING count(user.username) >= 2;
この関数は、選択した項目の論理積を返します。つまり、PHP と Javascript の 2 つの項目を選択した場合のみです。 PHP と Javascript の「両方」のスキルを持つ求職者のユーザー名が返されます。これらのスキルのいずれかを備えた候補者を見つけたい場合は、PHP *OR* Javascript を使用できます。同じレコードを表示したい場合は、最後の "GROUP BY..." 句を削除できます。
まとめ
はい、以上です。この記事で説明したように、チェックボックスは優れたフォーム要素です。この記事が、データドリブンな Web サイトの作成に協力できることを願っています。