簡體   English   中英

如何使用PHP根據來自兩個不同表的表數據生成HTML表單?

[英]How would I generate an HTML form based on table data from two different tables using PHP?

我正在嘗試編寫一個PHP腳本,該腳本將使用“ field_definitions”表作為輸入字段的源來創建HTML表單,並根據先前存儲的“ user_data”表中的結果設置每個字段的默認值。 (基於當前登錄的用戶……我具有身份驗證系統設置,並使用會話變量運行。)

我的桌子是這樣的...

users TABLE
user_id user_email       user_firstname user_lastname user_password
1       johndoe@mail.com 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循環根據數組中的每一行生成表單,但是我無法弄清楚如何從另一個表中獲取第二組信息作為默認值。

$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>';

我是否需要創建其他表數據的第二個數組,然后以某種方式合並兩者?

我的一般方法可行嗎,還是有更好的方法?

我一般是PHP和編程的初學者,不希望征服那里的任何框架。 為了學習,我正在嘗試用自己的代碼實現這一目標。

考慮使用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 然后,您可以將數據逐行讀取到單個陣列/哈希/任何數據。 有關JOIN的更多詳細信息,請參見SQL手冊。

簡而言之。 我們通過字段x連接表t1t2 N是NULL(不存在)記錄。 Ljn是左聯接, Rjn是右聯接, Ijn是INNER JOIN(經常省略INNER關鍵字),而Fjn是FULL JOIN

t1.x: 1 2 3 4 5 NN

t2.x: NNN 4 5 6 7

Ljn : ^_______^----

Rjn : -----^______^

Ijn : -----^__^----

Fjn : ^___________^

您可以通過where子句中的t1.x IS NULLt1.x IS NOT NULL來檢查記錄是否不存在。

希望它會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM