【问题标题】:php optgroup from array来自数组的php optgroup
【发布时间】:2013-10-07 10:22:02
【问题描述】:

我很难获得一个填充了 optgroups 的选择框,然后有一个与 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>';
}

正如您所见,我对这段代码没有任何帮助,我对如何解决这个问题感到困惑。任何有助于理解我需要做什么才能使键与表中的状态相匹配,然后使用与该键关联的记录填充 optgroup,这是适当的 optgroup 下的一个选项。

感谢您在这个难题上为我提供的帮助。

【问题讨论】:

    标签: php optgroup


    【解决方案1】:

    这里是一个使用 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>
    

    【讨论】:

      【解决方案2】:

      您的 $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)");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-21
        相关资源
        最近更新 更多