我遗漏了一些显而易见的东西我确定,但是当表单提交给自己时,我无法在表单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>
“age”选择是一个单选项,其中“fruit”select是一个多选列表(也是一个数组,因此是“fruit []”名称。)
如果表单已提交,我希望在页面刷新时选择选择值,方法与第一个名称和姓氏字段相同,通过PHP会话。
我确信有一种方法符合以下方法,但无法使其发挥作用:
if (isset($_POST['fruit'])){
$chosen = $_POST['fruit'];
foreach($chosen as $selected)
echo 'selected'.$selected;
}
请问有人能指出我这个基本表格要求的正确方向吗?
由于
答案 0 :(得分:0)
因为您使用的是register_globals
,所以在代码开始运行之前,系统会自动为您创建这些变量。
$first_name, $last_name, $age, $fruit
所以当你在代码的第一行执行此操作时
// Setup Fields, Initially Empty
$first_name = $last_name = $age = $fruit = "";
您将值设置为''
。当你尝试将它们放入$ _SESSION时它们是空的并不奇怪。当您尝试将它们放回输入字段时,同上它。
停止使用register_globals
功能,使用$_POST['xxx']
或$_GET['xxx']
或绝对必要$_REQUEST['xxx']
引用来自提交表单的变量。它将使您的代码以后更容易理解,并且更加便携。
答案 1 :(得分:0)
内联你会做类似
的事情// for 'age' (single select)
<option value="0"<?php if(isset($_POST['age']) && $_POST['age']==0) echo ' selected'; ?> >Under 50</option>
//for 'fruit' (multiple select)
<option value="Apple"<?php if(isset($_POST['fruit']) && in_array('Apple',$_POST['fruit'])) echo ' selected'; ?>>Apple</option>
您需要为每个选择<option>
如果你想这样做,你可以做一个php循环
// for 'age' (single select)
<select id="age" name="age">
<option value=""></option>
<?php
$opts = array(0=>'Under 50',1=>'50+');
foreach($opts as $k=>$v) {
$s = (isset($_POST['age']) && $_POST['age']==0) ? ' selected': '';
echo "<option value=\"{$k}\"{$s}>{$v}</option>";
}
?>
</select>
//for 'fruit' (multiple select)
<select id="fruit" name="fruit[]" multiple="multiple">
<?php
$opts = array('Apple','Banana','Orange');
foreach($opts as $v) {
$s = (isset($_POST['fruit']) && in_array($v,$_POST['fruit'])) ? ' selected': '';
echo "<option value=\"{$v}\"{$s}>{$v}</option>";
}
?>
</select>