【问题标题】:Put an array within an array, display a drop down in php将数组放入数组中,在php中显示下拉
【发布时间】:2015-04-13 21:18:11
【问题描述】:

我正在尝试使用 php 创建一个表单。我不确定如何将国家/地区下拉菜单放在城市字段之后。我不确定最好的方法是我有我的数组。

$labels = array (
    "first_name" => "First Name",
    "last_name" => "Last Name",
    "address" => "Address",
    "city" => "City",
    "email" => "E-mail",
    "phone" => "Phone", );

$country = array (
    "select" => "",
    "us" => "United States",
    "ca" => "Canada",
    "mx" => "Mexico", );    

$submit = "Submit";
?>

这里是显示代码:

<?php
    echo "<h2>Customer Info</h2>";
echo "<form action='checkBlank.php' method='post'>";
    foreach ( $labels as $field => $label)
    {
        echo "<div class='field'>
                <label for='$field'>$label</label>
                    <input id='$field' name='$field' type='text'
                        size='42' /></div>";
        if($field == "city") {
            echo "<label for='country'>Country</label>
                    <select id='country' name='country'>";

                foreach ( $country as $select => $option)
                {
                    echo "<option value='$value'>$option</option>";
                }

            echo "</select>";
        }
    }
        echo "<div id='submit'>
            <input type='submit' value='$submit'></div>
            </form>";
?>

【问题讨论】:

  • 下拉菜单使用&lt;select&gt;&lt;option&gt;,为什么要输入?
  • 输入用于表单的字段和提交按钮标签,我还没有把下拉标签放在那里,因为我不确定它应该放在哪里,这样php仍然会显示$labels 数组,同时将选择放在电子邮件和电话选项之前以及城市字段之后。

标签: php


【解决方案1】:

测试字段名,如果是城市,再循环显示国家下拉菜单。

foreach ( $labels as $field => $label)
{
    echo "<div class='field'>
            <label for='$field'>$label</label>
                <input id='$field' name='$field' type='text'
                    size='42' /></div>";
    if ($field == 'city') {
        echo '<div><select name="country">';
        foreach ($country as $short => $long) {
            echo "<option value='$short'>$long</option>";
        }
        echo '</select></div>';
    }
}

顺便说一句,Select One 选项通常使用空值。如果您将该字段标记为必填项,标准表单验证工具会将此识别为未选择任何选项。

【讨论】:

  • 感谢 barmar 我已将选择更改为空白,并将将该字段标记为必填
【解决方案2】:

'看起来@Barmar 在这个问题上击败了我,但我有类似的解决方案

$labels = array (
"first_name" => "First Name",
"last_name" => "Last Name",
"address" => "Address",
"city" => "City",
"email" => "E-mail",
"phone" => "Phone", );

$country = array (
"select" => "Select One",
"us" => "United States",
"ca" => "Canada",
"mx" => "Mexico", );    

$submit = "Submit";


echo "<h2>Customer Info</h2>";
echo "<form action='checkBlank.php' method='post'>";
    foreach ( $labels as $field => $label)
    {
        echo "<div class='field'>
                <label for='$field'>$label</label>
                    <input id='$field' name='$field' type='text'
                        size='42' /></div>";
        if($field == "city") {
            echo "<label for='country'>Country</label><select id='country' name='country'>";

                foreach ( $country as $value => $option)
                {
                    echo "<option value='$value'>$option</option>";
                }

            echo "</select>";
        }
    }

    echo "<div id='submit'>
        <input type='submit' value='$submit'></div>
        </form>";

【讨论】:

  • 所以我把它放在上面,它仍然只将它列为一个字段,但只会显示墨西哥选项而不显示其他 2?
  • 这很奇怪,我在我的页面上运行良好,您在该页面上是否有任何其他代码可能会干扰?
  • 请问内部css对form有影响吗?除了它和你上面的完全一样
  • 我不这么认为,试着把上面的php放在一个空白文件中,然后上传到你的web服务器,看看是否有相同的结果
  • hmmmm,好吧,当在本地预览为 .php 和在服务器上时,它确实显示为下拉列表。当我将它保存为 form.inc 并使用 include 函数显示它时,它会显示为一个只有墨西哥作为选项的字段。
【解决方案3】:

我个人会这样做:

 $fields = array (
    array(
        "name" => "first_name",
        "label" => "First Name",
    ),
    array(
        "name" => "last_name",
        "label" => "Last Name",
    ),
    array(
        "name" => "address",
        "label" => "Address",
    ),
    array(
        "name" => "city",
        "label" => "City",
    ),
    array(
        "name" => "country",
        "label" => "Country",
        "options" => array (
            "" => "Select One",
            "us" => "United States",
            "ca" => "Canada",
            "mx" => "Mexico", 
        ),  
    ),
    array(
        "name" => "email",
        "label" => "E-mail",
    ),
    array(
        "name" => "phone",
        "label" => "Phone",
    ),
);

foreach($fields as $field) {
    echo "<div class='field'><label for='{$field['name']}'>{$field['label']}</label>";
    if (isset($field['options'])) {
        echo "<select name='{$field['name']}'>";
        foreach ($option as $value => $title) {
            echo "<option value='$value'>$title</option>";
        }
        echo '</select>'
    } else {
       echo "<input id='{$field['name']}' name='{$field['name']}' type='text' size='42' />";
    }
    echo "</div>";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2015-10-05
    • 2011-02-20
    • 2017-12-21
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多