2012-03-21 9 views
1

"field_definitions"テーブルを入力フィールドのソースとしてHTMLフォームを作成し、 "user_data"テーブルの以前に格納された結果に基づいて各フィールドのデフォルト値を設定するPHPスクリプトを作成しようとしています。 (現在ログインしているユーザーに基づいて...私は、認証システムを設定していると、セッション変数を使用して実行されている。)PHPを使用して2つの異なるテーブルのテーブルデータに基づいてHTMLフォームを生成するにはどうすればよいですか?

私のテーブルはとても似ています...

users TABLE 
user_id user_email  user_firstname user_lastname user_password 
1  [email protected] John   Doe   password 

field_definitions TABLE 
field_id field_type field_length field_name field_desc     field_section 
1  text  40   color  What is your favorite color? 1 

user_data TABLE 
response_id user_id field_id user_response 
1   1  1  Blue 

は、私は、コードのブロックを作成したこと私の "field_definitions"テーブルから行を返し、それらを配列に格納します。 foreachループを使用して配列の各行に基づいてフォームを生成することはできますが、デフォルト値の別のテーブルから2番目の情報セットを引き出す方法を見つけることはできません。

$dbc = mysqli_connect(sqlhost, sqluser, sqlsecret, sqldb); 

$field_definitions_query = "SELECT * FROM field_definitions WHERE field_section = '1'"; 

$field_definitions_data = mysqli_query($dbc, $field_definitions_query); 

$field_definitions = array(); 

while ($row = mysqli_fetch_array($field_definitions_data)) { 
    array_push($field_definitions, $row); 
} 
echo '<form enctype="multipart/form-data" method="post" action="' . $_SERVER['PHP_SELF'] . '">'; 

foreach ($field_definitions as $row) { 
echo '<label for="' . $row[field_name] . '">' . $row[field_desc] . ':</label>'; 
echo '<input type="' . $row[field_type] . '" id="' . $row[field_name] . '" name="' . $row[field_name]. '" value="temp" /><br />'; 
} 

echo '<input type="submit" value="Save" name="submit" /></form>'; 

他のテーブルデータの2番目の配列を作成してから、2つを一度にマージする必要がありますか?

私の一般的なアプローチは実現可能ですか、それとも良い方法がありますか?

私はPHPとプログラミングの初心者であり、そこのフレームワークを試して克服しようとはしません。私は学習のために自分のコードでこれを取り除こうとしています。

+1

あなたは本当にあなたのホスト名を公開するこれらのイメージを削除するべきです!あなたの投稿にあなたのSQLを置くことができます – Cfreak

+0

あなたはこれまでのコードを投稿できますか? – jeroen

+0

JOINについて学びたい。結合コマンドは、SQLが行うことの基本的な部分であり、スプレッドシートにすべてのデータを格納することとは区別されます。 JOINについて学ぶと、レベルアップを2回行い、SQLの真のパワーの大部分を解放します! [Here](http://www.tizag.com/sqlTutorial/sqljoin.php)は、あなたを始められる多くの簡単なチュートリアルの1つです。 protip:一部の人は、内部結合と外部結合について話をしてJOINを導入したいと思っています。まっすぐですが、初心者としては、ほとんどの場合、内部結合を使用しているので、他のものがあなたを混乱させないようにしてください。 – octern

答えて

1

SQL JOIN構造の使用を検討してください。 MySQLの場合、次のようなものになります: select t1.*, t2.user_response from field_definitions t1 left join user_data t2 using (field_id) where t2.user_id = %USER_ID% or t2.user_id is null。次に、行ごとに1つの配列/ハッシュにデータをフェッチすることができます。 JOINの詳細については、SQLのマニュアルを参照してください。

要するに、テーブルt1t2をフィールドxで結合しています。 NはNULL(存在しない)レコードです。 Ljn左は、JOINあるRjnはRIGHT JOINで、Ijn

t1.x: 1 2 3 4 5 N N

t2.x: N N N 4 5 6 7

Ljn : ^_______^----

Rjn : -----^______^

をJOIN内部結合(INNERキーワードが頻繁ommitedれる)とFjnが一杯になっていますIjn : -----^__^----

Fjn : ^___________^

レコードがwhere句で存在しないt1.x IS NULLずつまたはt1.x IS NOT NULLであるかどうかを確認できます。

希望すると助かります。

+0

t1&t2とは何ですか?私はSQLにも新しいです。私はMySQLを使用しています。 – Corey

+0

テーブルfield_definitionsとuser_dataテーブルのエイリアスです。 –

+0

それはfield_definitions AS t1であるか、それとも暗黙のことでしょうか? – Corey

関連する問題