【发布时间】:2014-03-18 17:02:02
【问题描述】:
我确定我遗漏了一些明显的东西,但是当表单提交给自身时,我无法在表单 POST 上保留选择值和多个选择值。
这是基本形式:
<?php
// Setup Fields, Initially Empty
$first_name = $last_name = $age = $fruit = "";
// Start session
session_start();
// Register
session_register('first_name');
session_register('last_name');
session_register('age');
session_register('fruit');
// Populate
$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['age'] = $age;
$_SESSION['fruit'] = $fruit;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
</head>
<body>
<div>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" name="submit_data" method="POST" id="submit_data">
<p><label for="first_name">First Name</label><input type="text" id="first_name" size="20" maxlength="100" value="<?php echo $first_name;?>" name="first_name" />
</p>
<p><label for="last_name">Last Name</label><input type="text" id="last_name" size="20" maxlength="100" value="<?php echo $last_name;?>" name="last_name" />
</p>
<p><label for="age">Are you:</label>
<select id="age" name="age">
<option value=""></option>
<option value="0">Under 50</option>
<option value="1">50+</option>
</select>
</p>
<p><label for="fruit">Pick some fruit</label>
<select id="fruit" name="fruit[]" multiple="multiple">
<option value="Apple">Apple</option>
<option value="Banana">Banana</option>
<option value="Orange">Orange</option>
</select>
</p>
<input type="submit" name="submit" value="Submit" />
</form>
</div>
</body>
</html>
“年龄”选择是一个单选选项,而“水果”选择是一个多选列表(它也是一个数组,因此是“水果[]”名称)。
如果提交了表单,我希望在页面刷新时选择选择值,就像通过 PHP 会话选择名字和姓氏字段一样。
我确定有一种方法类似于以下内容,但无法使其工作:
if (isset($_POST['fruit'])){
$chosen = $_POST['fruit'];
foreach($chosen as $selected)
echo 'selected'.$selected;
}
请有人为我指出这个基本表单要求的正确方向吗?
谢谢
【问题讨论】:
-
旁注:
session_register()自 PHP 5.3.0 起已弃用此功能,自 PHP 5.4.0 起已删除。 -
您使用的是什么版本的 PHP?
session_register是一个完整的 NO NO。不要使用它。此外,您不应该使用register_globals,我认为您必须使用它,因为您从不引用 $_GET 或 $_POST。 -
现在是 5.3.24 - 我不照顾环境,所以如果 session_register 是不,我将不得不寻找替代方案。谢谢。
-
其实你已经在使用
$_SESSION['first_name'] = $first_name;等@MCG 删除包含session_register的其他内容了 -
您已经使用了正确的替代方法,它的 `$_SESSION['first_name'] = $first_name;等