为什么PHP无法正常工作?

时间:2011-03-10 14:17:09

标签: php html arrays select

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

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>

然而,比方说,例如我选择,第1天,第1个月和2011年,它出现了000.为什么这个以及我该怎么做才能纠正这个问题?

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

6 个答案:

答案 0 :(得分:1)

你的问题可能在这里:

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

由于range()已经创建了一个数组,所以你将一个数组包装在一个数组中。我怀疑这是有意的。

答案 1 :(得分:1)

尝试

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

答案 2 :(得分: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一年。

所以简单地改变,因为我描述的开始将解决你的问题。

答案 3 :(得分:0)

您编写了value=<?php echo $key ?>,因此发送的实际值是您的数组的索引。由于第1天的索引为0,因此第1个月的索引为0,而2011年的索引为0,即000。

如果您使用value=<?php echo $value ?>,结果将是112011。

答案 4 :(得分:0)

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

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

此外,您的foreach应以不同方式编写:

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

使用您的代码,您使用数组的条目索引作为值来回显选项标记(这就是为什么它因此而打印000)。

希望这有帮助。

答案 5 :(得分:0)

需要进行一些更改:

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

试试这段代码:

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

(几个月和几年相同)