PHP根据第一个选择框自动更新选择框


PHP Auto update selectbox based on 1st selectbox

我有两个选择框

 <h3>Results</h3>
   <select id="register_form" name="sport" />
    <option value="Rugby">Rugby</option>
    <option value="Cricket">Cricket</option>
    <option value="Football">Football</option>
    </select>  
    <?php
    echo'<select name="match">';
    echo'<option value="'.$row['event_id'].'">'.$row['team1'].' VS '.$row['team2'].'</option>';
    echo'</select>';
   ?>
   <input id="register_form" type="submit" value="Display" name="submit" />

用户搜索结果:

在第一个选择框中选择运动类型,然后在第二个选择框中根据运动类型填充选项值。

是否有可能在PHP中做到这一点,而无需用户首先按提交以获得运动类型的$_POST值?

我最好的选择是什么?

PHP总是需要重新加载页面来刷新您的信息,因此,正如anant kumar singh所说,您需要使用AJAX来实现这一点。正如yak613所说,jQuery将帮助您轻松使用AJAX

1。Ajax是您所要求的唯一选项(不需要页面刷新)

  • 当你使用php时,它只可能与页面刷新。

  • 帮助链接如下:-

  • 使用jQuery根据第一个选择列表选项更改第二个选择列表

    https://www.daniweb.com/web-development/php/threads/372228/php-and-ajax-auto-populate-select-box

    https://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax

    您可以使用此多重选择Dropdawn列表:http://coursesweb.net/ajax/multiple-select-dropdown-list-ajax_t,它可以用于多组选择列表

    我在我的项目中也遇到过同样的问题。但是所需的功能更高——不是两个依赖的选择框和更大的数量。我已经写了一个简单的函数来加载我的selectboxes:

    //formId - form where selectbox is
    //name - attribute "name" of selectbox
    //dataSourceUrl - url to PHP-file
    //affectingField - string with value that filters the selecbox's data
    function loadSelectbox( formId, name, dataSourceUrl, affectingField ){
    //console.log('Loading data to selectbox name="'+name+'":');
    var selectbox = $('#'+formId+' select[name="'+name+'"]');
    if(selectbox){
        //console.log("Selecbox found");
        if(affectingField != null){
            var affectingValue = $('#'+formId+' [name="'+affectingField+'"]').val();
            dataSourceUrl += '?affectingValue='+affectingValue;
        }
        var options = selectbox.find('option');
        var jqxhr = $.ajax({
            url: dataSourceUrl,
            dataType: 'text'
        })
        .done(function(data) {
            //console.log(data);
            if(data != ""){
                var optionsObject = JSON.parse(data);
                var i = 0;
                console.log(optionsObject);
                var options = [];
                $(optionsObject).each(
                    function(){
                        options[i] = '<option value="'+$(this)[0]['val']+'">'+$(this)[0]['text']+'</option>';
                        i++;
                    }
                );
                selectbox.html(options);
                if(urlParamsSet[name] == false){
                    setParamFromUrl(name); 
                }
            }
            else{
                selectbox.html('<option value="">Все</option>');
            }
        })
        .fail(function() {
            alert("Problems with server answer");
        })
        selectbox.prop("disabled", false);
    }
    else{
        console.log("No selectbox with such name");
    }
    

    }

    不是说这段代码是完美的,但是它可以工作。php文件必须以JSON格式返回值给selecbox(转换自结构:array(index, value, text))