来自数组的php optgroup

来自数组的php optgroup,php,optgroup,Php,Optgroup,我很难得到一个填充了optgroup的select框,该框中有一个与optgroup关联的记录列表。optgroups来自下面的数组: $state_list = array( 'AL'=>"Alabama", 'AK'=>"Alaska", 'AZ'=>"Arizona", 'AR'=>"Arkansas", 'CA'=>"California" 'CO'=>"Colorado", 'CT'=>"Connecticut", 'DE'=>"Del

我很难得到一个填充了optgroup的select框,该框中有一个与optgroup关联的记录列表。optgroups来自下面的数组:

$state_list = array(
'AL'=>"Alabama",
'AK'=>"Alaska",
'AZ'=>"Arizona",
'AR'=>"Arkansas",
'CA'=>"California"
'CO'=>"Colorado", 
'CT'=>"Connecticut",
'DE'=>"Delaware",
'DC'=>"District Of Columbia",
'FL'=>"Florida",
'GA'=>"Georgia",
'HI'=>"Hawaii",
'ID'=>"Idaho",
'IL'=>"Illinois",
'IN'=>"Indiana",
'IA'=>"Iowa",
'KS'=>"Kansas",
'KY'=>"Kentucky", 
'LA'=>"Louisiana",
'ME'=>"Maine",
'MD'=>"Maryland",
'MA'=>"Massachusetts",
'MI'=>"Michigan",
'MN'=>"Minnesota",
'MS'=>"Mississippi",
'MO'=>"Missouri",
'MT'=>"Montana",
'NE'=>"Nebraska",
'NV'=>"Nevada",
'NH'=>"New Hampshire",
'NJ'=>"New Jersey",
'NM'=>"New Mexico",
'NY'=>"New York",
'NC'=>"North Carolina",
'ND'=>"North Dakota",
'OH'=>"Ohio",
'OK'=>"Oklahoma",
'OR'=>"Oregon",
'PA'=>"Pennsylvania",
'RI'=>"Rhode Island",
'SC'=>"South Carolina",
'SD'=>"South Dakota",
'TN'=>"Tennessee",
'TX'=>"Texas",
'UT'=>"Utah",
'VT'=>"Vermont",
'VA'=>"Virginia",
'WA'=>"Washington",
'WV'=>"West Virginia",
'WI'=>"Wisconsin",
'WY'=>"Wyoming",
'VI'=>'US Virgin Islands',
'AB'=>'Alberta',
'BC'=>'British Columbia', 
'MB'=>'Manitoba',
'NB'=>'New Brunswick',
'NL'=>'Newfoundland/Labrador',
'NT'=>'Northwest Territories',
'NS'=>'Nova Scotia',
'NU'=>'Nunavut',
'ON'=>'Ontario',
'PE'=>'Prince Edward Island',
'QC'=>'Quebec',
'SK'=>'Saskatchewan',
'YT'=>'Yukon Territory',
);
从这里,我尝试使用与数据库中的值匹配的键填充选择框,并且具有该状态键的每个记录都将是该optgroup的一个选项

这是我的密码:

// We are going to go through each of the states in the array
foreach($state_list as $key => $value) {
  // we are going to set the value of the state
  echo '<optgroup label="' . $value. '">';
  // for each of the states we are going to find the markets that are associated with each of the states
  $market = mysqli_query($link, "select `title` from `ntvb-v4`.`campaigns` where `state` = "' .$key. '" AND `status` = 'ENABLED' AND `live` = '1' AND `title` NOT LIKE '%mail%' AND (`activity` = '' OR `activity` IS NULL)");
    while($row_market = mysqli_fetch_assoc($market)) {
    // now we need to add option for each of the markets
    echo '<option value="'.$row_market['title'].'">'.$row_market['title']'</option>';
  }
  echo '</optgroup>';
}
//我们将检查数组中的每个状态
foreach($key=>$value形式的状态列表){
//我们将设置状态的值
回声';
//对于每个州,我们将找到与每个州相关的市场
$market=mysqli_query($link,“从`ntvb-v4`.`活动`where`state`='.$key.''中选择`title`和`status`='ENABLED',`live`='1'和`title`与'%mail%'不同,并且(`activity`=''或`activity`为空)');
while($row\u market=mysqli\u fetch\u assoc($market)){
//现在我们需要为每个市场添加选项
echo''.$row_市场['title']'';
}
回声';
}
正如你所知道的,我用这段代码没有取得任何进展,我被如何解决这个问题难住了。任何关于理解我需要做什么的帮助,以便键匹配表中的状态,然后使用与该键相关联的记录填充optgroups,该键是approprate optgroup下面的一个选项


感谢您对我这个难题的帮助。

这里是一个使用PDO进行参数绑定的示例,因为我无法忍受MySQLi中的绑定函数

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

$pdo = new PDO(/* connection string */);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare("
    SELECT `title` FROM `btvb-v4`.`campaigns`
    WHERE `state` = :state
    AND `status` = 'ENABLED'
    AND `live` = 1
    AND `title` NOT LIKE '%mail%'
    AND (`activity` = '' OR `activity` IS NULL)
    ORDER BY `title`
    ");
$stmt->bindParam('state', $state);

?>

<select name="campaign">

<?php foreach ($state_list as $state => $value) : ?>

    <optgroup label="<?= htmlspecialchars($value, ENT_QUOTES) ?>">

    <?php $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) : ?>
        <option value="<?= htmlspecialchars($row['title'], ENT_QUOTES) ?>">
            <?= htmlspecialchars($row['title'] ?>
        </option>
    <?php endwhile ?>

    </optgroup>

<?php endforeach ?>

</select>

看起来您在
$key
周围的单引号/双引号是错误的/反向的-

$market = mysqli_query($link, "select `title` from `ntvb-v4`.`campaigns` where `state` = "' .$key. '" AND `status` = 'ENABLED' AND `live` = '1' AND `title` NOT LIKE '%mail%' AND (`activity` = '' OR `activity` IS NULL)");
                                                                                         ^^        ^^        
尝试切换到-

$market = mysqli_query($link, "select `title` from `ntvb-v4`.`campaigns` where `state` = '" .$key. "' AND `status` = 'ENABLED' AND `live` = '1' AND `title` NOT LIKE '%mail%' AND (`activity` = '' OR `activity` IS NULL)");