【问题标题】:<select><option> and action associated with them<select><option> 和与之关联的操作
【发布时间】:2011-09-09 04:34:31
【问题描述】:

我正在编写一个预订系统。在主页上,我会选择一个类别,查看可供预订的设备。 例如我有这样的代码:

<select>
        <option value = "a">A</option>
        <option value = "b">B</option>
        <option value = "c">C</option>
        <option value = "d">D</option>
        <option value = "e">E</option>
</select>

我希望每个选择都与对数据库的单独查询相关联,这是在屏幕上动态显示的查询的结果。

如果您能给我一些示例代码,那就太好了。

问候

【问题讨论】:

    标签: php javascript html postgresql


    【解决方案1】:
    $query = mysql_query("SELECT * FROM choices");
    while($row=mysql_fetch_assoc($query)) {
      echo '<option value="'.$row['value'].'">'.$row['value'].'</option>';
    }
    

    如果您需要为每个选项单独查询,则代码不会有太大变化:

    $query = mysql_query("(SELECT * FROM choices) UNION (SELECT * FROM choices1) [etc]");
    while($row=mysql_fetch_assoc($query)) {
      echo '<option value="'.$row['value'].'">'.$row['value'].'</option>';
    }
    

    【讨论】:

    • 我不相信这是被问到的。如果我没看错的话,Mateusz 希望为每个选项运行一个单独的查询,而不是一个查询来获取选项。
    • 无法准确说出他想要什么。海事组织无论如何,我只是展示了一个例子
    • 布伦丹布伦你是对的。我希望为每个选择运行单独的查询。
    • @mate:我已经为此添加了详细信息
    • 我的选择是类别,并希望单击一个类别以显示该类别中的产品。
    【解决方案2】:

    您的问题分为两部分; 1 - 检测要运行的查询和 2 - 动态显示结果。

    第 1 部分:检测要运行的查询:

    鉴于查询的硬编码选项和无参数,使用上述代码,您可以使用以下代码确定要运行的查询:

    对于 HTML 部分,作为表单的一部分,像上面一样创建选择(但带有名称)

    <select name="querySelect">
        <option value="a">A</option>
        <option value="b">B</option>
    </select>
    

    在 PHP 中:

    $querySelect = $_GET['querySelect'];
    switch($querySelect)
    {
        case 'a':
            $sql = "SELECT * FROM TableA";
            break;
        case 'b':
            $sql = "SELECT * FROM TableB";
            break;
    }
    
    $results = mysql_query($sql);
    

    第 2 部分:动态显示结果

    使用$results,您对数据的处理很大程度上取决于您想要实现的目标。在非常基本的层面上,您可以执行以下操作来动态显示结果表:

    if(mysql_num_rows($results) > 0)
    {
        $header = false;
        print "<table>"
    
        while($row = mysql_fetch_assoc($results))
        {
            if(!$header)
            {
                $headings = array_keys($row);
                print "<tr>";
                for($i=0;$i<count($headings);$i++)
                {
                    print "<th>".htmlspecialchars($headings[$i])."</th>";
                }
                print "</tr>";
    
                $header = true;
            }
    
            print "<tr>";
    
            foreach($row as $value)
            {
                print "<td>".htmlspecialchars($value)."</td>";
            }
    
            print "</tr>";
        }
    
        print "</table>"
    }
    else print "<h1>No Results Found!</h1>";
    
    mysql_free_result($results);
    

    我的回答中还有很多内容没有涵盖,因为我不能说需要什么级别的详细信息。您还需要涵盖与 MySQL 的连接、错误处理、表格格式等内容...

    更新 嗯,很想知道为什么这被否决了。如果有人可以在 cmets 中解释我误解了问题或误导了用户的地方,我将不胜感激。

    【讨论】:

    • 我对此有疑问:$querySelect = $_GET['querySelect'];它返回一个错误 UNDEFINED INDEX: QUERYSELECT
    • @Mateusz GET 值的 querySelect 索引假定您已为您的选择命名为 querySelect。是这样吗?
    【解决方案3】:

    如果你使用 jQuery,代码可能看起来像

    <select id="select_id">
        <option value = "a">A</option>
        <option value = "b">B</option>
        <option value = "c">C</option>
        <option value = "d">D</option>
        <option value = "e">E</option>
    </select>
    <script type="text/javascript">
        $('#select_id').change(function(e) {
            // this code send selected value to the server
            $.post('url', {selected_value: this.value}, function(response) {
                // handle the server's response
            });
        });
    </script>
    

    在服务器端从 $_POST 获取值并进行查询。请记住 - 不要相信来自客户端的数据。你永远不知道那边是谁。始终检查传入的数据,不要使用这样的结构

    $sql = "SELECT * FROM table_name WHERE name = '{$_POST['selected_value']}'";
    

    因为可能存在任何字符串,包括那些可以删除所有数据库、清除数据等的字符串。

    【讨论】:

      猜你喜欢
      • 2014-05-05
      • 1970-01-01
      • 2013-04-04
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      相关资源
      最近更新 更多