以下脚本应该更新我的数据库,即环境列,其中包含下拉菜单的选定值。现在,最后一个主机的值为0.我做错了什么?好像我无法跟踪主机和所选的值。
while($row = mysql_fetch_array($result)){
$host = $row['host'];
$environment = $row['environment'];
echo "<tr><td>" . $host . "</td>
<td><select name='id[".$host."]'><option value='Null'>Select any</option>
<option value='DEV/QA/TEST'>DEV/QA/TEST</option>
<option value='PROD/STAGE'>PROD/STAGE</option>
</select></td>
<td>" . $environment . "</td></tr>"; }
echo "</tbody></table><input type='submit' value='submit'></form>";
if (gettype($_POST['id'])=="array") {
foreach($_POST['id'] as $host => $val){
$id_c = $val;
if ($val != 'Null') {
$query1 = "UPDATE hosts SET environment = '$val' where host='$host'";
$result1 = mysql_query($query1);
if($result1 === false) {
die(mysql_error());
}
echo "Environment for Host " .$host. " is updated. <br>";
}}}
更新了工作脚本。
答案 0 :(得分:0)
你的代码错了。我将尝试解释您目前正在做什么以及如何编写代码。
第一个错误:
while($row = mysql_fetch_array($result)) {
echo '<select name="id[]">';
[...]
}
您正在按主持人创建一个select
(确定)。但是一旦创建了它,你就无法说出哪个select
适用于哪个主机。你可以告诉它的唯一方法是它出现的顺序,它不是很可靠
我建议您使用主机ID(或您拥有的任何标识符)识别您的select
像这样:
while($row = mysql_fetch_array($result)) {
echo '<select name="id['.$row['host_id'].']">';
[...]
}
第二个错误:
while($row = mysql_fetch_array($result)) {
$host = $row['host'];
}
// Here, $host contains the last row
foreach ($_POST['id'] as $val) {
// UPDATE $host with $val
}
这里发生了什么:您正在使用表单传递的每个选择值更新最后一个主机。
这是你应该做的:
while($row = mysql_fetch_array($result)) {
echo '<select name="id['.$row['host_id'].']">';
[...]
}
foreach ($_POST['id'] as $host_id => $val) {
// UPDATE hosts SET environment = $val WHERE host_id = $host_id
}
通过这种方式,您将使用$_POST['id']
中的每个匹配值更新每个主机
您可以print_r($_POST)
了解其结构。