【问题标题】:Selected item gets changed in dropdown list所选项目在下拉列表中更改
【发布时间】:2018-03-12 04:43:55
【问题描述】:

当我在下拉列表中选择除第一个项目之外的任何其他项目时,它会加载相应的值,然后再次从列表中选择第一个项目并且不保留我选择的项目。

在上图中,我从下拉列表中选择了美国,它显示了相应的名称,然后再次在列表中看到印度(列表中的第一项)。 我想要的是名称 USA(或我选择的任何名称)应该出现在列表中。 我是 HTML 新手,请建议对以下代码进行一些更改以实现上述功能。 我们是否有任何有助于实现上述目标的属性

<html>
<body>

<form action = "StateNames.php" method = "post">

    Select a Country Name 
    <select name = "n1">
      <option value="india">India</option>
      <option value="usa">USA</option>
      <option value="aus">Australia</option>
    </select><br><br>
    <input type="submit" value="Search" name = "Submit">  

</form>

</body>
</html> 

<?php

if(isset($_POST['n1']))
{
    $name = $_POST['n1'];

    $India = array("Maharashta", "Goa", "Himachal Pradesh", "Jammu and 
Kashmir", "Uttaakhand");
    $USA = array("New York", "California", "Washington", "Texas", "Utah");
    $Australia = array("New South Wales", "Victoria", "Queensland", 
"Tasmania");

    switch($name)
    {
        case "india":
            foreach($India as $i)
                echo $i ."<br/>";
                break;

        case "usa":
            foreach($USA as $u)
                echo $u ."<br/>";
                break;

        case "aus":
            foreach($Australia as $a)
                echo "$a <br/>";
                break;
    }
    }
    ?>

【问题讨论】:

标签: php html


【解决方案1】:

<html>
<body>

<form action = "StateNames.php" method = "post">

    Select a Country Name 
    <select name = "n1">
    <?php if(isset($_POST['n1'])) { ?>
     <option value="<?php echo $_POST['n1']; ?>" selected><?php echo $_POST['n1']; ?></option>
    <?php } else { ?>
      <option value="">Choose a option</option>
    <?php } ?>
      <option value="india">India</option>
      <option value="usa">USA</option>
      <option value="aus">Australia</option>
    </select><br><br>
    <input type="submit" value="Search" name = "Submit">  

</form>

<?php

if(isset($_POST['n1']))
{
    $name = $_POST['n1'];

    $India = array("Maharashta", "Goa", "Himachal Pradesh", "Jammu and 
Kashmir", "Uttaakhand");
    $USA = array("New York", "California", "Washington", "Texas", "Utah");
    $Australia = array("New South Wales", "Victoria", "Queensland", 
"Tasmania");

    switch($name)
    {
        case "india":
            foreach($India as $i)
                echo $i ."<br/>";
                break;

        case "usa":
            foreach($USA as $u)
                echo $u ."<br/>";
                break;

        case "aus":
            foreach($Australia as $a)
                echo "$a <br/>";
                break;
    }
    }
    ?>

</body>
</html> 

我已经重新安排了你的代码,应该是这样的。

因此,select 块中的 PHP 会检查 $_POST['n1'] 是否有值,如果有,它会打印第一个值为 $_POST['n1']options 标记并将其标记为选中。否则,它会打印第二个options 标签。

这是一个更高级的版本,可以解决您提到的这些问题

<?php

// This creates a multidimestional array of countries
// Syntax Key => Value
// Country => States
$countries = array(
    "India" => array("Maharashta", "Goa", "Himachal Pradesh", "Jammu and Kashmir", "Uttaakhand"),
    "USA" => array("New York", "California", "Washington", "Texas", "Utah"),
    "Australia" => array("New South Wales", "Victoria", "Queensland", "Tasmania")
);
?>
<html>
    <body>
        <form action = "StateNames.php" method = "post">
            Select a Country Name 
            <select name = "n1">

            <!-- If a value already selected, show that -->
                <?php if (isset($_POST['n1'])) { ?>
                    <option value="<?php echo $_POST['n1']; ?>" selected><?php echo $_POST['n1']; ?></option>
                <?php } else { ?>
                    <option value="" selected>Choose a option</option>
                <?php } ?>

                <!-- Foreach loop that map Key as $country and Value as $states  -->
                <?php foreach($countries as $country => $states) { ?>

                <!-- If n1 already set -->
                    <?php if (isset($_POST['n1'])) {?>

                    <!-- Skip that option to avoind duplication on the list. In this case $country is not equal to n1, add as option -->
                        <?php if ($_POST['n1'] != $country) { ?>
                            <option value="<?php echo $country; ?>"><?php echo $country; ?></option>
                        <?php } ?>

                        <!-- If n1 not set print all options -->
                    <?php } else { ?>
                        <option value="<?php echo $country; ?>"><?php echo $country; ?></option>
                    <?php } ?>
                <?php } ?>
            </select>
            <br>
            <br>
            <input type="submit" value="Search" name = "Submit">
        </form>
        <?php
if(isset($_POST['n1']))
{
    $name = $_POST['n1'];

    // Here is the n1 is set we loop through array and print all the states out for that selected country
    foreach($countries as $country => $states) {
        if ($name == $country) {
            foreach($states as $state) {
              echo $state ."<br/>";  
            }
        }
    }
}
        ?>
    </body>
</html>

Live example, only good for 48H

【讨论】:

  • 尝试了上面的代码,但仍然没有保留状态。
  • 点击结果时是否刷新页面?
  • 这里是现场测试,只适用于48H。 main.xfiddle.com/09bcc3c8/StateNames.php
  • 当我点击搜索时,它会刷新页面并为我提供输出,但我选择的选项不会保留。如果您能告知我们为什么在 select 标记中编写 php 代码以及为什么在 select 标记中的 php 内回显的值未显示在输出中,这将很有帮助。
  • 是的,谢谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2012-10-14
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多