Php 难以从动态下拉列表中获取要发布的值

Php 难以从动态下拉列表中获取要发布的值,php,mysql,Php,Mysql,G'day, 我在获取在我制作的表单上发布的正确值时遇到问题。它正在传递ID而不是名称。 这是我的密码: <td name="tech_userlogin" id="tech_userlogin" align="right" valign="top"><select name="tech_userlogin" id="tech_userlogin" class="db_field_name"> <?php $sql="SELECT

G'day, 我在获取在我制作的表单上发布的正确值时遇到问题。它正在传递ID而不是名称。 这是我的密码:

<td name="tech_userlogin" id="tech_userlogin" align="right" valign="top"><select name="tech_userlogin" id="tech_userlogin" class="db_field_name">

        <?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=\"$techID\">$tech_userlogin</option>";
    }
    ?>

    <OPTION VALUE="">---Select---
    <?php echo $options; ?>
    </SELECT> 

---挑选---
该表单将发布到此页面:

<?php
include 'sql_connect_R.inc.php';

$id = mysql_real_escape_string($_POST['jobID']); 
$equip = mysql_real_escape_string($_POST['wo_equip']);
$techID = mysql_real_escape_string($_POST['techID']);
$tech_login = mysql_real_escape_string($_POST['tech_userlogin']);

mysql_query("UPDATE work_orders SET wo_equip = UCASE('$equip'), wo_techID = '$techID', tech_userlogin = '$tech_login'
WHERE jobID = '$id'");

mysql_close($con);

表单上的$row['techID']被设置为下拉菜单tech\u userlogin(最终是$u POST['tech\u userlogin'])。有几种方法可以解决这个问题

1) 在选项的值字段中发布这两个值,并在处理端使用以下命令将其分开:

 $techArray = explode(',',$string); 
 # $techArray[0] will be either the id or login
 # $techArray[1] will be the other
由于可能存在安全问题,不建议这样做


2) 刚刚通过下拉框通过techID,然后进行另一个查询,以获取帖子页面上的用户登录信息,并使用它填写TechU用户登录字段。建议您将选择框命名为“tech_userlogin”,但在选项标签中,该值设置为techid。由于该值是在$\u请求数组中发送回来的值,请尝试以下操作:

while ($row=mysql_fetch_array($result)) {
    $tech_userlogin=$row["tech_userlogin"];
    $options.="<OPTION VALUE=\"$tech_userlogin\">$tech_userlogin</option>";
}
while($row=mysql\u fetch\u array($result)){
$tech_userlogin=$row[“tech_userlogin”];
$options.=“$tech\u userlogin”;
}

我相信这会给你你想要的。

它之所以会传递技术id,是因为当你提交一个下拉列表时,
值是。。。好。。价值观

如果要传递值和名称,可以通过各种方式进行传递

第一种方法是使用Javascript(jQuery非常好),您可以将
change
事件绑定到
tech\u user\u login
下拉列表。因此,当此更改时,它可以更新列表中所选项目内容的隐藏输入

第二种方法是将技术id和技术登录名存储在选项的值中,例如:

$techID=$row["techID"];
$tech_userlogin=$row["tech_userlogin"];
$options.="<OPTION VALUE=\"$techID~~$tech_userlogin\">$tech_userlogin</option>";
$techID=$row[“techID”];
$tech_userlogin=$row[“tech_userlogin”];
$options.=“$tech\u userlogin”;
然后,当值被发布时,您可以简单地执行如下操作:
$array\u tech=explode(“~~”,$\u POST[“tech\u userlogin]”)
并使用
$array\u tech[0]
作为技术id,使用
$array\u tech[1]
作为技术登录名


最后,您可以在下一页发布值并使用第二个查询查询技术登录。

首先在
include'sql\u connect\R.inc.php'中签入所选的值
if(isset($\u REQUEST['tech\u userlogin'])
这将为您提供选择框的值,即
$tech\u userlogin
。请注意,只需提供值
$techID
,而不是
$tech\u userlogin
。如果您想要
$tech\u userlogin
的结果,请再次运行一个查询,查询值将通过
$techID
获得


希望这能帮助您

为什么要在TD上使用name属性?您如何检索结果?这是什么意思“通过$techID和$tech_用户登录”实现的”?正如我所说,我在这方面很新。我没有一个好的答案来命名TD。它是表单的一部分,用于发布到另一个页面以更新表。下面是该页面的代码:抱歉。我已经将表单发布到的页面包含在问题的编辑中。wo_Equipment正在更新,work_orders表中的techID正在更新,但是$tech_登录时遇到了techID值。
LOL!!天哪,你说得对!我盯着这个东西看了好几个小时,我想我看不到森林了。谢谢你指出我非常明显的问题。有时需要另一双眼睛。我已经做出了改变,并且它正在像它应该的那样工作。干杯,你完全正确。我盯着它看了这么久,寻找眼前的东西。我对这一点很陌生,我有一种倾向认为我犯了重大错误。谢谢你的建议。我把techID带到一个隐藏的区域。现在一切正常。干杯我要试试这个。我只参加了几个星期,我正在努力吸收很多。我很感激学习新的方法去做我确信可以做到的事情。学习这些东西是令人兴奋的,它让我保持年轻。干杯