【问题标题】:how to get the form input, select values from the same page in php?如何获取表单输入,从 php 中的同一页面中选择值?
【发布时间】:2011-04-11 10:27:23
【问题描述】:

我有一个表格:

<form name="myForm" action="a.php" method="post">
    <fieldset>
        <label>class</label>
        <select>
            <option>1</option>
            <option>2</option>
            <option>3</option>
        </select>

        <label>Subject</label>
        <select>
            <option>some value from database</option>
            <option>some value from database</option>
            <option>some value from database</option>
            <option>some value from database</option>
        </select>
    </fieldset>
<form>

问题是:

我想从第一个下拉选择值中为用户显示 3 个选项(1,2 和 3)。假设用户选择 1,那么他/她将从数据库中获取相应的值作为第二次选择的下拉值。然后她/他将从这些下拉值中选择一个。最后表格将手动提交。显然根据第一个下拉选择值,第二个下拉选择值会相应变化。

因此,挑战是在手动提交表单之前,从第一个选择下拉值中获取值以在第二个选择下拉值中使用它。我怎样才能做到这一点?我正在使用 php。我还需要什么?

稍后添加:

到目前为止,我对发布的问题的解决方案有所了解。

现在想想,

我必须根据第一个下拉列表检索第二个下拉列表的值。如果有第三个下拉值要从数据库中检索取决于第一个和第二个,然后第四个下拉值取决于前三个,依此类推第五个,第六个......那么我该如何实现呢? ?

所有下拉&lt;select&gt;&lt;/select&gt; 元素将在同一页面上水平并排放置。

【问题讨论】:

    标签: php javascript jquery html ajax


    【解决方案1】:

    您需要客户端脚本。这里有一个article如何使用jQuery(流行的JS框架)实现这个功能

    【讨论】:

    • @biakaveron,我已将附录添加到我的帖子中。任何关于解决方案的文章的参考?
    • 没有区别 - 每个“父”下拉菜单都必须有其处理程序(使用 .change(function() {...}) 调用)。下拉 X 已更改 -> 重新加载下拉 (X+1)。使用 jQuery,它变得如此简单;)
    • @biakaveron,假设 a.php 页面中的 drop-down1(此页面最初是一个带有 php 扩展名的 html 文件)有一个处理程序,它通过 ajax 调用另一个 php(比如 1.php)页面。那么存在于 1.php 中的下拉代码(也应该通过 ajax 调用另一个 php 页面,如 1.php)的处理程序应该写在哪里?如果 1.php 中有 html 定义,那么 a.php 不能通过 ajax 使用它来获取输出,我遇到了这个问题。而且1.php中的下拉处理程序不能写在a.php中,我猜。那么解决方案在哪里呢?
    • 客户端代码应该在客户端页面上(在您的示例中为 a.php)。服务器端脚本(1.php)只会读取输入数据($_GET 或 $_POST)并返回其响应。
    • @biakaveron,只有两个下拉列表,我可以实现,即根据第一个下拉列表的选择,将出现第二个下拉列表的选项。但是如何实现第三个下拉菜单,其选项将取决于第二个下拉菜单的选择?第四,第五个?并且所有下拉菜单都必须水平出现在同一页面上。解决方案请教
    【解决方案2】:

    您将需要 Javascript 来处理此问题,覆盖 List ControlonSelectionChange 事件并在更改事件时从服务器端脚本获取第二个下拉框的值。

    【讨论】:

    • 假设我使用 'onSelectionChange' 调用了一个 javascript 函数,但是如何在 php 中使用其中的 javascript 变量从数据库中检索值?
    • @sof_user,创建一个服务器端包装器,它将返回要填充到选择字段中的值。调用它onSelectionChange(Ajax 调用)事件并解析结果并将其填充到第二个下拉列表中,依此类推第三个..
    • ajax 调用会将变量作为 javascript 变量返回。要在第二个下拉列表中填充它,如何在 php 中使用 javascript 变量? php 将用于从 db 中检索值作为第二个下拉列表值。
    • 我在我的帖子中添加了一个新问题。有什么解决办法吗?
    【解决方案3】:

    您需要使用 javascript 和 AJAX 动态获取第二个下拉列表的值。例如使用 jQuery,它将是:

    $('#select1').change(function() {
       var selectedVal = $(this).val();
    
       //make an AJAX request to get your values depending on selectedVal
       //and update the values for the second select
    }
    

    然后,在 PHP 脚本中,您必须评估一个表示用户选择的传入参数,用于第一个 select,然后以 JSON 格式返回您从数据库加载的数据。

    编辑: AJAX 请求会像这样发出:

    $.post("getsecondvals.php", { value: selectedVal }, function(data) {
       var result = $.parseJSON(data);
       $('#select2').html(''); //delete any old values
    
       for (var entry in result) {
          var option = $('<option></option>');
          option.text(entry);
    
          $('#select2').append(option);
       }
    });
    

    您的 PHP 脚本可以这样构造:

    <?php
    $selectedValue = $_POST['value'];
    // now include everything required for your database connection
    // and get the categories, use prepared statements
    
    // finally, your resulting array should be non-associative, so
    // always add new values with "[]" operator
    // assuming $values is your array containing the valid options, do this:
    echo json_encode($values);
    ?>
    

    【讨论】:

    • 我将 selectedVAL 作为 javascript 变量。那怎么在php中使用呢?
    • 我在帖子中添加了一个新问题。你能帮忙吗?
    【解决方案4】:

    你可以试试这个:

    onchange = "$('select[name=\'xyz\']').load('yourUrl/someFunction&country_id=' + this.value);"
    

    此 onchange 属性将应用于第一个选择框并为第二个选择框命名 喜欢:

    只要您从第一个下拉菜单中更改选项,上述代码就会发送一个 AJAX GET 请求。

    并在调用的函数中从 DB 中获取值并返回 HTML。 例如:

      someFunction() {
         //get values from DB and loop
       String html = "<option></option>";
       return html;
    }
    

    【讨论】:

    • 我手艺不好。我应该在 html 部分中编写 onchange 部分吗? “xyz”是什么意思?第三,第四……下拉呢?能说详细一点吗?
    • 是的,您可以在 head 标签内写入...而 xyz 只是一个虚拟名称...您需要将其替换为您的选择名称属性!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2018-05-06
    • 2018-02-18
    • 1970-01-01
    • 2013-12-08
    • 2020-05-06
    • 1970-01-01
    相关资源
    最近更新 更多