下拉搜索列表无法使变量等于所选选项

Posted

技术标签:

【中文标题】下拉搜索列表无法使变量等于所选选项【英文标题】:Dropdown search list can't get variable to equal selected option 【发布时间】:2019-10-08 09:17:04 【问题描述】:

我有一个显示不同会议名称的下拉列表。我可以选择某个会议,但是当我选择会议时,我想添加一个提交按钮,以便我可以获取所选会议的变量。

我是数据库新手,但我尝试添加一个表单,但我似乎无法让它在 php 代码中工作。数据库连接并显示所有会议都很好,我只是不知道如何获得一个等于所选选项的变量。

<!DOCTYPE html>  
<html>
<head>
<style>
.error color: #FF0000;
</style>
</head>
<body>  

<?php
//Declare variables
$db_host = "";
$db_username = "";
$db_pass = "";
$db_name = "";
$db_table = "";
//Connect to phpMyAdmin
$con=mysqli_connect("$db_host","$db_username","$db_pass","$db_name");

// Check connection
if (mysqli_connect_errno())
  
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  

mysqli_select_db($con,"$db_name") or die ("No database");

$result=mysqli_query($con,"select * From conferenceList");

echo "<select id='searchddl'>";
echo "<option> -- Search Conference Name -- </option>";
while($row=mysqli_fetch_array($result))

    echo "<option>$row[name]</option>";

echo "</select>";


//Close phpMyAdmin
mysqli_close($con);
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.8.7/chosen.jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.8.7/chosen.min.css" />

<script>
    $("#searchddl").chosen();
</script>

</body>
</html>

我希望一个变量与选择的相同。所以我希望我的变量等于echo "&lt;option&gt;$row[name]&lt;/option&gt;"; enter image description here

【问题讨论】:

表单要么需要提交,要么你需要添加一些 javascript/ajax 来将数据发送到 PHP。这里有一个很好的 ajax 解决方案:***.com/questions/16616250/… @tshimkus 是的,这就是我想要的,但我该怎么做呢? 你能澄清一下吗?您是否尝试从选择下拉列表中获取值并将其发送到新查询?这是我最初的假设,但我想确定一下。 @tshimkus 是的,那是我的目标 【参考方案1】:
<script>
    $( "#searchddl" ).chosen().change(function()   // execute query every time select option changes
    var val = $( "#searchddl" ).chosen().val();  // get value from selected option
    $.ajax(
        url: "myphpfile.php", // call external PHP file for query execution
        type: "get", 
        data:  
            myselectvalue: val // passes value as GET parameter (?=myselectvalue=val) 
        ,
        success: function(response) 
            tmp = response // store variable from PHP output
            // do Something

        ,
        error: function(xhr) 
             // do Something else
        
    );
</script>

在您的单独 PHP 文件中,您可以从 get 变量中获取值:

if (isset($_GET['myselectvalue']) && strlen($_GET['myselectvalue'])  // make sure it's populated

    $valueFromForm = $_GET['myselectvalue'];

    // Execute queries, echo results, etc.


我在这个解决方案中使用了 GET,但 POST 也可以。您只需在 ajax 调用中将 type: "get" 更改为 type: "post",在 PHP 中将 $_GET[] 更改为 $_POST[]

【讨论】:

我使用了你的代码,但是搜索功能消失了,现在看起来像这样 imgur.com/Rxhw1UV 并且我还添加了 echo $valueFromForm; // 在第二个文件中执行查询、回显结果等,但没有得到任何结果。有没有办法在同一个文件中获取变量而不必使用另一个文件? 是的,如果您创建一个带有打开和关闭表单标签的完整表单,并使用提交输入或使用 jquery 提交表单。表单的默认操作是同一页面,默认方法是 get。当您提交表单时,它将重新加载页面并通过 get 发送数据(如果您更改表单方法,则发送数据)。 我没有意识到.change() 方法会影响搜索框。我想它也可能产生对添加到搜索框的每个字符执行 ajax 的意外后果。 我也错过了 jQuery Chosen 插件。我对代码做了一个小的更新,将.chosen() 方法包含在选择器中,看看是否有什么不同。我以前没有使用过那个插件,所以我不知道它的细微差别。

以上是关于下拉搜索列表无法使变量等于所选选项的主要内容,如果未能解决你的问题,请参考以下文章

无法从离子中的下拉列表中获取所选值

无法使用javascript函数处理下拉列表

无法使下拉列表可搜索

想从下拉列表中选择选项并根据所选选项更改按钮的标题...如何?

使用 Angular 复制带有 UI 和所选值的下拉列表

在下拉列表中获取所选选项的值