2015-07-03 59 views
2

用於填充數據庫的表單必須與數據庫中的各個字段保持最新。如何在動態生成表單的地方插入數據庫值

因此一個動態表單域是必需的:

<table> 
    <tr> 
     <th>Intermediate</th> 
     <th>Advanced</th> 
     <th>No selection</th> 
    </tr> 
    <?php 
     $sth = $dbh->prepare("SELECT SkillName FROM Skill"); 
     $sth->execute(); 
     $tempCounter = 1; 

     while($row = $sth->fetch()) { 
     echo ("<tr> 
       <td colspan=\"3\"> 
        <label for=\"td".$tempCounter."\">".$tempCounter.". ".$row['SkillName']."</label> 
       </td> 
      </tr>"); 

     echo (" 
     <tr> 
      <td> 
       <input type=\"radio\" name=\"".$row['SkillName']."\" id=\"tdA".$tempCounter."\" value=\"1\"/> 
      </td> 
      <td><input type=\"radio\" name=\"".$row['SkillName']."\" id=\"tdB".$tempCounter."\" value=\"2\"/> 
      </td> 
      <td><input type=\"radio\" name=\"".$row['SkillName']."\" id=\"tdC".$tempCounter."\" value=\"\" /></td> 
     </tr>"); 
     $tempCounter++; 
     } 
     ?> 
</table> 

不過,我不知道如何去將數據插入到數據庫時,它是不明確的數據可能是什麼(特別是SkillName)

在僞代碼將是("INSERT INTO PersonSkill (PersonID, SkillName, SkillValue) values ($personid, $skillname, $skillvalue)")其中$personid已定義

$skillname是在寫的形式的時間未知的,並且$skillvalue是整數。

因此,如果HTTP頭信息可能看起來像

- [personid] => 101 
- [firstaid] => 2 
- [swimming] => 1 
- [mechanics] => 0 
- [firearms] => 
- [athletics] => 2 

我怎麼可能迭代此類值?我總是可以使用數據庫本身預期值,但拼圖的最後一塊是躲避我......

while($row = $sth->fetch()) { 
if (isset($_POST[''.$row['SkillName'].''])) 
// And er... save some variable at this point I suppose, or perhaps append to an array... 
} 
+0

正在將技能名稱存儲到會話中供將來使用,這是可行的選項? – Spade

+0

@Kepoly我可以這樣做......但那隻會推遲問題,當然? – Stumbler

+0

你打算如何插入?按鈕點擊? jQuery的?表單發佈?我假設發佈「isset($ _ POST」,但只是想確認。 – jmcclure

回答

2

把你skillinputsarray

<input type=\"radio\" name=\"skill[".$row['SkillName']."\]" id=\"tdA".$tempCounter."\" value=\"1\"/> 

所以你可以建立您在網頁中查詢其發佈到(因爲我未從閱讀你的問題評論說,你這樣做derstood):

$query = ' 
    INSERT INTO 
     PersonSkill 
    (
     "PersonID", 
     "'.implode('","', array_keys($_POST['skill'])).'" 
    ) 
    VALUES 
    (
     '.$personid.', 
     "'.implode('","', array_values($_POST['skill'])).'" 
    ) 
'; 

它應該輸出這樣的事情,如果你在一個空值左firearms和形式選擇2 dance

string(195) " 
    INSERT INTO 
     PersonSkill 
    (
     "PersonID", 
     "firearms","dance" 
    ) 
    VALUES 
    (
     69, 
     "","2" 
    ) 
" 

但是,如果您不想發佈,您可以使用array_filter空值清理出來:

$skills = array_filter($_POST['skill']); 

$query = ' 
    INSERT INTO 
     PersonSkill 
    (
     "PersonID", 
     "'.implode('","', array_keys($skills)).'" 
    ) 
    VALUES 
    (
     '.$personid.', 
     "'.implode('","', array_values($skills)).'" 
    ) 
'; 

除非我當然誤解了你。注意:這只是一個例子。至少escape你的變量。

1

如何循環通過POST變量來代替,並使用$鍵將它們插入=> $值

foreach($_POST as $skillname => $skillvalue){ 

    $sql = "INSERT INTO PersonSkill (PersonID, SkillName, SkillValue) values $personid, $skillname, $skillvalue);"; 

} 
相關問題