如何在动态生成表单的位置插入数据库值

时间:2015-07-03 16:22:47

标签: php mysql

用于填充数据库的表单必须与数据库中的相应字段保持同步。

因此需要动态表单字段:

<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...
}

2 个答案:

答案 0 :(得分:2)

将您的skill inputs变为array

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

因此,您可以在其发布的页面中构建您的查询(因为我从阅读您的问题的评论中了解到这一点):

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

如果您将firearms留在空值上并在表单中为dance选择2,则应该输出这样的内容:

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 :(得分:1)

如何循环使用POST变量,并使用$ key =&gt;插入它们? $值

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

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

}