如果动态生成表单,如何发送id?

时间:2014-07-22 14:18:30

标签: php mysqli

我有一个MySql表:

id   concept
-------------
1    item1
2    item2
3    item3

我尝试在hmtl中动态生成此表(我不确定我是否做得很好):

<form action="extern.php" method="post">
<?php  
$result = mysqli_query($con, 'SELECT * FROM MyTable');
while ($row = mysqli_fetch_array($result)) {
?>

<input type="text" name="<?php echo $row["concept"] ?>"
value="<?php echo $row["concept"] ?>"><br>

<?php 
}
?>
<input type="submit">
</form>

这给出了html的来源:

<form action="extern.php" method="post">
    <input type="text" name="item1" value="item1"><br>
    <input type="text" name="item2" value="item2"><br>
    <input type="text" name="item3" value="item3"><br>
    <input type="submit" name="send">
</form>

然后我将php放在extern.php中。这是我的问题:
如何知道每个输入的id以匹配更新中的概念?

$id = $_POST["something"];  // how should I do this var?
$concept = $_POST["something"]; // how should I do this var?

mysqli_query($con,"UPDATE MyTable 
                   SET concept = '$concept'
                   WHERE id = $id");

(如果这个问题太基本,我很抱歉。我真的尝试过很多东西并且看了很多地方。我正在学习。任何帮助都会受到赞赏)

2 个答案:

答案 0 :(得分:0)

输入字段的名称将是name和id的组合 concept_id

例如

 <form action="" method="post">
     <input type="text" name="item1_21" value="item1"><br>
     <input type="text" name="item2_22" value="item2"><br>
     <input type="text" name="item3_23" value="item3"><br>
     <input type="submit" name="send">
 </form>

然后在extern.php上通过下划线爆炸后键

foreach($_POST as $key => $value){        
  if(preg_match('/[_]/i', $key )){
     $postArr = explode('_', $key);
  }
}

当你打印$ postArr时,你会得到类似下面的结果

 array (size=2)
  { 0 => string 'item1' (length=5)
    1=> string '21'
  }

现在你有两个要更新的值

 $concept = $postArr[0] 
 $id = $postArr[1] 

 mysqli_query($con,"UPDATE MyTable 
               SET concept = '$concept'
               WHERE id = $id");

答案 1 :(得分:0)

您无法通过循环遍历数组的键来找到名称......但不要。

您对namevalue使用相同的值,因此请为它们指定相同的名称,然后循环显示它。

<input type="text" name="item[]" value="<?php echo htmlspecialchars($row["concept"]); ?>">

[]是由于PHP的一个怪癖,需要重复的名称在[]结束才会膨胀到数组而不是丢弃其中一个而不是其中之一)

然后你可以循环:

foreach ($_POST['item'] as $item) {
     # Do something with $item
}