0


0

(PHP&mySQL)行を列として扱う

PHPとmySQLベースのWebサイトで作業しています。 サイトを管理するためのさまざまな設定を入力できる管理パネルの「設定」ページを設定しようとしています。 設定は、要件に応じて最大100(またはそれ以上)の範囲にすることができます。 そのため、100列を作成するのではなく(将来さらに列を追加する必要がある場合は増加する)、データを行ごとの形式で保存し、列から取得するかのように値を取得します。

参照:

最も人気のあるブログツール「Wordpress」で、このような機能の同様の現実の実装を見つけました。 参考のために、それは私が話している「wp_options」テーブルです(私を修正してください私は間違っています)

例:

ここに、私がそのようにしようとしているもの(&理由)の簡単な例を示します:

--Table settings

P.KEY   option_name      option_value
1       site_name        XYZ site inc.
2       siteurl          http://www.xyz.com
3       slogan           Welcome to my XYZ site
4       admin_email      [email protected]
5       mailserver_url   mail.xyz.com
6       mailserver_port  23
..... etc.

上記からわかるように、私は非常に少数のオプションをリストしており、それらの数は増えています。 (記録のためだけに、Wordpressのインストールではwp_optionsテーブルに902行あり、option_nameの重複は見られませんでした)。 ですから、Wordpressと同じ動作原理を適用して設定の成長に対応すれば、私は十分に満足していると感じています。 また、DBにすべての設定を保存したら、すべての設定を取得し、DBにエントリが存在するフォームの各フィールドにデータを入力するようにします。

コードトライアルの1つ:

--
-- Table structure for table `settings`
--

CREATE TABLE IF NOT EXISTS `settings` (
  `set_id` tinyint(3) NOT NULL auto_increment,
  `option_name` varchar(255) NOT NULL,
  `option_value` varchar(255) NOT NULL,
  PRIMARY KEY  (`set_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dumping data for table `settings`
--

INSERT INTO `settings` (`set_id`, `option_name`, `option_value`) VALUES
(1, 'site_name', 'XYZ site inc.'),
(2, 'slogan', 'Welcome to my XYZ site');

$result = mysql_query("SELECT option_name, option_value FROM settings");
$defaults = array('option_name', 'option_value');


while( list($n, $v) = mysql_fetch_array($result) )
{
 $defaults['option_name'] .= $n;
 $defaults['option_value'] .= $v;
}

echo  $defaults['option_name'].'---'.$defaults['option_value'].'
';

//The above code gives me the following Output:
//site_nameslogan---XYZ site inc.Welcome to my XYZ site

上記のクエリを実行すると、次の2つのPHP通知も受信します。

未定義のインデックス:option_name

未定義のインデックス:option_value

オプションを正常に取得し、未定義のインデックスの問題を排除するための* PHPコード*を表示できる返信をいただければ幸いです。 また、前述のように、データを保存した後、次に設定ページにアクセスしたときに、既存の設定をすべて取得し、フォームの各フィールドにデータを入力します。

事前にすべてに感謝します。

2 Answer


4


PHPは、 .default ['option_name']`と `$ defaults ['option_value']`が `。=`操作で使用される前に初期化されないため、警告を出します。

だから置いて

$defaults['option_name'] = '';
$defaults['option_value'] = '';

ループと警告がなくなる前に。

残りのコードは完全に正しいですが、すべての設定に一意の名前があるため、 set_id`カラムはまったく必要ありませんが、その名前( option_name`カラム)は主キーとして使用できます。

コードを改善できるもう1つのことは、 `$ defaults`を別の方法で使用することです。

$defaults[$n] = $v;

次に、2つの巨大な文字列を見ずに、すべての設定を単独で使用できます。

$site_url = $defaults['site_url'];
foreach ($defaults as $name => $value) {
   echo $name, ' = ', $value, '
';
}


1


これでうまくいくはずです。

$defaults = array('option_name' => array( ), 'option_value' => array( ) );

while( list($n, $v) = mysql_fetch_array($result) )
{
 $defaults['option_name'][] = $n;
 $defaults['option_value'][] = $v;
}

次に、ビューで `$ defaults ['option_name']`と `$ defaults ['option_value']`を繰り返し処理します