【问题标题】:generate select options using php arrays使用 php 数组生成选择选项
【发布时间】:2016-01-23 03:13:47
【问题描述】:

我有一个“州”类别选择,根据所选州显示 4 个“运营商”选择之一。我希望 php 用它们各自的选项填充“运营商”选择。我已经搜索了堆栈,并且确定那里有几个答案,但是由于我的新手 php 状态,我很难理解逻辑。话虽如此,我拥有的当前 php 是我被指示使用/回收的,并不反映我的 php 技能。我真的需要这个家伙的帮助!

这是一个小提琴(减去 php):http://fiddle.jshell.net/prxmeo9z/

HTML(带有 PHP):

    <div class="dropdown-box">
                        <select name="state_select" id="state_select">
                            <option selected disabled>Choose a state</option>
                            <option value="1">Connecticut</option>
                            <option value="2">New Hampshire</option>
                            <option value="3">New Jersey</option>
                            <option value="4">New York</option>
                        </select>
</div>
        <br />

<div id="select-div1" class="select-div">
        <select name="conn_select" id="carrier_select1"  class="carr-hide">
            <option selected disabled>Select a carrier - Conn</option>
            <option value="1">
             <? 
            $options = '';
foreach($company_arry as $company) {
    $options .= "<option value='" . $company['Id'] . "'>" . $company['Name'] . "</option>";
}
echo $options;
?>
            </option>
        </select>
</div>

<div id="select-div" class="select-div">                      
        <select name="nh_select" id="carrier_select2" class="carr-hide">
            <option selected disabled>Select a carrier - NH</option>
            <option value="2">
            <? 
            $options = '';
foreach($company_arryNH as $company) {
    $options .= "<option value='" . $company['Id'] . "'>" . $company['Name'] . "</option>";
}
echo $options;
?>
            </option>
        </select>
</div>

<div id="select-div" class="select-div">                       
        <select name="nj_select" id="carrier_select3" class="carr-hide">
            <option selected disabled>Select a carrier - NJ</option>
            <option value="3">
             <? 
            $options = '';
foreach($company_arryNJ as $company) {
    $options .= "<option value='" . $company['Id'] . "'>" . $company['Name'] . "</option>";
}
echo $options;
?>
            </option>
        </select>
</div>

<div id ="select-div" class="select-div">                        
        <select name="ny_select" id="carrier_select4" class="carr-hide">
            <option selected disabled>Select a carrier - NY</option>
            <option value="4">
            <? 
            $options = '';
foreach($company_arry as $company) {
    $options .= "<option value='" . $company['Id'] . "'>" . $company['Name'] . "</option>";
}
echo $options;
?>
            </option>
        </select>

</div>

JS/JQuery:

function optionCheck() {
    var i, len, optionVal, helpDiv,
        selectOptions = document.getElementById("state_select");

    // loop through the options in case there
    // are multiple selected values
    for (i = 0, len = selectOptions.options.length; i < len; i++) {

        // get the selected option value
        optionVal = selectOptions.options[i].value;

        // find the corresponding help div
        helpDiv = document.getElementById("carrier_select" + optionVal);
        //selectDiv = document.getElementsByClassName("select-div");

        // move on if we didn't find one
        if (!helpDiv) { continue; }

        // set CSS classes to show/hide help div
        if (selectOptions.options[i].selected) {
            helpDiv.className = "conn_select nh_select nj_select ny_select";
            $(helpDiv).addClass("dropdown-box");
        } else {
            helpDiv.className = "carr-hide";
            //$(".select-div").addClass("carr-hide");

        }
    }    
}

// alternative method of binding the onchange handler
document.getElementById("state_select").onchange = optionCheck;

我包含的 PHP 文件:

<?
$sql = mysql_query("SELECT gia_survey_allyears_company.Name, gia_survey_allyears_matrix.* FROM `gia_survey_allyears_matrix` 
                    left join gia_survey_allyears_company on gia_survey_allyears_matrix.CompanyID = gia_survey_allyears_company.ID
                    WHERE gia_survey_allyears_matrix.CompanyID=".mysql_real_escape_string(trim($_GET['id']))."");

$row = mysql_fetch_assoc($sql);

$qu_arry = array(   'Q1'=>'N/A','Q2'=>'N/A','Q3'=>'N/A','Q4'=>'N/A',
                    'Q5'=>'N/A','Q6'=>'N/A','Q7'=>'N/A','Q8'=>'N/A',
                    'Q9'=>'N/A','Q10'=>'N/A','Q11'=>'N/A','Q12'=>'N/A',
                    'Q13'=>'N/A','Q14'=>'N/A','Q15'=>'N/A','Q16'=>'N/A');

$quavg_arry = array(    'Q1'=>'N/A','Q2'=>'N/A','Q3'=>'N/A','Q4'=>'N/A',
                    'Q5'=>'N/A','Q6'=>'N/A','Q7'=>'N/A','Q8'=>'N/A',
                    'Q9'=>'N/A','Q10'=>'N/A','Q11'=>'N/A','Q12'=>'N/A',
                    'Q13'=>'N/A','Q14'=>'N/A','Q15'=>'N/A','Q16'=>'N/A');

$holdarry = array(  'Agents'=>'N/A','RankOutOf'=>'N/A','Rank'=>'N/A','Score'=>'N/A',
                    'Avg'=>'N/A','AvgAllScore'=>'N/A','AvgAllQuestion'=>'N/A',
                    'ComAvg'=>'N/A','Q1-16'=>$qu_arry,'Q1-16Avg'=>$quavg_arry);

$company['2003'] = $holdarry;
$company['2004'] = $holdarry;
$company['2005'] = $holdarry;
$company['2006'] = $holdarry;
$company['2007'] = $holdarry;
$company['2008'] = $holdarry;
$company['Name']= $row['Name'];
$company['State']= $row['State'];

do {
// Show Scores for question
$qu_arry = array(   'Q1'=>round($row['Q2-0'],1),'Q2'=>round($row['Q2-1'],1),'Q3'=>round($row['Q3-0'],1),'Q4'=>round($row['Q3-1'],1),
                    'Q5'=>round($row['Q3-2'],1),'Q6'=>round($row['Q4-0'],1),'Q7'=>round($row['Q4-1'],1),'Q8'=>round($row['Q5-0'],1),
                    'Q9'=>round($row['Q5-1'],1),'Q10'=>round($row['Q5-2'],1),'Q11'=>round($row['Q6-0'],1),'Q12'=>round($row['Q6-1'],1),
                    'Q13'=>round($row['Q7-0'],1),'Q14'=>round($row['Q7-1'],1),'Q15'=>round($row['Q8-0'],1),'Q16'=>round($row['Q8-1'],1));

    $company[$row['Year']]= array(  'Agents'=>$row['total'],
                                    'RankOutOf'=>'',
                                    'Rank'=>$row['Rank'],
                                    'Score'=>round($row['QAvg'],1),
                                    'Q1-16'=>$qu_arry,
                                    'Q1-16Avg'=>'');

    $sqlStateYear = mysql_query("SELECT * FROM `gia_survey_allyears_matrix` WHERE CompanyID=0 and `State`='".$row['State']."' and `Year`='".$row['Year']."'");
    $rowStateYear = mysql_fetch_assoc($sqlStateYear);

    do {

$company[$row['Year']]['Q1-16Avg'] = 
              array('Q1'=>round($rowStateYear['Q2-0'],1),'Q2'=>round($rowStateYear['Q2-1'],1),
                    'Q3'=>round($rowStateYear['Q3-0'],1),'Q4'=>round($rowStateYear['Q3-1'],1),
                    'Q5'=>round($rowStateYear['Q3-2'],1),'Q6'=>round($rowStateYear['Q4-0'],1),
                    'Q7'=>round($rowStateYear['Q4-1'],1),'Q8'=>round($rowStateYear['Q5-0'],1),
                    'Q9'=>round($rowStateYear['Q5-1'],1),'Q10'=>round($rowStateYear['Q5-2'],1),
                    'Q11'=>round($rowStateYear['Q6-0'],1),'Q12'=>round($rowStateYear['Q6-1'],1),
                    'Q13'=>round($rowStateYear['Q7-0'],1),'Q14'=>round($rowStateYear['Q7-1'],1),
                    'Q15'=>round($rowStateYear['Q8-0'],1),'Q16'=>round($rowStateYear['Q8-1'],1));
$company[$row['Year']]['AvgAllScore'] = round($rowStateYear['QAvg'],1);
$company[$row['Year']]['RankOutOf'] = $rowStateYear['total'];
    } while ($rowStateYear = mysql_fetch_assoc($sqlStateYear));

// END
} while ($row = mysql_fetch_assoc($sql));
function fnRake($rake) {
    if ($rake==11 || $rake==12 || $rake==13) {
        $i=$rake;
    }else {
        $i = substr($rake,strlen($rake)-1,1);
    }
    switch ($i) {
        case 1:
            $add =  "st";
        break;
        case 2:
            $add =  "nd";
        break;
        case 3:
            $add =  "rd";
        break;
        case 11:
            $add =  "th";
        break;
        case 12:
            $add =  "th";
        break;
        case 13:
            $add =  "th";
        break;
        default:
            $add =  "th";
        break;
    }
    if ($rake=="N/A") {
        return $rake;
    }else{
        return $rake."<sup>$add</sup>";
    }
}
?>

在我的 html 开头添加了一些 PHP:

    $state = new state;
$state_arry = $state->state_options("NY");

//For Connecticut
$sqlCT = mysql_query("SELECT * FROM `gia_survey_allyears_company` WHERE `State`='CT' and `show`='Y' order by Name");
//For New York
$sql = mysql_query("SELECT * FROM `gia_survey_allyears_company` WHERE `State`='NY' and `show`='Y' order by Name");
//For New Jersey
$sqlNJ = mysql_query("SELECT * FROM `gia_survey_allyears_company` WHERE `State`='NJ' and `show`='Y' order by Name");
//For New Hampshire
$sqlNH = mysql_query("SELECT * FROM `gia_survey_allyears_company` WHERE `State`='NH' and `show`='Y' order by Name");

$row = mysql_fetch_assoc($sql);

//For New York
do {
    $company_arry[]=array('Name'=>$row['Name'],'Id'=>$row['ID']);
} while ($row = mysql_fetch_assoc($sql));

//For New Jersey
do {
    $company_arryNJ[]=array('Name'=>$row['Name'],'Id'=>$row['ID']);
} while ($row = mysql_fetch_assoc($sqlNJ));

//For New Jersey
do {
    $company_arryNH[]=array('Name'=>$row['Name'],'Id'=>$row['ID']);
} while ($row = mysql_fetch_assoc($sqlNH));

//For Connecticut
do {
    $company_arryCT[]=array('Name'=>$row['Name'],'Id'=>$row['ID']);
} while ($row = mysql_fetch_assoc($sqlCT));

$total = count($company_arry);
$col1 = round($total/2);
$col2 = $total-1

;

这个 PHP 生成了一个我在 NY CARRIER SELECT 中需要的列表(例如):

 <? 
            for ($i1=0; $i1<= $col1; $i1++) { 
                echo "<a href=\"company.php?id=".$company_arry[$i1]['Id']."\">".$company_arry[$i1]['Name']."</a><br>";
            } 
            ?>

【问题讨论】:

  • 这很好,但是......到底是什么问题?
  • 问题是,我需要修改最后的 PHP 代码(示例)以生成选项而不是 hrefs...我不知道如何。或者如果这甚至是正确的解决方案?
  • 只是文字。将"&lt;a href=..." 更改为"&lt;option ..." 有多难?

标签: javascript php jquery html mysql


【解决方案1】:

也许这会解决它

$options = '';
foreach($company_arry as $company) {
    $options .= "<option value='" . $company['Id'] . "'>" . $company['Name'] . "</option>";
}
echo $options;

【讨论】:

  • 这行得通!不过,每个州都有不同的运营商列表,而我的“$sql”变量目前只查询纽约的所有公司。那么我应该为每个州复制变量吗?还是有更好的方法?
  • @StevenSerrano,所有数据库都具有相同的布局吗?所以只需nameId
  • 是的。接下来,用户将单击一个附加按钮,该按钮将获取州和运营商,并根据州和运营商的唯一 ID(运营商 ID 已经存在)提取表数据。我更新了帖子以反映我对 HTML 部分和“附加 PHP”部分所做的更改。这是一个好的解决方案吗?
猜你喜欢
  • 2023-03-16
  • 2021-04-10
  • 2011-09-08
  • 1970-01-01
  • 2020-02-24
  • 2015-09-04
  • 2015-06-06
  • 2017-08-05
  • 2020-12-21
相关资源
最近更新 更多