为什么我的php下拉表单导致未定义的偏移量

时间:2011-05-19 12:07:40

标签: php forms

请你检查一下这段代码,看看为什么它返回一个未定义的偏移量:以及如何修复它。

options.php

<?php
$options = array();
$options["PC 1"] = array("year"=>"2000","colour"=>"blue");
$options["PC 2"] = array("year"=>"2003","colour"=>"pink");
$options["PC 3"] = array("year"=>"2006","colour"=>"orange"); 
?>

的index.php

<html>
<body>
<form name="input" action="test.php" method="post">
Device Name: <?php
include("options.php");
echo '<select name="option">';
foreach($options as $name => $values)
{    echo '<option value="' .$name .'">' .$name .'</option>';
}
echo '</select>';
?>
<input type="submit" value="Submit" />
</form> 
</body>
</html>

test.php的

<?php
include("options.php");
$chosenValue = $_POST['option'];
list($year,$colour) = $options[$chosenValue];  ---- here is the error line

echo $year;
echo $colour;

?>

由于

2 个答案:

答案 0 :(得分:0)

我认为这是因为数组$options中的键有空格。这在PHP中完全有效/合法,但在HTML中,提交表单时它不喜欢它。

尝试将它们更改为$options["PC1"],依此类推,看看是否修复了它。

修改:来自PHP manual - list() only works on numerical arrays and assumes the numerical indices start at 0.

尝试将test.php更改为:

<?php
include("options.php");
$chosenValue = $_POST['option'];
$year = $options[$chosenValue]['year'];
$colour = $options[$chosenValue]['colour'];

echo $year;
echo $colour;
?>

答案 1 :(得分:0)

更改test.php中访问年份和颜色的方式,list()似乎不适用于非数字索引。 php文档中用户提供的一条评论符合您的需求

http://www.php.net/manual/en/function.list.php#53420

或者只是去

$data = &$options[$chosenValue];
echo $data['year']; // etc