我有一个php页面,用户可以在表单中的字段中输入数据。 该表单还有一个图片上传实用程序。 每次上传新图片时都会刷新此页面,因此要“记住”用户ALREADY填写的值,我有以下代码:
<input type="text" value="<?php echo @$_POST['name'];?>">
这不适用于下拉列表或无线电......
我有一个来自之前Q的解决方案,但这意味着我必须在PHP中再次创建所有下拉列表,当它们现在是HTML时,并且下拉列表中有很多选项。
还有其他办法吗?
这是第一个解决方案:
$color = $_POST["colors"];
$colors = array("red","green","blue");
<select name="colors">
<?php foreach ($colors as $option) { ?>
<option<?php print ($option == $color) ? " selected" : ""; ?>>
<?php print $option; ?>
</option>
<?php } ?>
</select>
由于
答案 0 :(得分:2)
很抱歉,但无论多大的痛苦,您都必须输出有效的HTML。最好的建议是将它包装在辅助函数中并包含它。或者甚至更好,找一个好的表单处理库并使用它。这个问题已经解决了1000多次。
XSS CONCERN:您的示例代码存在许多安全漏洞。让我举例说明一种干净利落地处理表单的简单方法。以下代码说明了要处理的防错方法:
请注意在需要时使用htmlspecialchars
和ENT_QUOTES
。此外,使用cond ? val1 : val2
运算符可确保在不使用E_STRICT
的情况下省略@
警告(这可能会对性能造成严重影响)。
<?php
$FirstName = trim(isset($_POST['FirstName']) ? $_POST['FirstName'] : '');
$LastName = trim(isset($_POST['LastName']) ? $_POST['LastName'] : '');
$Gender = trim(isset($_POST['Gender']) ? $_POST['Gender'] : '');
$Action = trim(isset($_POST['Action']) ? $_POST['Action'] : '');
$Errors = array();
switch($Action)
{
case 'Process':
// validation code here
if(empty($FirstName))
$Errors[] = 'First Name is required.';
if(empty($LastName))
$Errors[] = 'Last Name is required.';
if($Gender != 'Male' and $Gender != 'Female')
$Errors[] = 'Gender is required.';
if(count($Errors) > 0)
$break;
// save data or whatever here
// Redirect to next page
header('Location: nextpage.php');
exit;
}
?>
<html>
<head>
...
</head>
<body>
<?php if(count($Errors) > 0) { ?>
<div class="error">
<?php foreach($Error as $e) { ?>
<p><?php echo htmlspecialchars($e); ?></p>
<?php } ?>
</div>
<?php } ?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES); ?>">
<p>
First Name:
<input type="text" name="FirstName" value="<?php echo htmlspecialchars($FirstName, ENT_QUOTES); ?>" />
</p>
<p>
Last Name:
<input type="text" name="LastName" value="<?php echo htmlspecialchars($LastName, ENT_QUOTES); ?>" />
</p>
<p>
Gender:
<select name="Gender">
<option value=""></option>
<option value="Male" <?php if($Gender == 'Male') echo 'selected="selected"'; ?>>Male</option>
<option value="Female" <?php if($Gender == 'Female') echo 'selected="selected"'; ?>>Female</option>
</select>
</p>
</form>
</body>
</html>
答案 1 :(得分:0)
您可以使用Javascript在运行时选择一个选项,并且可以使用PHP控制Javascript。
像这样:
<?php $color = $_POST["colors"]; ?>
<script language = "JavaScript">
var colorOption = document.getElementById("<?php print($color)?>");
colorOption.selected = true;
</script>
只需让该脚本运行onLoad,并将每个option
项的id
设置为其值。
答案 2 :(得分:0)
你不必用php完全重做列表 - 只是标记当前选择的位:
<select name="opts">
<option <?php if(@$_POST['opts'] == 'value1') echo 'selected="SELECTED"'; ?>>value1</option>
<option <?php if(@$_POST['opts'] == 'value2') echo 'selected="SELECTED"'; ?>>value2</option>
</select>
答案 3 :(得分:0)
我们有多少个选择框和单选按钮。如果计数小于10你可以使用javascript并轻松实现。否则建议在php中选择框
PHP代码:
<?php
$color = $_POST["colors"];
$colors = array("red","green","blue");
?>
<select name="colors">
<?php
$varSelected = "";
foreach ($colors as $option)
{
if($option == $color)
{
$varSelected = "selected:selected";
}
else
{
$varSelected ="";
}
?>
<option <?php echo $varSelected?>>
<?php print $option; ?>
</option>
<?php
}
?>
</select>
Javasript方法:需要进行表单修改。您必须在选项框中添加id,它与其值相同。
// supposing $_POST['colors']='Red';
<html>
<select name="gender">
<option value="Red" id="Red">Red</option>
<option value="Blue" id="Blue">Blue</option>
</select>
</html>
<script type="text/javascript">
document.getElementById("<?php echo $_POST['colors']").setAttribute("selected", "selected");
</script>