ホームページ >php教程 >php手册 >PHPでチェックボックスのデータをデータベースに保存する(1)

PHPでチェックボックスのデータをデータベースに保存する(1)

WBOY
WBOYオリジナル
2016-06-13 12:45:321034ブラウズ


はじめに

チェックボックスは、ユーザーに複数の選択を許可する場合に、すべての項目を選択することも、何も選択しないこともできる非常に便利なページ フォーム項目です。ただし、これは優れたフォーム要素ですが、私たちの作業では、選択内容を適切に保存する方法について常に混乱が生じます。この記事では、適切なデータベース設計原則に従って、チェックボックスの選択をデータベースに正しく保存する方法について説明します。

要件

この記事では、選択内容をユーザー データベースに正しく保存する方法について説明します。ここには便利な PHP コードが含まれていますが、データベース設計の観点から表現するので、任意のデータベースおよびサーバー側スクリプト言語を使用して簡単に実装できます。私は、あなた自身のサイトに適用できるハウツーを提供したいだけです。ここでソースコードを実行したい場合は、php、mysql、および Web サーバーをインストールする必要があります。

例 1: 採用サイト

雇用主がそのサイトにアクセスして仕事探しの拠点にできるように、求職中のソフトウェア開発者が自分のスキルを記入できる採用 Web サイトを作成するように依頼されたとします。求職者に適切な従業員を見つけるスキルを提供します。また、開発者は複数のスキル セットを持つことができることもわかっているため、そのようにサイトを設計することにします。

すべての求職者がこのサイトにアクセスし、ユーザーとして登録し、自分のスキルを入力できるようになります。

__ のようなページを作成すると便利です。 PHP __ MySQL __ Zope
__ Perl __ Javascript __ JSP

[送信]

すべての求職者は、自分が所有するスキルを選択できます。明らかに、選択肢は人によって異なります。 1 つは PHP と MySQL であり、もう 1 つは単なる JSP である可能性があります。これらの選択内容をどのように保存しますか?自然なアイデアは、オプションごとにフィールドを作成して、最初は正常に機能するようにすることです。しかし、拡張または調整するときに問題が発生し、テーブル構造を変更しなければならない場合があります。
良い方法は次のようになります。

ユーザー名、パスワード、その他の必要なコンテンツなどのユーザーの登録情報を含むユーザー テーブルを用意する必要があります。この記事で後述するソース コードを直接使用する場合は、次のような単純なテーブルを作成する必要があります:

id username
1 User1
2 User2
3 User3

us まず、次の SQL ステートメントを使用してテーブル "const_skills" を作成します。 >
次にスキルを追加します:

SQL> INSERT INTO const_skills(id, value) VALUES (1, "PHP"); , "MySQL ");
SQL> INSERT INTO const_skills(id, value) VALUES (3, "Zope");
SQL> INSERT INTO const_skills(id, value) VALUES (4, "Perl");
SQL> INSERT INTO const_skills(id, value) VALUES (5, "Javascript");
SQL> INSERT INTO const_skills(id, value) VALUES (6, "JSP");あなたのconst_skillsは次のようになります:

id value
1 PHP
2 MySQL
3 Zope
4 Perl
5 Javascript
6 JSP

このテーブルでは、ユーザーは対応するスキルのみを選択できます。次に、次の SQL を使用して別のテーブル lookup_skills を作成します:

SQL> CREATE TABLE lookup_skills (
id int not null auto_increment Primary key, uid int ,
skill_id int );

このテーブル lookup_skills の目的は、ユーザー テーブルから開発スキル テーブルへのマッピング関係を提供することです。言い換えれば、開発者と彼らが持つスキルを保存できるため、候補者が選択を完了して送信をクリックすると、チェックボックスで選択された値をフォームに入力することになります。選択したスキルごとに、このテーブルにレコードを追加し、ユーザー ID と選択したアイテムの ID を記録します。 (これは誰もが知っていると思います。これは私が翻訳したものです、へへ...)

レコードを挿入するコードを確認する前に、まずこのページを設計しましょう。クエリできるコンテンツのフォームが必要です。データベースを作成し、const_skills テーブルからチェックボックス ラベルを取得して、このチェックボックス フォーム項目を作成します。

代码如下:

< ?php

/* ここにデータベースに接続するコードを挿入します */

/* チェックボックスのラベルを取得します */
$skills = get_checkbox_labels("const_skills");

/* フォーマットされた
チェックボックスのセットの HTML コードを作成します */
$html_skills = make_checkbox_html($skills, 3, 400, "skills[]");

? >


< html >
<本体>
< br>
< form name="skills" method="POST" action="insertskills.php" >
Web 開発スキルをチェックしてください:
< ?エコー "$html_skills"; ? >
< br>
< input type="submit" value="submit" >
< /フォーム>
< /ボディ>
< /html >

< ?php

function get_checkbox_labels($table_name) {

/* 配列を作成します */
$arr = array();

/* クエリを構築します */
$query = "SELECT * FROM $table_name";

/* クエリを実行します */
$qid = mysql_query($query);

/* 結果セットの各行は
オブジェクトとしてパッケージ化され、配列に入れられます */
while($row= mysql_fetch_object($qid)) {
array_push( $arr、$row);
}

return $arr;
}

/* チェックボックスの選択肢を適切にフォーマットした表を印刷します。

$arr は、選択肢を含むオブジェクトの配列です。
$num は、テーブルに表示する幅の要素の数です。
$width は、テーブル タグの幅パラメータの値です。
$name はチェックボックス配列の名前です
$checked はチェックする必要がある要素名の配列
*/


function make_checkbox_html($arr, $num, $ width, $name, $checked) {

/* HTML を保持する文字列を作成 */
$str = "";

/* 作成します */
$str .= "< table width="$width" border="0" >n";
$str .= "< tr >n";

/* テーブルの最後に
終了 tr タグを追加するかどうかを決定します */
if (count($arr) % $num != 0) {
$closeTR = true;
}

$i = 1;
if (isset($checked)) {
/*
をチェック済みとして表示したいチェックボックスの配列を渡した場合 */
foreach ($arr as $ele) {
$str .= "< td >< input type="checkbox" name="$name" value="$ele- >id"";
foreach ($checked as $entry) {
if ($entry == $ele- >value) {
$str .= "checked";
続き;
}
}
$str .= " >";
$str .= "$ele- >value";

if ($i % $num == 0) {
$str .= "< /tr >n< tr >";
} else {
$str .= "< /td >n";
}
$i ;
}

} else {
/* チェックボックスを印刷したいだけです。チェックはありません */
foreach ($arr as $ele) {
$str .= "< td >< input type="checkbox" name="$name" value="$ele - >ID" >";
$str .= "$ele- >value";

if ($i % $num == 0) {
$str .= "< /tr >n< tr >";
} else {
$str .= "< /td >n";
}
$i ;
}

}

/* 必要に応じて、終了 tr タグを付加します */
if ($closeTR == true) {
$str .= "< ; /tr > n";
} else {
$str .= "< /table >n";
}

return $str;
}


? >

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。