2015-07-03 76 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);"; 

} 
相关问题