【问题标题】:How do I use the passed value as the default in a dropdown menu?如何在下拉菜单中使用传递的值作为默认值?
【发布时间】:2011-10-14 21:02:44
【问题描述】:

--编辑以更好地描述场景--

我有一个 MySQL 数据库,其中包含 2 个表、技术人员和工作订单。技术人员表包含 techID、tech_surname、tech_firstname 和 tech_userlogin 列。 work_orders 表包含jobID (PK)、wtechID、wtech_surname、wtech_firstname 和wtech_userlogin 等列。

我有一个包含重复区域的页面,其中列出了提交的工作订单,工作订单的日期是一个链接,它将 URL 中的 jobID 传递到包含更新表单的页面。该表单填充了从 work_orders 表中获取的数据,特别是 jobID(客户名称、地址、维修设备、问题等)。表单上有一个从技术人员表中填充的下拉列表。此下拉列表列出了技术人员的 tech_userlogin。我在表单页面中包含了隐藏字段 wtech_userlogin 和 wtechID。 当我查看页面的源代码时,它会显示 work_orders 表中的值,但我不知道如何将其用于查询以实现所需的结果。

当表单发布时,它会更新 work_orders 表。所有这些都在起作用。 如果已经选择了技术人员,我希望完成的是让特定工作订单的 wtech_userlogin(来自 work_orders 表)成为下拉菜单的默认值。如果之前没有从下拉菜单中进行选择,我希望下拉菜单的默认值为“--Select Technician--”。我已经尝试了一些东西,但到目前为止没有任何效果。

这是下拉菜单的代码:

<select name="tech_userlogin" id="tech_userlogin">
              <?php
        $sql="SELECT techID, tech_userlogin FROM technicians";
$result=mysql_query($sql);

$options="";

while ($row=mysql_fetch_array($result)) {

    $techID=$row["techID"];
    $tech_userlogin=$row["tech_userlogin"];
    $options.="<option value=\"$tech_userlogin\">$tech_userlogin</option>";
}

if(empty($tech_userlogin)) {
die ('You must select a Technician');
}

?>
              <option value='<?php echo $options; ?>' selected='selected'>""<?php echo $options; ?>
          </select>

谁能帮我解决这个问题?任何帮助将不胜感激。我对 PHP 和 MySQL 很陌生。我正在学习网页设计课程,我们使用 Dreamweaver。我想脱离 Dreamweaver 并学习如何在没有向导的情况下做到这一点。我已经能够发布我的表单,并且我的所有插入、更新和删除功能都可以使用我从互联网上拼凑起来的东西,但是这个真的让我很难过。

干杯。

【问题讨论】:

  • 为什么你要大写一些元素和属性而不是其他的?这真的很烦人。
  • 我接受了您的建议,但发现您的交付有点苛刻。

标签: php mysql


【解决方案1】:

你想要的是这样的:

<select name="tech_userlogin" id="tech_userlogin">
<?php
    $sql="SELECT techID, tech_userlogin FROM technicians";
    $result=mysql_query($sql);

    while ($row=mysql_fetch_array($result)) 
    {
        $techID = $row['techID'];
        $tech_userlogin=$row['tech_userlogin'];

        // Here - check if the tech id in the query matches the logged in tech's id
        $selected = ($techID == $_SESSION['techID']) ? 'selected="selected"' : '';

        echo '<option value="' . $tech_userlogin . '" ' . $selected . '>' . $tech_userlogin . '</option>' . "\n";
    }

?>
</select>

【讨论】:

  • 感谢您的回复。我想要做的是传递先前选择的 tech_userlogin 的值。例如,已为工作分配了技术人员,但需要更改工作的详细信息。因此,当更新页面填充时,它会使用先前选择的值(已选择 tech_userlogin)填充下拉列表。如果没有指定技术人员,那么我希望下拉列表中的默认值为空白或 --- 选择技术 --- 或类似的东西。
  • 你可以把$techID == $_SESSION['techID']改成$tech_userlogin == $_GET['tech_userlogin']
  • 嗨。它仍然无法正常工作。当更新表单发布时,它会更新 work_orders 表。下拉菜单中的值作为 wtech_userlogin 存储在 work_orders 中。 techID 是表单上的隐藏字段,并将 work_orders 表更新为 wtechID。我试图在下拉字段中显示的值是 work_orders 表中的 wtech_userlogin。我是否需要在查询中包含 work_orders 表?如果是这样,我会怎么做。谢谢您的帮助。干杯。
  • 您在表单上使用method="post" 吗?如果是这样,请使用$_POST['tech_userlogin'] 而不是$_GET['tech_userlogin']。你遗漏了很多数据:)
  • 我对此很陌生。情况是这样的。我有一个列出所有工单的重复区域。当我单击工单时,我会被引导到带有表单的更新页面。 jobID(work_orders 表的 PK)作为 URL 传递。更新表单中填充了与该特定 jobID 对应的数据。在更新页面上是一个下拉菜单,该菜单是从数据库中的另一个表中填充的,技术人员。表单发布和结果存储在 work_orders 表中。我希望使用 work_orders 表 wtech_userlogin 中的值填充下拉默认值。
【解决方案2】:

嗯,你的代码有很多问题。让我们从我看不到您在哪里指定选择的事实开始。您应该通过帖子将其发送到脚本。然后,您将选项标签连接到一个字符串中,然后将该字符串作为值添加到另一个选项。最后,您的变量 $tech_userlogin 是数据库表 Technicals 中最后一行的 tech_userlogin 列的值。

编辑 1:请参阅评论。

让我们尝试修复它:

<?php
    // first thing: check if a post was sent
    if($_POST)
    {
        if(!empty($_POST['technician']))
        {
            @session_start();
            $_SESSION['tech'] = $tech;
        }
    }

    if(!empty($_SESSION['tech']))
    {
        $tech = $_SESSION['tech'];
    }
    echo '<form action="" method="post">


    $sql = "SELECT `techID`,`tech_userlogin` FROM `technicians`";
    $sql = mysql_query($sql);

    if(!mysql_num_rows($sql))
    {
        echo 'There is no technician in the database'; // or use die for radical thinking
    }

    $options = '';
    $technicians = array();
    echo '<select name="tech_userlogin" id="tech_userlogin">';
            if(empty($tech))
            {
                echo '<option value="">-- Select technician --</option>';
            }
    while($row = mysql_fetch_array($sql))
    {
         $technicians[] = $row;
         $options .= '<OPTION VALUE="'.$tech_userlogin.'" '.((!empty($tech) && $tech == $tech_userlogin)) ? 'selected="selected"' : '').'>'.$tech_userlogin.'</option>';
    }

    echo $options;
    echo '</select>';
    echo '<input type="submit" value="Please submit you selection" />';
    echo '</form>';

?>

希望对你有帮助:)。

【讨论】:

  • 感谢您回复我。我想也许我还不清楚我想做什么。 tech_userlogin 来自技术人员表。当从下拉列表中选择 tech_userlogin 时,该值将发布到 work_orders 表,该表与特定作业的其他详细信息一起存储为 wtech_userlogin。因此,如果在分配技术后编辑工作订单,我希望下拉列表的默认值填充与该特定工作的 work_orders 表中的 wtech_userlogin 匹配的 tech_userlogin。让我知道这是否清楚。干杯
  • 好吧,现在我明白了……它需要更多的代码。而另一个select,或者是sql语句中的一个join。您能否进一步解释一下 work_orders 表的外观,我的意思是,您可以执行以下操作: $query = 'SELECT * FROM works_order where wtech_userlogin = "'.$tech_userlogin.'"';但是,您会看到该表中可能有不止一名技术人员。请提供更多详细信息。
  • 您好,work_orders 表有一个字段 wtech_login,其值来自技术人员表字段 tech_userlogin。因此,当从下拉列表中选择 tech_userlogin 时,该值将发布并存储在 work_orders 表中。我同意查询,但不知道如何加入表格。 techID 作为 wtechID 存储在 work_orders(针对特定工作)中,tech_userlogin 作为 wtech_userlogin 存储。这是你的意思吗?
猜你喜欢
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
相关资源
最近更新 更多