PHP下拉菜单脚本不更新数据库

时间:2015-08-19 16:51:46

标签: php html

以下脚本应该更新我的数据库,即环境列,其中包含下拉菜单的选定值。现在,最后一个主机的值为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>";

}}}

更新了工作脚本。

1 个答案:

答案 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)了解其结构。