【问题标题】:Why is this not working correctly PHP?为什么这不能正常工作 PHP?
【发布时间】:2011-03-10 14:17:08
【问题描述】:

我有我有两页。一个带有选择框和发送按钮。当用户从选择框中选择他们的选项并单击发送时,它会将他们带到输出他们选择的第二页。

date_change.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Loughborough University | Students Union</title>
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />

</head>

<body>
<?php
$day = array(range(1,31));
$month = array(range(1,12));
$year = array(range(2011,2020));
print_r($day);


?>
<form action="test.php" method="post">
Day:
<select name="day">
  <?php foreach($day[0]++ as $key => $value) { ?>
    <option value="<?php echo $key ?>" ><?php echo $value ?></option>
  <?php }?>
</select>
<br>
Month:
<select name="month">
  <?php foreach($month[0]++ as $key => $value) { ?>
    <option value="<?php echo $key ?>" ><?php echo $value ?></option>
  <?php }?>
</select>
<br>
Year:
<select name="year">
  <?php foreach($year[0]++ as $key => $value) { ?>
    <option value="<?php echo $key ?>" ><?php echo $value ?></option>
  <?php }?>
</select>
<input type='submit' value='send' name='send' />
</form>


</body>
</html>

和test.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Loughborough University | Students Union</title>
<link href="style.css" rel="stylesheet" type="text/css" media="screen" />

</head>

<body>

<?php   
$day = $_POST["day"];
$month = $_POST["month"];
$year = $_POST["year"];

echo $day;
echo $month;
echo $year;
?>

Date Selected: <?php echo $_POST["day"];echo $_POST["month"];echo $_POST["year"]; ?>

</body>
</html>

但是,例如,我选择 2011 年第 1 天、第 1 个月和 2011 年,结果为 000。为什么会这样,我可以做些什么来纠正这个问题?

感谢您的任何想法或建议。

【问题讨论】:

  • 那是ment,所以它每次都加一个,直到它到达范围的末尾
  • 请为您的任务付出一些努力。您的个人资料清楚地表明,上面的整个代码都是由 SO 成员编写的。
  • 如果您检查我所做的所有 html 和基本 php,它根本没有,他们为我提供了一两个字的更改,是的,这产生了很大的不同,但它背后的基本结构是我的。因此,与其像那样离开 cmets,不如试着帮忙。一切都必须从某个地方开始,像你这样的人给编程社区一个坏名声

标签: php html arrays select


【解决方案1】:

在每个选项中,您都必须使用$value 而不是$key

<option value="<?php echo $value ?>" >

因为您传递给输入的只是键,而不是值。

例如:

$year = array(range(2011,2020));

创建一个数组:

array(
  0 => 2011,
  1 => 2012,
  2 => 2013,
  3 => 2014,
  4 => 2015,
  5 => 2016,
  6 => 2017,
  ...
)

所以如果你选择2014:

<option value="<?php echo $key ?>" ><?php echo $value ?></option>

等于

<option value="3">2014</option>

在您发布的test.php 页面中,您将获得3 作为一年。

因此,按照我在开始时的描述进行更改即可解决您的问题。

【讨论】:

    【解决方案2】:

    您的问题可能在这里:

    $day = array(range(1,31));
    $month = array(range(1,12));
    $year = array(range(2011,2020));
    

    由于range() 已经创建了一个数组,因此您将一个数组包装在一个数组中。我怀疑这是故意的。

    【讨论】:

      【解决方案3】:

      试试

      $day = range(1,31);
      ...
      <?php foreach($day as $value) { ?>
        <option value="<?php echo $value ?>" ><?php echo $value ?></option>
      

      【讨论】:

        【解决方案4】:

        您写了value=&lt;?php echo $key ?&gt;,因此发送的实际值是您的数组的索引。由于第 1 天的索引为 0,因此第 1 个月的索引为 0,而 2011 年的索引为 0,你得到了 000。

        如果您使用value=&lt;?php echo $value ?&gt;,结果将是 112011。

        【讨论】:

          【解决方案5】:

          $day、$month 等应该分配给数组,而不是包含数组的数组(由range 返回)。 所以:

          $day = range(1,31);
          $month = range(1,12);
          $year = range(2011,2020);
          

          另外,您的foreachs 应该以不同的方式书写:

          foreach($day as $value) {
          ?>
          <option value="<?php echo $value ?>" ><?php echo $value ?></option>
          <?php
          }
          

          在您的代码中,您使用数组的条目索引作为值来回显选项标记(这就是它打印 000 作为结果的原因)。

          希望这会有所帮助。

          【讨论】:

            【解决方案6】:

            需要进行一些更改:

            • 函数range() 已经返回一个表。
            • foreach 语句中的第一个参数必须是数组,而不是增量。
            • 您正在浏览一个简单的数组,而不是关联数组,这意味着键是从0array_length()-1 的整数。因此无需使用密钥。
            • 如果您将value 属性保留在option 标记中,则该值将与显示的标签相同

            试试这个代码:

            $day = range(1,31);
            <?php foreach($day as $value) { ?>
                <option><?php echo $value ?></option>
            <?php }?>
            

            (几个月和几年也是如此)

            【讨论】:

              猜你喜欢
              • 2022-10-23
              • 1970-01-01
              • 2021-01-18
              • 1970-01-01
              • 1970-01-01
              • 2011-09-26
              • 1970-01-01
              • 2014-03-30
              • 2012-06-10
              相关资源
              最近更新 更多