我有一个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");
(如果这个问题太基本,我很抱歉。我真的尝试过很多东西并且看了很多地方。我正在学习。任何帮助都会受到赞赏)
答案 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)
您无法通过循环遍历数组的键来找到名称......但不要。
您对name
和value
使用相同的值,因此请为它们指定相同的名称,然后循环显示它。
<input type="text" name="item[]" value="<?php echo htmlspecialchars($row["concept"]); ?>">
([]
是由于PHP的一个怪癖,需要重复的名称在[]
结束才会膨胀到数组而不是丢弃其中一个而不是其中之一)
然后你可以循环:
foreach ($_POST['item'] as $item) {
# Do something with $item
}